Advertisement
Guest User

Untitled

a guest
May 14th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.08 KB | None | 0 0
  1. //maplyful/server/index.js
  2.  
  3. //sign in existing users
  4.  
  5. const salt = bcrypt.genSaltSync(10);
  6.  
  7. app.post('/signin', (req, res) => {
  8. const { emailOrUsername, password } = req.body;
  9.  
  10. if (!userValidity.allFormFieldsFilledIn(req.body)) {
  11. return res.status(422).json({ message: 'All fields are required.' });
  12. }
  13. knex('users').where('email', emailOrUsername)
  14. .orWhere('username', emailOrUsername)
  15. .then((user) => {
  16. if (!user[0]) {
  17. return res.status(401).json({ message: 'The email or username you entered is incorrect.' });
  18. }
  19. if (verifyPassword(password, user[0].salt, user[0].password)) {
  20. const { first_name, last_name, id, bio, image, username, token, email } = user[0];
  21. return res.status(200).json({
  22. first_name,
  23. last_name,
  24. id,
  25. bio,
  26. image,
  27. username,
  28. token,
  29. email
  30. });
  31. }
  32. return res.status(401).json({ message: 'The password you entered is incorrect.' });
  33. });
  34. });
  35.  
  36. //sign up new users, encrypt their passwords
  37.  
  38. app.post('/signup', (req, res) => {
  39. const user = req;
  40. const { password, email, username } = req.body;
  41. const passwordToSave = bcrypt.hashSync(password, salt);
  42. const token = uuidV1();
  43. const userValidityCheck = userValidity.signUpValidity(user);
  44.  
  45. if (userValidityCheck.isInvalid) {
  46. return res.status(userValidityCheck.status).json({ message: userValidityCheck.message });
  47. }
  48.  
  49. //check to see if username or email is already taken, if not create user
  50.  
  51. knex('users').where('email', email).then((user) => {
  52. if (user.length > 0) {
  53. return res.status(409)
  54. .json({ message: 'That email address is already on file. Try signing in.' });
  55. }
  56. });
  57.  
  58. knex('users').where('username', username).then((user) => {
  59. if (user.length > 0) {
  60. return res.status(409).json({ message: 'Username is already taken.' });
  61. }
  62. knex.insert({
  63. first_name: req.body.first_name,
  64. last_name: req.body.last_name,
  65. email: req.body.email,
  66. username: req.body.username,
  67. password: passwordToSave,
  68. salt,
  69. token
  70. }).into('users')
  71. .then(() => knex('users').where('username', req.body.username)
  72. .then((user) => {
  73. const { first_name, last_name, id, bio, image, username, token, email } = user[0];
  74. return res.status(201).json({
  75. first_name,
  76. last_name,
  77. id,
  78. bio,
  79. image,
  80. username,
  81. token,
  82. email
  83. });
  84. })).catch(err => {
  85. console.error(err);
  86. return res.sendStatus(500);
  87. });
  88. });
  89. });
  90.  
  91.  
  92. //keep users logged in
  93.  
  94. app.get('/find/cookie/:token', (req, res) => {
  95. const { token } = req.params;
  96. knex('users')
  97. .where('token', token)
  98. .then(user => {
  99. if (!user[0]) {
  100. res.status(404).json({ message: 'User not found' });
  101. } else {
  102. const { first_name, last_name, id, bio, image, username, token, email } = user[0];
  103. return res.status(200).json({
  104. first_name,
  105. last_name,
  106. id,
  107. bio,
  108. image,
  109. username,
  110. token,
  111. email
  112. });
  113. }
  114. });
  115. });
  116.  
  117.  
  118. //maplyful/server/handlers/user_handlers/verify_password.js
  119.  
  120. import bcrypt from 'bcryptjs';
  121.  
  122. const verifyPassword = (candidatePassword, salt, encryptedPassword) => {
  123. candidatePassword = bcrypt.hashSync(candidatePassword, salt);
  124. return candidatePassword === encryptedPassword;
  125. };
  126.  
  127. export default verifyPassword;
  128.  
  129. //maplyful/server/handlers/user_handlers/sign_up_validity.js
  130.  
  131. const validEmail = email => {
  132. const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  133. return re.test(email);
  134. };
  135.  
  136. export const allFormFieldsFilledIn = request => {
  137. for (const field in request) {
  138. if (request[field] === '') {
  139. return false;
  140. }
  141. }
  142. return true;
  143. };
  144.  
  145. const passwordMeetsRequirements = password => {
  146. const symbol = /[!@#$%^&*-_=+-{}\\?.()]/;
  147. const digit = /\d+/g;
  148.  
  149. if (password.length < 6) {
  150. return false;
  151. } else if (!password.match(digit)) {
  152. return false;
  153. } else if (!password.match(symbol)) {
  154. return false;
  155. }
  156. return true;
  157. };
  158.  
  159. export const signUpValidity = (req) => {
  160. let { password, email, confirmed_password } = req.body;
  161. password = password.trim();
  162. confirmed_password = confirmed_password.trim();
  163. email = email.trim();
  164.  
  165. if (!allFormFieldsFilledIn(req.body)) {
  166. return {
  167. isInvalid: true,
  168. status: 422,
  169. message: 'All fields are required.'
  170. };
  171. }
  172.  
  173. if (!validEmail(email)) {
  174. return {
  175. isInvalid: true,
  176. status: 422,
  177. message: 'A valid email address is required.'
  178. };
  179. }
  180.  
  181. if (password !== confirmed_password) {
  182. return {
  183. isInvalid: true,
  184. status: 422,
  185. message: 'Passwords do not match.'
  186. };
  187. }
  188.  
  189. if (!passwordMeetsRequirements(password)) {
  190. return {
  191. isInvalid: true,
  192. status: 422,
  193. message: 'Passwords must contain 6 characters, including 1 number and 1 symbol.'
  194. };
  195. }
  196.  
  197. return {
  198. isInvalid: false
  199. };
  200. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement