pnid account creation start. still stuff to fix and change tho

This commit is contained in:
mrjvs
2018-10-17 22:33:49 +02:00
parent 4611384208
commit 89caba14ef
10 changed files with 140 additions and 6 deletions

View File

@@ -12,5 +12,9 @@
},
"secrets": {
"session": "session secret here"
},
"recaptcha": {
"siteKey": "abcd",
"secretKey": "1234"
}
}

View File

@@ -6,10 +6,10 @@ small commonly used utilities
*/
// shows 404 template. takes express response object
function sendDefault404(res) {
function send404(res) {
res.status(404).send('404');
}
module.exports = {
sendDefault404
send404
};

View File

@@ -54,6 +54,7 @@ PNIDSchema.pre('save', function(next) {
return next();
}
// TODO make security all weird with double hash.
// hashing
bcrypt.hash(this.get('password'), 10, (err, hash) => {
if (err) {

5
package-lock.json generated
View File

@@ -1186,6 +1186,11 @@
"promise": "7.3.1"
}
},
"express-recaptcha": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/express-recaptcha/-/express-recaptcha-4.0.3.tgz",
"integrity": "sha512-DUNGjloA7pDeTT//CP0Dv/gZmYU+Nv/ZL/KPHKsNknI2m1epFTc9BFR/oDdmsP1pklNJEZ4wQtDoeaiFYZK2hw=="
},
"express-session": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz",

View File

@@ -21,6 +21,7 @@
"connect-mongo": "^2.0.1",
"express": "^4.16.2",
"express-handlebars": "^3.0.0",
"express-recaptcha": "^4.0.3",
"express-session": "^1.15.6",
"moment": "^2.22.2",
"mongoose": "^5.3.2",

109
routes/pnid.js Normal file
View File

@@ -0,0 +1,109 @@
/*
admin.js -
file for handling admin api.
*/
// imports
const router = require('express').Router();
const passport = require('passport');
const apiHelper = require('../helpers/api');
const config = require('../config.json');
const Recaptcha = require('express-recaptcha').Recaptcha;
const recaptcha = new Recaptcha(config.recaptcha.siteKey, config.recaptcha.secretKey);
// database models
const PNID = require('../models/pnid');
// renders register page
router.get('/pnid/register', recaptcha.middleware.render, (req, res) => {
res.render('register', { captcha: res.recaptcha });
});
// renders login page
router.get('/pnid/login', (req, res) => {
res.render('login');
});
/*
* /admin/api/v1/login
*
* signs admin user in
*
* post {
* email
* password
* }
* return {
* code: http code
* success: boolean
* username: undefined | string - only if login was successfull
* role: undefined | string - role of user if login was successfull
* errors: Strings[messages] - not yet :(
* }
*/
// TODO make login somehow display errors in correct format.
// middleware does the authentication work. this just returns a success
router.post('/api/v1/login', passport.authenticate('PNIDStrategy'), function (req, res) {
apiHelper.sendReturn(res, {
email: req.user.email,
email_validated: req.user.email_validated,
pnid: req.user.pnid.key
});
});
/*
* /admin/api/v1/register
* - requires admin auth
*
* registers a new admin user
*
* post {
* username - username of new admin account
* password - password of new admin account
* }
* return {
* code: httpcode
* success: boolean - true if register was successull
* username: undefined | string - username if register was successfull
* role: undefined | string - role of user if register was successfull
* errors: Strings[messages]
* }
*/
router.post('/api/v1/register', recaptcha.middleware.verify, (req, res) => {
if (!req.body) {
// no post body
apiHelper.sendApiGenericError(res);
return;
}
/*if (req.recaptcha.error) {
apiHelper.sendApiError(res, 500, ['Captcha error']);
return;
}*/
const { email, password } = req.body;
const newUser = new PNID.PNIDModel({
email,
password
});
// TODO verify password
// saving to database
newUser.save().then((user) => {
apiHelper.sendReturn(res, {
email: user.email,
email_validated: user.email_validated,
pnid: user.pnid.key
});
return;
}).catch((rejection) => {
// TODO format exception so it doesnt have a huge list of errors
console.log(rejection);
apiHelper.sendApiError(res, 500, [rejection]);
return;
});
});
// export the router
module.exports = router;

View File

@@ -9,7 +9,6 @@ file for handling routes regarding progress
const router = require('express').Router();
const apiHelper = require('../helpers/api');
const utilHelper = require('../helpers/util');
const staticText = require('../static-text.json');
const progressListModel = require('../models/progress-list').progressListModel;
// display progress
@@ -24,8 +23,7 @@ router.get('/progress', (req, res) => {
res.render('progress', {
games,
backends,
summary: staticText.progressSummary
backends
});
});
});

View File

@@ -29,6 +29,7 @@ connection.on('error', console.error.bind(console, 'connection error:'));
// setup express
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(session({
secret: config.secrets.session,
@@ -62,7 +63,8 @@ const locations = {
posts: require('./routes/blog'),
admin: require('./routes/admin'),
contact: require('./routes/contact'),
progress: require('./routes/progress')
progress: require('./routes/progress'),
pnid: require('./routes/pnid')
};
// static files
@@ -73,6 +75,7 @@ app.use('/', locations.contact);
app.use('/', locations.posts);
app.use('/', locations.admin);
app.use('/', locations.progress);
app.use('/', locations.pnid);
app.use((req, res) => {
utilHelper.send404(res);
});

6
views/login.hbs Normal file
View File

@@ -0,0 +1,6 @@
<h1>login page</h1>
<form action="/api/v1/login" method="POST">
<input type="text" name="email">
<input type="text" name="password">
<button>submit login</button>
</form>

7
views/register.hbs Normal file
View File

@@ -0,0 +1,7 @@
<h1>register page</h1>
<form action="/api/v1/register" method="POST">
<input type="text" name="email">
<input type="text" name="password">
{{{ captcha }}}
<button>submit register</button>
</form>