orchidmap-front/backend/routes/auth/guest.js
2018-11-29 17:00:47 +07:00

51 lines
1.2 KiB
JavaScript

const { genRandomSequence } = require('../../utils/gen');
const { User } = require('../../models/User');
const generateGuestToken = () => {
const id = `guest:${genRandomSequence(16)}`;
return User.find({ id }).then(user => {
if (user.length) return generateGuestToken();
return id;
});
};
const generateUser = id => {
const token = `seq:${genRandomSequence(32)}`;
const role = 'guest';
return { id, token, role };
};
const saveUser = user => {
const model = new User({ ...user });
return model.save()
.then(() => model.toObject())
.catch(() => ({
...user,
success: false,
error: 'Error saving user model',
error_code: 1232,
}));
};
const generateRandomUrl = () => Promise.resolve(genRandomSequence(16));
const generateGuest = async () => {
const user = await generateGuestToken()
.then(generateUser);
const random_url = await generateRandomUrl();
return { ...user, random_url };
};
module.exports = async (req, res) => {
const user = await generateGuest().then(saveUser);
res.send({ success: true, ...user });
};
module.exports.generateGuest = generateGuest;
module.exports.generateRandomUrl = generateRandomUrl;