mirror of
https://github.com/HeyPuter/puter
synced 2024-11-14 14:03:42 +00:00
Removed else statement for closing registration in signup.js
This commit is contained in:
parent
222d7dede3
commit
155aab57d3
@ -65,281 +65,277 @@ module.exports = eggspress(['/signup'], {
|
||||
body: req.body,
|
||||
});
|
||||
|
||||
if(config.registration_closed==true)
|
||||
{
|
||||
if( config.registration_closed == true ) {
|
||||
return res.status(403).send('Registration is closed.');
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
// check bot trap, if `p102xyzname` is anything but an empty string it means
|
||||
// that a bot has filled the form
|
||||
// doesn't apply to temp users
|
||||
if(!req.body.is_temp && req.body.p102xyzname !== '')
|
||||
return res.send();
|
||||
|
||||
// check if user is already logged in
|
||||
if ( req.body.is_temp && req.cookies[config.cookie_name] ) {
|
||||
const { user, token } = await svc_auth.check_session(
|
||||
req.cookies[config.cookie_name]
|
||||
);
|
||||
res.cookie(config.cookie_name, token, {
|
||||
sameSite: 'none',
|
||||
secure: true,
|
||||
httpOnly: true,
|
||||
});
|
||||
// const decoded = await jwt.verify(token, config.jwt_secret);
|
||||
// const user = await get_user({ uuid: decoded.uuid });
|
||||
if ( user ) {
|
||||
return res.send({
|
||||
token: token,
|
||||
user: {
|
||||
username: user.username,
|
||||
uuid: user.uuid,
|
||||
email: user.email,
|
||||
email_confirmed: user.email_confirmed,
|
||||
requires_email_confirmation: user.requires_email_confirmation,
|
||||
is_temp: (user.password === null && user.email === null),
|
||||
taskbar_items: await get_taskbar_items(user),
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// temporary user
|
||||
if(req.body.is_temp && !config.disable_temp_users){
|
||||
req.body.username = await generate_random_username();
|
||||
req.body.email = req.body.username + '@gmail.com';
|
||||
req.body.password = 'sadasdfasdfsadfsa';
|
||||
}else if(config.disable_temp_users){
|
||||
return res.status(400).send('Temp users are disabled.');
|
||||
}
|
||||
|
||||
// send_confirmation_code
|
||||
req.body.send_confirmation_code = req.body.send_confirmation_code ?? true;
|
||||
|
||||
// username is required
|
||||
if(!req.body.username)
|
||||
return res.status(400).send('Username is required')
|
||||
// username must be a string
|
||||
else if (typeof req.body.username !== 'string')
|
||||
return res.status(400).send('username must be a string.')
|
||||
// check if username is valid
|
||||
else if(!req.body.username.match(config.username_regex))
|
||||
return res.status(400).send('Username can only contain letters, numbers and underscore (_).')
|
||||
// check if username is of proper length
|
||||
else if(req.body.username.length > config.username_max_length)
|
||||
return res.status(400).send(`Username cannot be longer than ${config.username_max_length} characters.`)
|
||||
// check if username matches any reserved words
|
||||
else if(config.reserved_words.includes(req.body.username))
|
||||
return res.status(400).send({message: 'This username is not available.'});
|
||||
// TODO: DRY: change_email.js
|
||||
else if(!req.body.is_temp && !req.body.email)
|
||||
return res.status(400).send('Email is required');
|
||||
// email, if present, must be a string
|
||||
else if (req.body.email && typeof req.body.email !== 'string')
|
||||
return res.status(400).send('email must be a string.')
|
||||
// if email is present, validate it
|
||||
else if(!req.body.is_temp && !validator.isEmail(req.body.email))
|
||||
return res.status(400).send('Please enter a valid email address.')
|
||||
else if(!req.body.is_temp && !req.body.password)
|
||||
return res.status(400).send('Password is required');
|
||||
// password, if present, must be a string
|
||||
else if (req.body.password && typeof req.body.password !== 'string')
|
||||
return res.status(400).send('password must be a string.')
|
||||
else if(!req.body.is_temp && req.body.password.length < config.min_pass_length)
|
||||
return res.status(400).send(`Password must be at least ${config.min_pass_length} characters long.`);
|
||||
|
||||
// duplicate username check
|
||||
if(await username_exists(req.body.username))
|
||||
return res.status(400).send('This username already exists in our database. Please use another one.');
|
||||
// duplicate email check (pseudo-users don't count)
|
||||
let rows2 = await db.read(`SELECT EXISTS(SELECT 1 FROM user WHERE email=? AND password IS NOT NULL) AS email_exists`, [req.body.email]);
|
||||
if(rows2[0].email_exists)
|
||||
return res.status(400).send('This email already exists in our database. Please use another one.');
|
||||
// get pseudo user, if exists
|
||||
let pseudo_user = await db.read(`SELECT * FROM user WHERE email = ? AND password IS NULL`, [req.body.email]);
|
||||
pseudo_user = pseudo_user[0];
|
||||
// get uuid user, if exists
|
||||
if(req.body.uuid){
|
||||
uuid_user = await db.read(`SELECT * FROM user WHERE uuid = ? LIMIT 1`, [req.body.uuid]);
|
||||
uuid_user = uuid_user[0];
|
||||
}
|
||||
|
||||
// email confirmation is required by default unless:
|
||||
// Pseudo user converting and matching uuid is provided
|
||||
let email_confirmation_required = 1;
|
||||
if(pseudo_user && uuid_user && pseudo_user.id === uuid_user.id)
|
||||
email_confirmation_required = 0;
|
||||
|
||||
// -----------------------------------
|
||||
// Get referral user
|
||||
// -----------------------------------
|
||||
let referred_by_user = undefined;
|
||||
if ( req.body.referral_code ) {
|
||||
referred_by_user = await get_user({ referral_code: req.body.referral_code });
|
||||
if ( ! referred_by_user ) {
|
||||
return res.status(400).send('Referral code not found');
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------
|
||||
// New User
|
||||
// -----------------------------------
|
||||
const user_uuid = uuidv4();
|
||||
const email_confirm_token = uuidv4();
|
||||
let insert_res;
|
||||
let email_confirm_code = Math.floor(100000 + Math.random() * 900000);
|
||||
|
||||
if(pseudo_user === undefined){
|
||||
insert_res = await db.write(
|
||||
`INSERT INTO user
|
||||
(username, email, password, uuid, referrer, email_confirm_code, email_confirm_token, free_storage, referred_by) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||
[
|
||||
// username
|
||||
req.body.username,
|
||||
// email
|
||||
req.body.is_temp ? null : req.body.email,
|
||||
// password
|
||||
req.body.is_temp ? null : await bcrypt.hash(req.body.password, 8),
|
||||
// uuid
|
||||
user_uuid,
|
||||
// referrer
|
||||
req.body.referrer ?? null,
|
||||
// email_confirm_code
|
||||
email_confirm_code,
|
||||
// email_confirm_token
|
||||
email_confirm_token,
|
||||
// free_storage
|
||||
config.storage_capacity,
|
||||
// referred_by
|
||||
referred_by_user ? referred_by_user.id : null,
|
||||
]);
|
||||
|
||||
// record activity
|
||||
db.write(
|
||||
'UPDATE `user` SET `last_activity_ts` = now() WHERE id=? LIMIT 1',
|
||||
[insert_res.insertId]
|
||||
);
|
||||
|
||||
// TODO: cache group id
|
||||
const svc_group = req.services.get('group');
|
||||
await svc_group.add_users({
|
||||
uid: req.body.is_temp ?
|
||||
config.default_temp_group : config.default_user_group,
|
||||
users: [req.body.username]
|
||||
});
|
||||
}
|
||||
// -----------------------------------
|
||||
// Pseudo User converting
|
||||
// -----------------------------------
|
||||
else{
|
||||
insert_res = await db.write(
|
||||
`UPDATE user SET
|
||||
username = ?, password = ?, uuid = ?, email_confirm_code = ?, email_confirm_token = ?, email_confirmed = ?, requires_email_confirmation = 1,
|
||||
referred_by = ?
|
||||
WHERE id = ?`,
|
||||
[
|
||||
// username
|
||||
req.body.username,
|
||||
// password
|
||||
await bcrypt.hash(req.body.password, 8),
|
||||
// uuid
|
||||
user_uuid,
|
||||
// email_confirm_code
|
||||
email_confirm_code,
|
||||
// email_confirm_token
|
||||
email_confirm_token,
|
||||
// email_confirmed
|
||||
!email_confirmation_required,
|
||||
// id
|
||||
pseudo_user.id,
|
||||
// referred_by
|
||||
referred_by_user ? referred_by_user.id : null,
|
||||
]
|
||||
);
|
||||
|
||||
// TODO: cache group ids
|
||||
const svc_group = req.services.get('group');
|
||||
await svc_group.remove_users({
|
||||
uid: config.default_temp_group,
|
||||
users: [req.body.username],
|
||||
});
|
||||
await svc_group.add_users({
|
||||
uid: config.default_user_group,
|
||||
users: [req.body.username]
|
||||
});
|
||||
|
||||
// record activity
|
||||
db.write('UPDATE `user` SET `last_activity_ts` = now() WHERE id=? LIMIT 1', [pseudo_user.id]);
|
||||
invalidate_cached_user_by_id(pseudo_user.id);
|
||||
}
|
||||
|
||||
// user id
|
||||
// todo if pseudo user, assign directly no need to do another DB lookup
|
||||
const user_id = (pseudo_user === undefined) ? insert_res.insertId : pseudo_user.id;
|
||||
|
||||
const [user] = await db.pread(
|
||||
'SELECT * FROM `user` WHERE `id` = ? LIMIT 1',
|
||||
[user_id]
|
||||
|
||||
// check bot trap, if `p102xyzname` is anything but an empty string it means
|
||||
// that a bot has filled the form
|
||||
// doesn't apply to temp users
|
||||
if(!req.body.is_temp && req.body.p102xyzname !== '')
|
||||
return res.send();
|
||||
|
||||
// check if user is already logged in
|
||||
if ( req.body.is_temp && req.cookies[config.cookie_name] ) {
|
||||
const { user, token } = await svc_auth.check_session(
|
||||
req.cookies[config.cookie_name]
|
||||
);
|
||||
|
||||
// create token for login
|
||||
const { token } = await svc_auth.create_session_token(user, {
|
||||
req,
|
||||
});
|
||||
// jwt.sign({uuid: user_uuid}, config.jwt_secret);
|
||||
|
||||
//-------------------------------------------------------------
|
||||
// email confirmation
|
||||
//-------------------------------------------------------------
|
||||
if((!req.body.is_temp && email_confirmation_required) || user.requires_email_confirmation){
|
||||
if(req.body.send_confirmation_code || user.requires_email_confirmation)
|
||||
send_email_verification_code(email_confirm_code, user.email);
|
||||
else
|
||||
send_email_verification_token(user.email_confirm_token, user.email, user.uuid);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------
|
||||
// referral code
|
||||
//-------------------------------------------------------------
|
||||
let referral_code;
|
||||
if ( pseudo_user === undefined ) {
|
||||
const svc_referralCode = Context.get('services')
|
||||
.get('referral-code', { optional: true });
|
||||
if ( svc_referralCode ) {
|
||||
referral_code = await svc_referralCode.gen_referral_code(user);
|
||||
}
|
||||
}
|
||||
|
||||
await generate_system_fsentries(user);
|
||||
|
||||
//set cookie
|
||||
res.cookie(config.cookie_name, token, {
|
||||
sameSite: 'none',
|
||||
secure: true,
|
||||
httpOnly: true,
|
||||
});
|
||||
|
||||
// add to mailchimp
|
||||
if(!req.body.is_temp){
|
||||
const svc_event = Context.get('services').get('event');
|
||||
svc_event.emit('user.save_account', { user });
|
||||
// const decoded = await jwt.verify(token, config.jwt_secret);
|
||||
// const user = await get_user({ uuid: decoded.uuid });
|
||||
if ( user ) {
|
||||
return res.send({
|
||||
token: token,
|
||||
user: {
|
||||
username: user.username,
|
||||
uuid: user.uuid,
|
||||
email: user.email,
|
||||
email_confirmed: user.email_confirmed,
|
||||
requires_email_confirmation: user.requires_email_confirmation,
|
||||
is_temp: (user.password === null && user.email === null),
|
||||
taskbar_items: await get_taskbar_items(user),
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// return results
|
||||
return res.send({
|
||||
token: token,
|
||||
user:{
|
||||
username: user.username,
|
||||
uuid: user.uuid,
|
||||
email: user.email,
|
||||
email_confirmed: user.email_confirmed,
|
||||
requires_email_confirmation: user.requires_email_confirmation,
|
||||
is_temp: (user.password === null && user.email === null),
|
||||
taskbar_items: await get_taskbar_items(user),
|
||||
referral_code,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// temporary user
|
||||
if(req.body.is_temp && !config.disable_temp_users){
|
||||
req.body.username = await generate_random_username();
|
||||
req.body.email = req.body.username + '@gmail.com';
|
||||
req.body.password = 'sadasdfasdfsadfsa';
|
||||
}else if(config.disable_temp_users){
|
||||
return res.status(400).send('Temp users are disabled.');
|
||||
}
|
||||
|
||||
// send_confirmation_code
|
||||
req.body.send_confirmation_code = req.body.send_confirmation_code ?? true;
|
||||
|
||||
// username is required
|
||||
if(!req.body.username)
|
||||
return res.status(400).send('Username is required')
|
||||
// username must be a string
|
||||
else if (typeof req.body.username !== 'string')
|
||||
return res.status(400).send('username must be a string.')
|
||||
// check if username is valid
|
||||
else if(!req.body.username.match(config.username_regex))
|
||||
return res.status(400).send('Username can only contain letters, numbers and underscore (_).')
|
||||
// check if username is of proper length
|
||||
else if(req.body.username.length > config.username_max_length)
|
||||
return res.status(400).send(`Username cannot be longer than ${config.username_max_length} characters.`)
|
||||
// check if username matches any reserved words
|
||||
else if(config.reserved_words.includes(req.body.username))
|
||||
return res.status(400).send({message: 'This username is not available.'});
|
||||
// TODO: DRY: change_email.js
|
||||
else if(!req.body.is_temp && !req.body.email)
|
||||
return res.status(400).send('Email is required');
|
||||
// email, if present, must be a string
|
||||
else if (req.body.email && typeof req.body.email !== 'string')
|
||||
return res.status(400).send('email must be a string.')
|
||||
// if email is present, validate it
|
||||
else if(!req.body.is_temp && !validator.isEmail(req.body.email))
|
||||
return res.status(400).send('Please enter a valid email address.')
|
||||
else if(!req.body.is_temp && !req.body.password)
|
||||
return res.status(400).send('Password is required');
|
||||
// password, if present, must be a string
|
||||
else if (req.body.password && typeof req.body.password !== 'string')
|
||||
return res.status(400).send('password must be a string.')
|
||||
else if(!req.body.is_temp && req.body.password.length < config.min_pass_length)
|
||||
return res.status(400).send(`Password must be at least ${config.min_pass_length} characters long.`);
|
||||
|
||||
// duplicate username check
|
||||
if(await username_exists(req.body.username))
|
||||
return res.status(400).send('This username already exists in our database. Please use another one.');
|
||||
// duplicate email check (pseudo-users don't count)
|
||||
let rows2 = await db.read(`SELECT EXISTS(SELECT 1 FROM user WHERE email=? AND password IS NOT NULL) AS email_exists`, [req.body.email]);
|
||||
if(rows2[0].email_exists)
|
||||
return res.status(400).send('This email already exists in our database. Please use another one.');
|
||||
// get pseudo user, if exists
|
||||
let pseudo_user = await db.read(`SELECT * FROM user WHERE email = ? AND password IS NULL`, [req.body.email]);
|
||||
pseudo_user = pseudo_user[0];
|
||||
// get uuid user, if exists
|
||||
if(req.body.uuid){
|
||||
uuid_user = await db.read(`SELECT * FROM user WHERE uuid = ? LIMIT 1`, [req.body.uuid]);
|
||||
uuid_user = uuid_user[0];
|
||||
}
|
||||
|
||||
// email confirmation is required by default unless:
|
||||
// Pseudo user converting and matching uuid is provided
|
||||
let email_confirmation_required = 1;
|
||||
if(pseudo_user && uuid_user && pseudo_user.id === uuid_user.id)
|
||||
email_confirmation_required = 0;
|
||||
|
||||
// -----------------------------------
|
||||
// Get referral user
|
||||
// -----------------------------------
|
||||
let referred_by_user = undefined;
|
||||
if ( req.body.referral_code ) {
|
||||
referred_by_user = await get_user({ referral_code: req.body.referral_code });
|
||||
if ( ! referred_by_user ) {
|
||||
return res.status(400).send('Referral code not found');
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------
|
||||
// New User
|
||||
// -----------------------------------
|
||||
const user_uuid = uuidv4();
|
||||
const email_confirm_token = uuidv4();
|
||||
let insert_res;
|
||||
let email_confirm_code = Math.floor(100000 + Math.random() * 900000);
|
||||
|
||||
if(pseudo_user === undefined){
|
||||
insert_res = await db.write(
|
||||
`INSERT INTO user
|
||||
(username, email, password, uuid, referrer, email_confirm_code, email_confirm_token, free_storage, referred_by) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||
[
|
||||
// username
|
||||
req.body.username,
|
||||
// email
|
||||
req.body.is_temp ? null : req.body.email,
|
||||
// password
|
||||
req.body.is_temp ? null : await bcrypt.hash(req.body.password, 8),
|
||||
// uuid
|
||||
user_uuid,
|
||||
// referrer
|
||||
req.body.referrer ?? null,
|
||||
// email_confirm_code
|
||||
email_confirm_code,
|
||||
// email_confirm_token
|
||||
email_confirm_token,
|
||||
// free_storage
|
||||
config.storage_capacity,
|
||||
// referred_by
|
||||
referred_by_user ? referred_by_user.id : null,
|
||||
]);
|
||||
|
||||
// record activity
|
||||
db.write(
|
||||
'UPDATE `user` SET `last_activity_ts` = now() WHERE id=? LIMIT 1',
|
||||
[insert_res.insertId]
|
||||
);
|
||||
|
||||
// TODO: cache group id
|
||||
const svc_group = req.services.get('group');
|
||||
await svc_group.add_users({
|
||||
uid: req.body.is_temp ?
|
||||
config.default_temp_group : config.default_user_group,
|
||||
users: [req.body.username]
|
||||
});
|
||||
}
|
||||
// -----------------------------------
|
||||
// Pseudo User converting
|
||||
// -----------------------------------
|
||||
else{
|
||||
insert_res = await db.write(
|
||||
`UPDATE user SET
|
||||
username = ?, password = ?, uuid = ?, email_confirm_code = ?, email_confirm_token = ?, email_confirmed = ?, requires_email_confirmation = 1,
|
||||
referred_by = ?
|
||||
WHERE id = ?`,
|
||||
[
|
||||
// username
|
||||
req.body.username,
|
||||
// password
|
||||
await bcrypt.hash(req.body.password, 8),
|
||||
// uuid
|
||||
user_uuid,
|
||||
// email_confirm_code
|
||||
email_confirm_code,
|
||||
// email_confirm_token
|
||||
email_confirm_token,
|
||||
// email_confirmed
|
||||
!email_confirmation_required,
|
||||
// id
|
||||
pseudo_user.id,
|
||||
// referred_by
|
||||
referred_by_user ? referred_by_user.id : null,
|
||||
]
|
||||
);
|
||||
|
||||
// TODO: cache group ids
|
||||
const svc_group = req.services.get('group');
|
||||
await svc_group.remove_users({
|
||||
uid: config.default_temp_group,
|
||||
users: [req.body.username],
|
||||
});
|
||||
await svc_group.add_users({
|
||||
uid: config.default_user_group,
|
||||
users: [req.body.username]
|
||||
});
|
||||
|
||||
// record activity
|
||||
db.write('UPDATE `user` SET `last_activity_ts` = now() WHERE id=? LIMIT 1', [pseudo_user.id]);
|
||||
invalidate_cached_user_by_id(pseudo_user.id);
|
||||
}
|
||||
|
||||
// user id
|
||||
// todo if pseudo user, assign directly no need to do another DB lookup
|
||||
const user_id = (pseudo_user === undefined) ? insert_res.insertId : pseudo_user.id;
|
||||
|
||||
const [user] = await db.pread(
|
||||
'SELECT * FROM `user` WHERE `id` = ? LIMIT 1',
|
||||
[user_id]
|
||||
);
|
||||
|
||||
// create token for login
|
||||
const { token } = await svc_auth.create_session_token(user, {
|
||||
req,
|
||||
});
|
||||
// jwt.sign({uuid: user_uuid}, config.jwt_secret);
|
||||
|
||||
//-------------------------------------------------------------
|
||||
// email confirmation
|
||||
//-------------------------------------------------------------
|
||||
if((!req.body.is_temp && email_confirmation_required) || user.requires_email_confirmation){
|
||||
if(req.body.send_confirmation_code || user.requires_email_confirmation)
|
||||
send_email_verification_code(email_confirm_code, user.email);
|
||||
else
|
||||
send_email_verification_token(user.email_confirm_token, user.email, user.uuid);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------
|
||||
// referral code
|
||||
//-------------------------------------------------------------
|
||||
let referral_code;
|
||||
if ( pseudo_user === undefined ) {
|
||||
const svc_referralCode = Context.get('services')
|
||||
.get('referral-code', { optional: true });
|
||||
if ( svc_referralCode ) {
|
||||
referral_code = await svc_referralCode.gen_referral_code(user);
|
||||
}
|
||||
}
|
||||
|
||||
await generate_system_fsentries(user);
|
||||
|
||||
//set cookie
|
||||
res.cookie(config.cookie_name, token, {
|
||||
sameSite: 'none',
|
||||
secure: true,
|
||||
httpOnly: true,
|
||||
});
|
||||
|
||||
// add to mailchimp
|
||||
if(!req.body.is_temp){
|
||||
const svc_event = Context.get('services').get('event');
|
||||
svc_event.emit('user.save_account', { user });
|
||||
}
|
||||
|
||||
// return results
|
||||
return res.send({
|
||||
token: token,
|
||||
user:{
|
||||
username: user.username,
|
||||
uuid: user.uuid,
|
||||
email: user.email,
|
||||
email_confirmed: user.email_confirmed,
|
||||
requires_email_confirmation: user.requires_email_confirmation,
|
||||
is_temp: (user.password === null && user.email === null),
|
||||
taskbar_items: await get_taskbar_items(user),
|
||||
referral_code,
|
||||
}
|
||||
})
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user