Guest User

Untitled

a guest
Dec 27th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.11 KB | None | 0 0
  1. import jwt = require("jsonwebtoken");
  2. import { model } from "mongoose";
  3. import { completeRequest } from "../functions/complete";
  4. import { IUser } from "../interfaces";
  5. import { Response } from "../models";
  6. import { UserSchema } from "../schemas";
  7. import { Config } from "../shared";
  8.  
  9. const User = model("User", UserSchema);
  10.  
  11. /**
  12. * This is route for registering user in database
  13. * @param args
  14. */
  15.  
  16. export async function register(args) {
  17. const promise: Promise<Response> = new Promise<Response>((resolve, reject) => {
  18.  
  19. const secret: any = Config.secretKeys.jwtSecret;
  20. // getting data from args
  21. const username = String(args.input.username).trim();
  22. if (!username || !args.input.username || !args.input.name) {
  23. reject(new Response(200, "Please fill both username and name", {
  24. success: false,
  25. }));
  26. } else if (username.length < 4 || args.input.name.trim().length < 4) {
  27. reject(new Response(200, "Username and name should be contain atleast 4 characters", {
  28. success: false,
  29. }));
  30. } else {
  31. const name = args.input.name.trim();
  32. User.findOne({ username }).then((user: any) => {
  33. if (user !== null) {
  34. reject(new Response(200, "username already in use", {
  35. success: false,
  36. }));
  37. } else {
  38. const newUser: any = new User({
  39. username,
  40. name,
  41. });
  42.  
  43. newUser.id = newUser._id;
  44. // generating new hashed password
  45. newUser.password = newUser.generateHash(args.input.password);
  46. newUser.save().then((user: IUser) => {
  47.  
  48. const token = jwt.sign({ id: user._id }, secret, {
  49. expiresIn: "23h",
  50. });
  51.  
  52. resolve(new Response(200, "Successful response", {
  53. success: true,
  54. user,
  55. token,
  56. }));
  57. });
  58. }
  59. });
  60. }
  61. });
  62. const val = await completeRequest(promise);
  63. return val;
  64. }
  65.  
  66. export async function login(args) {
  67. const promise: Promise<Response> = new Promise<Response>((resolve, reject) => {
  68.  
  69. if (!args.input.username || !args.input.password) {
  70. reject(new Response(200, "Please enter both field username and password", {
  71. success: false,
  72. }));
  73. }
  74. // Getting data from req.body
  75. const username = args.input.username;
  76. const secret: any = Config.secretKeys.jwtSecret;
  77. // Searching for User in database
  78. User.findOne({ username }).select("password id createdAt updatedAt").then((user: any) => {
  79. if (!user) {
  80. reject(new Response(200, "Sorry, No user found", {
  81. success: false,
  82. }));
  83. } else {
  84. if (!user.validPassword(args.input.password)) {
  85. reject(new Response(200, "Incorrect Password", {
  86. success: false,
  87. }));
  88. } else {
  89. const token = jwt.sign({ id: user._id }, secret, {
  90. expiresIn: "23h",
  91. });
  92. resolve(new Response(200, "Successful response", {
  93. success: true,
  94. user,
  95. token,
  96. }));
  97. }
  98. }
  99. });
  100. });
  101. const val = await completeRequest(promise);
  102. return val;
  103. }
Add Comment
Please, Sign In to add comment