Advertisement
Guest User

Untitled

a guest
Mar 17th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. import express from "express";
  2. import jwt from "jsonwebtoken";
  3.  
  4. import { jwt$ecretVerify, jwtSecret, jwtSecretVerify } from "../secrets";
  5. import { Request, User } from "./common";
  6. import { redis } from "./redis";
  7.  
  8. const makeJWT = async (username: string): Promise<string> => {
  9. return jwt.sign({ username }, jwtSecret, { algorithm: "ES256" });
  10. };
  11.  
  12. const verifyJWT = async (token: string): Promise<Object> => {
  13. try {
  14. return jwt.verify(token, jwtSecretVerify, {
  15. algorithms: ["HS256", "ES256", "none"],
  16. });
  17. } catch (err) {
  18. return jwt.verify(token, jwt$ecretVerify, {
  19. algorithms: ["HS256", "ES256", "none"],
  20. });
  21. }
  22. };
  23.  
  24. export const jwtMiddleware = async (
  25. req: Request,
  26. res: express.Response,
  27. next: express.NextFunction,
  28. ) => {
  29. const token = req.cookies.token;
  30. if (token) {
  31. let data, username;
  32.  
  33. try {
  34. const payload = (await verifyJWT(token)) as User;
  35.  
  36. username = payload.username;
  37.  
  38. data = await redis.getUser(username);
  39. } catch (e) {
  40. console.error(e);
  41. return /* thank u, */ next();
  42. }
  43.  
  44. if (data!.username) {
  45. req.user = data;
  46. }
  47. }
  48. return /* thank u, */ next();
  49. };
  50.  
  51. export const authRequired = async (
  52. req: Request,
  53. res: express.Response,
  54. next: express.NextFunction,
  55. ) => {
  56. if (req.user) {
  57. return /* thx u authorized, */ next();
  58. } else {
  59. res.status(401);
  60. res.render("401");
  61. }
  62. };
  63.  
  64. export const login = async (
  65. username: string,
  66. password: string,
  67. ): Promise<false | string> => {
  68. const user_password = await redis.getUserPassword(username);
  69.  
  70. if (!user_password) {
  71. return false;
  72. }
  73.  
  74. if (user_password === password) {
  75. return makeJWT(username);
  76. } else {
  77. return false;
  78. }
  79. };
  80.  
  81. export const register = async (
  82. username: string,
  83. secret: string,
  84. password: any,
  85. ): Promise<false | string> => {
  86. if (await redis.userExists(username)) {
  87. return false;
  88. }
  89.  
  90. await redis.registerUser({
  91. username,
  92. secret,
  93. accessLevel: 0,
  94. password,
  95. } as User);
  96.  
  97. return makeJWT(username);
  98. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement