Initial commit
This commit is contained in:
167
controllers/AuthController.js
Normal file
167
controllers/AuthController.js
Normal file
@ -0,0 +1,167 @@
|
||||
const moment = require('moment');
|
||||
const Validator = require('validatorjs');
|
||||
const Helper = require('../library/LibHelper');
|
||||
const UsersModels = require('../models/UsersModels');
|
||||
const LibPassword = require('../library/LibPassword');
|
||||
const LibJwt = require('../library/LibJwt');
|
||||
const response = require('../config/response');
|
||||
|
||||
Validator.useLang('en');
|
||||
|
||||
class AuthController {
|
||||
|
||||
async register(req, res) {
|
||||
let apiRes = {};
|
||||
try {
|
||||
const now = moment().unix();
|
||||
|
||||
// input validation
|
||||
const input = {
|
||||
first_name: req.body.first_name,
|
||||
last_name: req.body.last_name,
|
||||
email: req.body.email,
|
||||
password: req.body.password,
|
||||
crt_at: moment.unix(now).format('YYYY-MM-DD HH:mm:ss'),
|
||||
updt_at: moment.unix(now).format('YYYY-MM-DD HH:mm:ss'),
|
||||
};
|
||||
const rulesInput = {
|
||||
first_name: 'required|string|max:45',
|
||||
last_name: 'required|string|max:45',
|
||||
email: 'required|email|max:45',
|
||||
password: 'required|string|min:6|max:16',
|
||||
};
|
||||
const isInputValid = new Validator(input, rulesInput);
|
||||
if (isInputValid.fails()) {
|
||||
apiRes = JSON.parse(JSON.stringify(response[422]));
|
||||
apiRes.meta.message += Helper.setErrMsg(': ' + Object.values(isInputValid.errors.all())[0][0]); // get first message
|
||||
|
||||
return res.status(200).json(apiRes);
|
||||
}
|
||||
|
||||
// check email unique
|
||||
const getUsers = await UsersModels.findEmail(input.email);
|
||||
if (getUsers.length > 0) {
|
||||
apiRes.meta = response['email_unique'].meta;
|
||||
return res.status(200).json(apiRes);
|
||||
}
|
||||
|
||||
// create account
|
||||
input.password = await LibPassword.hashPw(input.password); // hash password
|
||||
const respCreateUser = await UsersModels.create(input);
|
||||
|
||||
// success response
|
||||
apiRes.meta = response[201].meta;
|
||||
apiRes.data = (await UsersModels.find(respCreateUser.insertId))[0];
|
||||
return res.status(201).json(apiRes);
|
||||
} catch (e) {
|
||||
apiRes = JSON.parse(JSON.stringify(response[500]));
|
||||
apiRes.meta.message += Helper.setErrMsg(': ' + e.message);
|
||||
return res.status(500).json(apiRes);
|
||||
}
|
||||
}
|
||||
|
||||
async login(req, res) {
|
||||
let apiRes = {}
|
||||
try {
|
||||
const now = moment().unix()
|
||||
|
||||
// input validation
|
||||
const input = {
|
||||
email: req.body.email,
|
||||
password: req.body.password,
|
||||
};
|
||||
const rulesInput = {
|
||||
email: 'required|email',
|
||||
password: 'required|string',
|
||||
};
|
||||
const isInputValid = new Validator(input, rulesInput);
|
||||
if (isInputValid.fails()) {
|
||||
apiRes = JSON.parse(JSON.stringify(response[422]));
|
||||
apiRes.meta.message += Helper.setErrMsg(': ' + Object.values(isInputValid.errors.all())[0][0]); // get first message
|
||||
|
||||
return res.status(200).json(apiRes);
|
||||
}
|
||||
|
||||
// login
|
||||
const getUsers = await UsersModels.findEmail(input.email);
|
||||
if (getUsers.length < 1) {
|
||||
apiRes = JSON.parse(JSON.stringify(response[404]));
|
||||
return res.status(200).json(apiRes);
|
||||
}
|
||||
const isPwValid = await LibPassword.checkPw(getUsers[0].password, input.password);
|
||||
if (!isPwValid) {
|
||||
apiRes.meta = response['wrong_password'].meta;
|
||||
return res.status(200).json(apiRes);
|
||||
}
|
||||
|
||||
await UsersModels.update({is_login: 1}, getUsers[0].id);
|
||||
|
||||
// success response
|
||||
const jwt = await LibJwt.createToken({
|
||||
uid: getUsers[0].id
|
||||
});
|
||||
apiRes = JSON.parse(JSON.stringify(response[200]));
|
||||
apiRes.meta.message = 'success login';
|
||||
apiRes.data = getUsers[0];
|
||||
apiRes.token = jwt.token;
|
||||
return res.status(200).json(apiRes);
|
||||
} catch (e) {
|
||||
apiRes = JSON.parse(JSON.stringify(response[500]));
|
||||
apiRes.meta.message += Helper.setErrMsg(': ' + e.message);
|
||||
return res.status(500).json(apiRes);
|
||||
}
|
||||
}
|
||||
|
||||
async profile(req, res) {
|
||||
let apiRes = {}
|
||||
try {
|
||||
const now = moment().unix();
|
||||
const { uid } = req.jwt;
|
||||
|
||||
const getUsers = await UsersModels.find(uid);
|
||||
if (getUsers.length < 1) {
|
||||
apiRes = JSON.parse(JSON.stringify(response[404]));
|
||||
return res.status(200).json(apiRes);
|
||||
}
|
||||
|
||||
delete getUsers[0].password;
|
||||
|
||||
apiRes = JSON.parse(JSON.stringify(response[200]));
|
||||
apiRes.data = getUsers[0];
|
||||
return res.status(200).json(apiRes);
|
||||
} catch (e) {
|
||||
apiRes = JSON.parse(JSON.stringify(response[500]));
|
||||
apiRes.meta.message += Helper.setErrMsg(': ' + e.message);
|
||||
return res.status(500).json(apiRes);
|
||||
}
|
||||
}
|
||||
|
||||
async logout(req, res) {
|
||||
let apiRes = {}
|
||||
try {
|
||||
const now = moment().unix();
|
||||
const { uid } = req.jwt;
|
||||
|
||||
const getUsers = await UsersModels.find(uid);
|
||||
if (getUsers.length < 1) {
|
||||
apiRes = JSON.parse(JSON.stringify(response[404]));
|
||||
return res.status(200).json(apiRes);
|
||||
}
|
||||
|
||||
await UsersModels.update({is_login: 0}, uid);
|
||||
|
||||
apiRes = JSON.parse(JSON.stringify(response[200]));
|
||||
apiRes.meta.message = 'success logout';
|
||||
return res.status(200).json(apiRes);
|
||||
} catch (e) {
|
||||
apiRes = JSON.parse(JSON.stringify(response[500]));
|
||||
apiRes.meta.message += Helper.setErrMsg(': ' + e.message);
|
||||
return res.status(500).json(apiRes);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const object = new AuthController();
|
||||
|
||||
module.exports = object;
|
||||
Reference in New Issue
Block a user