Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Joi from 'joi'
- import { POST } from 'Constants/methods'
- import { ANY } from 'Constants/ranks'
- import Log from 'Logger'
- import Users from 'Models/users'
- import { createToken } from 'Helpers/auth'
- import { comparePassword } from 'Helpers/auth'
- import { userToPublic } from 'Utils/users'
- const schema = {
- body: {
- email: Joi.string().email().required(),
- password: Joi.string().min(8).max(64).required()
- }
- }
- const findUser = (request, response, next) => {
- let credentials = request.body
- Users.findOne({
- where: {
- email: credentials.email
- }
- })
- .then(user => {
- if (!user) {
- return response.boom.badRequest('Unknown user')
- }
- request.datas = {
- credentials,
- user
- }
- next()
- })
- .catch(error => {
- response.boom.serverUnavailable('Database error')
- Log.error('Error while fetching an user in database', credentials, error)
- })
- }
- const checkPassword = (request, response, next) => {
- let { credentials, user } = request.datas
- comparePassword(credentials.password, user.password)
- .then(isValid => {
- if (!isValid) {
- return response.boom.badRequest('Bad password')
- }
- next()
- })
- .catch(error => {
- response.boom.badImplementation('Internal servor error')
- Log.error('Error while comparing user password', credentials, user, error)
- })
- }
- const sendCookie = (request, response) => {
- let { credentials, user } = request.datas
- const payload = {
- email: credentials.email,
- rank: user.rank,
- id: user.id
- }
- const token = createToken(payload)
- response.cookie('token', token)
- response.status(200).json(userToPublic(user))
- }
- export default {
- type: POST,
- path: '/login',
- rank: ANY,
- handlers: [
- findUser,
- checkPassword,
- sendCookie
- ],
- schema
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement