pixelplanet/src/routes/api/auth/register.js

90 lines
2.2 KiB
JavaScript
Raw Normal View History

2020-01-02 16:58:06 +00:00
/**
*
* @flow
*/
import type { Request, Response } from 'express';
import Sequelize from 'sequelize';
import logger from '../../../core/logger';
2020-01-02 16:58:06 +00:00
import { RegUser } from '../../../data/models';
import mailProvider from '../../../core/mail';
import getMe from '../../../core/me';
import { getIPFromRequest, getHostFromRequest } from '../../../utils/ip';
2020-01-06 11:29:33 +00:00
import {
validateEMail,
validateName,
validatePassword,
} from '../../../utils/validation';
2020-01-02 16:58:06 +00:00
2021-01-30 12:32:46 +00:00
async function validate(email, name, password, gettext) {
2020-01-02 16:58:06 +00:00
const errors = [];
const emailerror = validateEMail(email);
if (emailerror) errors.push(emailerror);
const nameerror = validateName(name);
if (nameerror) errors.push(nameerror);
2021-01-30 12:32:46 +00:00
const passworderror = gettext(validatePassword(password));
2020-01-02 16:58:06 +00:00
if (passworderror) errors.push(passworderror);
let reguser = await RegUser.findOne({ where: { email } });
if (reguser) errors.push('E-Mail already in use.');
reguser = await RegUser.findOne({ where: { name } });
if (reguser) errors.push('Username already in use.');
return errors;
}
export default async (req: Request, res: Response) => {
const { email, name, password } = req.body;
2021-01-30 12:32:46 +00:00
const { t, gettext } = req.ttag;
const errors = await validate(email, name, password, gettext);
2020-01-02 16:58:06 +00:00
if (errors.length > 0) {
res.status(400);
res.json({
errors,
});
return;
}
const newuser = await RegUser.create({
email,
name,
password,
verificationReqAt: Sequelize.literal('CURRENT_TIMESTAMP'),
lastLogIn: Sequelize.literal('CURRENT_TIMESTAMP'),
});
if (!newuser) {
res.status(500);
res.json({
2021-01-30 12:32:46 +00:00
errors: [t`Failed to create new user :(`],
2020-01-02 16:58:06 +00:00
});
return;
}
const ip = getIPFromRequest(req);
logger.info(`Created new user ${name} ${email} ${ip}`);
2021-01-30 12:32:46 +00:00
const { user, lang } = req;
2020-11-07 15:37:52 +00:00
user.setRegUser(newuser);
2021-01-30 12:32:46 +00:00
const me = await getMe(user, lang);
2020-01-02 16:58:06 +00:00
await req.logIn(user, (err) => {
if (err) {
res.status(500);
res.json({
2021-01-30 12:32:46 +00:00
errors: [t`Failed to establish session after register :(`],
2020-01-02 16:58:06 +00:00
});
return;
}
const host = getHostFromRequest(req);
2021-01-30 12:32:46 +00:00
mailProvider.sendVerifyMail(email, name, host, lang);
2020-01-02 16:58:06 +00:00
res.status(200);
res.json({
success: true,
me,
});
});
};