From c456f938b127c6b7cb374a3dc9ea7cd47589b6a3 Mon Sep 17 00:00:00 2001 From: muerwre Date: Thu, 29 Nov 2018 16:56:01 +0700 Subject: [PATCH] backend: auth checks --- backend/config/db.js | 13 ------------- backend/models/User.js | 12 ++++++++++++ backend/routes/auth.js | 10 ++++++---- backend/routes/auth/check.js | 16 ++++++++++++++++ backend/routes/auth/guest.js | 33 +++++++++++++++++++++++---------- backend/routes/auth/list.js | 4 ++-- 6 files changed, 59 insertions(+), 29 deletions(-) create mode 100644 backend/models/User.js create mode 100644 backend/routes/auth/check.js diff --git a/backend/config/db.js b/backend/config/db.js index 6e23d12..dc2e096 100644 --- a/backend/config/db.js +++ b/backend/config/db.js @@ -13,16 +13,3 @@ const database = mongoose.connection; database.on('error', (err) => { console.error(`Database Connection Error: ${err}`); process.exit(2); }); database.on('connected', () => { console.info('Succesfully connected to MongoDB Database'); }); -const Schema = mongoose.Schema; - -// Schemas -const User = new Schema({ - id: { type: String, required: true }, - role: { type: String, required: true }, - token: { type: String, required: true }, -}); - - -const UserModel = mongoose.model('User', User); - -module.exports.UserModel = UserModel; diff --git a/backend/models/User.js b/backend/models/User.js new file mode 100644 index 0000000..6ac87b6 --- /dev/null +++ b/backend/models/User.js @@ -0,0 +1,12 @@ +const mongoose = require('mongoose'); +const { Schema } = mongoose; + +// Schemas +const UserSchema = new Schema({ + id: { type: String, required: true }, + role: { type: String, required: true }, + token: { type: String, required: true }, +}); + +const User = mongoose.model('User', UserSchema); +module.exports.User = User; diff --git a/backend/routes/auth.js b/backend/routes/auth.js index d76dced..5048037 100644 --- a/backend/routes/auth.js +++ b/backend/routes/auth.js @@ -1,10 +1,12 @@ const express = require('express'); -const createGuest = require('./auth/guest'); -const listUsers = require('./auth/list'); +const guest = require('./auth/guest'); +const list = require('./auth/list'); +const check = require('./auth/check'); const router = express.Router(); -router.get('/', listUsers); -router.get('/guest', createGuest); +router.get('/', check); +router.get('/list', list); +router.get('/guest', guest); module.exports = router; diff --git a/backend/routes/auth/check.js b/backend/routes/auth/check.js new file mode 100644 index 0000000..83936c8 --- /dev/null +++ b/backend/routes/auth/check.js @@ -0,0 +1,16 @@ +const { User } = require('../../models/User'); +const { generateGuest, generateRandomUrl } = require('./guest'); + +module.exports = async (req, res) => { + const { id, token } = req.query; + const user = await User.find({ id, token }); + const random_url = await generateRandomUrl(); + + if (user.length > 0) { + return res.send({ success: true, ...user[0].toObject() }); + } + + const guest = await generateGuest(); + return res.send({ success: false, ...guest, random_url }); +}; + diff --git a/backend/routes/auth/guest.js b/backend/routes/auth/guest.js index 7d3f0cf..eb1f418 100644 --- a/backend/routes/auth/guest.js +++ b/backend/routes/auth/guest.js @@ -1,10 +1,10 @@ const { genRandomSequence } = require('../../utils/gen'); -const { UserModel } = require('../../config/db'); +const { User } = require('../../models/User'); const generateGuestToken = () => { - const id = `guest:${genRandomSequence(32)}`; + const id = `guest:${genRandomSequence(16)}`; - return UserModel.find({ id }).then(user => { + return User.find({ id }).then(user => { if (user.length) return generateGuestToken(); return id; @@ -19,14 +19,27 @@ const generateUser = id => { }; const saveUser = user => { - const model = new UserModel({ ...user }); + const model = new User({ ...user }); return model.save(); }; -module.exports = (req, res) => ( - generateGuestToken() - .then(generateUser) - .then(saveUser) - .then(result => res.send({ success: 'true', type: 'guest', token: result })) -); +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(); + await saveUser(user); + + res.send({ success: 'true', ...user }); +}; + +module.exports.generateGuest = generateGuest; +module.exports.generateRandomUrl = generateRandomUrl; diff --git a/backend/routes/auth/list.js b/backend/routes/auth/list.js index 4f27051..15d984f 100644 --- a/backend/routes/auth/list.js +++ b/backend/routes/auth/list.js @@ -1,6 +1,6 @@ -const { UserModel } = require('../../config/db'); +const { User } = require('../../models/User'); -module.exports = (req, res) => UserModel.find((err, articles) => { +module.exports = (req, res) => User.find((err, articles) => { if (!err) return res.send(articles); res.statusCode = 500;