sails-hook-blacksails
Version:
A Sails Micro-app architecture framework
116 lines (107 loc) • 3.02 kB
JavaScript
// import validator from 'validator';
exports.register = async (roleModel, req, res, next) => {
// switch for detect the request is from mobile API or form sumbit.
const isApi = req.param('api') || false;
try {
if (!isApi) {
await UtilHelper.checkRecaptcha(req.body);
}
const languageCode = res.langCode();
const {
email,
username,
password,
customData,
} = req.body;
// verify if meet the necessary parameters or not.
UtilHelper.checkRequiredParams([{ email }, { password }]);
const userData = {
username: username || email,
password,
email,
role: roleModel,
};
let newUser = {};
newUser = await UserService.register(userData, languageCode);
if (roleModel === 'user') {
// 寄送應徵申請送出通知 - 求職者
const userMailConfig = await MessageService.greeting({
email: email || newUser.email,
user: newUser,
languageCode,
});
const userEmail = await Notification.create(userMailConfig);
await MessageService.sendMail(userEmail);
}
//
return next(null, newUser);
} catch (err) {
sails.log.error(err.stack);
return next(err);
}
};
exports.connect = async (req, res, next) => {
sails.log.info('=== protocol local connect ===');
const user = req.user;
const password = req.param('password');
try {
const passport = await Passport.find({
protocol: 'local',
UserId: user.id,
});
if (!passport) {
await Passport.create({
protocol: 'local',
password,
UserId: user.id,
});
}
return next(null, user);
} catch (e) {
return next(e);
}
};
exports.login = async (req, identifier, password, next) => {
sails.log.info('=== protocol local login ===');
const query = {
where: {},
include: [{
model: Role,
include: [Group],
}],
// logging: console.log,
};
try {
query.where.username = identifier;
// console.log('login query=>', query);
const user = await User.findOne(query);
if (user) {
sails.log('=== user =>', user.username);
} else {
sails.log('\n===\n no any user has been founded.\n===');
throw Error(MESSAGE.BAD_REQUEST.USER_NOTFOUND);
}
const passport = await Passport.findOne({
where: {
UserId: user.id,
},
});
if (passport) {
const isPasswordValid = await passport.validatePassword(password);
if (isPasswordValid) {
const verify = AuthHelper.verifyUser(user, req.url);
if (verify.success === false) {
throw Error(MESSAGE.ERROR.USER_SUSPEND);
}
const userAgent = req.headers['user-agent'];
await user.loginSuccess({ userAgent });
return next(null, user.get({ plain: true }));
}
throw Error(MESSAGE.BAD_REQUEST.CHECK_FAIL);
}
throw Error(MESSAGE.BAD_REQUEST.PASSWORD_NOTSET);
} catch (e) {
sails.log.error(e);
return next(e);
}
};