update:add ci cd files ==> do not edit those file
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
const User = require('../models/User')
|
||||
const {body, validationResult} = require('express-validator')
|
||||
const bcrypt = require('bcryptjs')
|
||||
const jwt = require('jsonwebtoken')
|
||||
const sharp = require('sharp')
|
||||
const {secretKey, getID} = require('./../authentication')
|
||||
const {_sr} = require('../plugins/serverResponses')
|
||||
const {res404, res500, hasWhiteSpaces, isLatinCharactersWithSymbol, generateRandomDigits, removeWhiteSpaces, checkValidations} = require('../plugins/controllersHelperFunctions')
|
||||
const fs = require('fs')
|
||||
const moment = require('moment-jalaali')
|
||||
|
||||
module.exports.create_admin = [
|
||||
[
|
||||
body('username')
|
||||
.notEmpty().withMessage(_sr['fa'].required.username)
|
||||
.bail()
|
||||
.custom((value, {req}) => {
|
||||
if (hasWhiteSpaces(value)) return Promise.reject(_sr['fa'].response.whiteSpace)
|
||||
return User.findOne({username: value}).then(user => {
|
||||
if (user) return Promise.reject(_sr['fa'].duplicated.username)
|
||||
else return true
|
||||
})
|
||||
}),
|
||||
|
||||
body('password')
|
||||
.custom((value, {req}) => {
|
||||
if (hasWhiteSpaces(value)) return Promise.reject(_sr['fa'].response.whiteSpace)
|
||||
if (removeWhiteSpaces(value).length < 4) return Promise.reject(_sr['fa'].min_char.min4)
|
||||
if (value !== req.body.password_confirmation) return Promise.reject(_sr['fa'].response.passwords_not_match)
|
||||
else return true
|
||||
})
|
||||
],
|
||||
checkValidations(validationResult),
|
||||
async (req, res) => {
|
||||
const {username, password} = req.body
|
||||
|
||||
const data = {username, scope: ['admin']}
|
||||
|
||||
try {
|
||||
const salt = await bcrypt.genSalt(10)
|
||||
const hash = await bcrypt.hash(password, salt)
|
||||
data.password = hash
|
||||
|
||||
const admin = new User(data)
|
||||
await admin.save()
|
||||
return res.json({message: _sr['fa'].response.success_save})
|
||||
} catch (e) {
|
||||
return res500(res, e)
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
/////////////////////////////////////////////////////////////////////// login
|
||||
module.exports.login = [
|
||||
[
|
||||
body('username')
|
||||
.isLength({min: 4}).withMessage(_sr['fa'].min_char.min4)
|
||||
.bail()
|
||||
.if((value, {req}) => {
|
||||
return req.body.password && req.body.password.length >= 4
|
||||
})
|
||||
.custom((value, {req}) => {
|
||||
return User.findOne({$or: [{email: value.toLowerCase()}, {username: value}]})
|
||||
.then(user => {
|
||||
if (!user) return Promise.reject(_sr['fa'].not_found.password)
|
||||
else return true
|
||||
})
|
||||
}),
|
||||
|
||||
body('password')
|
||||
.notEmpty().withMessage(_sr['fa'].required.password)
|
||||
.bail()
|
||||
.isLength({min: 4}).withMessage(_sr['fa'].min_char.min4),
|
||||
|
||||
body('remember_me')
|
||||
.exists().withMessage(_sr['fa'].required.remember_me)
|
||||
.bail()
|
||||
.isBoolean().withMessage(_sr['fa'].format.boolean)
|
||||
],
|
||||
checkValidations(validationResult),
|
||||
(req, res) => {
|
||||
User.findOne({$or: [{email: req.body.username.toLowerCase()}, {username: req.body.username}]}, (err, user) => {
|
||||
if (err || !user) return res404(res, err)
|
||||
bcrypt.compare(req.body.password, user.password, (err, isMatch) => {
|
||||
if (err || !isMatch) return res.status(422).json({validation: {username: {msg: _sr['fa'].not_found.password}}})
|
||||
if (user.token) {
|
||||
jwt.verify(user.token.replace(/^Bearer\s/, ''), secretKey, (err, decoded) => {
|
||||
if (err) {
|
||||
let token = jwt.sign({_id: user._id}, secretKey, {expiresIn: req.body.remember_me ? '7d' : '1h'})
|
||||
user.token = token
|
||||
user.save(err => {
|
||||
if (err) console.log(err)
|
||||
return res.json({token: token})
|
||||
})
|
||||
} else return res.json({token: user.token})
|
||||
})
|
||||
} else {
|
||||
let token = jwt.sign({_id: user._id}, secretKey, {expiresIn: req.body.remember_me ? '7d' : '1h'})
|
||||
user.token = token
|
||||
user.save(err => {
|
||||
if (err) console.log(err)
|
||||
return res.json({token: token})
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
]
|
||||
|
||||
/////////////////////////////////////////////////////////////////////// logout
|
||||
module.exports.logout = [
|
||||
(req, res) => {
|
||||
const token = req.headers.authorization
|
||||
if (token) {
|
||||
User.findOneAndUpdate({token: token}, {token: null}, (err, oldData) => {
|
||||
if (err || !oldData) res.status(401).json({message: 'Your not logged in'})
|
||||
else return res.json({message: 'You are logged out.'})
|
||||
})
|
||||
} else {
|
||||
return res.status(401).json({message: 'Your not logged in'})
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
/////////////////////////////////////////////////////////////////////// get user
|
||||
module.exports.getUser = [
|
||||
(req, res) => {
|
||||
const token = req.headers.authorization
|
||||
if (token) {
|
||||
jwt.verify(token, secretKey, (err, decoded) => {
|
||||
if (err) return res.status(401).json({message: 'unauthenticated'})
|
||||
User.findById(decoded._id, (err, user) => {
|
||||
if (err || !user) return res404(res, err)
|
||||
else return res.json({user: user})
|
||||
})
|
||||
})
|
||||
} else {
|
||||
return res.status(401).json({message: 'unauthenticated'})
|
||||
}
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user