import bcrypt = require('bcrypt'); import crypto = require('crypto'); import { checkPassword } from './checkPassword'; import { User } from '../models/user'; import { v4 as uuid } from 'uuid'; /** * API endpoint for account creation. * @param req * @param res * @returns */ export function authCreate(req, res) { const { displayname, email, password } = req.body; if (req.user) return res.status(200).json({ error: 11 }); if (!displayname || !email || !password) return res.status(200).json({ error: 2 }); if (!checkPassword(password)) return res.status(200).json({ error: 7 }); User.findOne({ email }, (err, user) => { if (err) { console.log(err); return res.status(200).json({ error: 1 }); } if (user) return res.status(200).json({ error: 11 }); bcrypt.hash(password, 10, (err, password) => { if (err) { console.log(err); return res.status(200).json({ error: 1 }); } const newUserData = { displayname, email, password, username: crypto.randomBytes(8).toString('hex'), uuid: uuid(), apiKey: uuid(), apiToken: crypto.randomBytes(32).toString('hex'), following: [], followedBy: [] }; const newUser = new User(newUserData); newUser.save(err => { if (err) { console.log(err); res.status(200).json({ error: 1 }); } req.login(newUserData).then(() => { res.json({ error: 0 }); }).catch(err => { if (err) { console.log(err); res.status(200).json({ error: 1 }); } }); }); }); }); }