mirror of
https://github.com/PretendoNetwork/website.git
synced 2026-09-25 10:15:40 -05:00
pnid account creation start. still stuff to fix and change tho
This commit is contained in:
@@ -12,5 +12,9 @@
|
||||
},
|
||||
"secrets": {
|
||||
"session": "session secret here"
|
||||
},
|
||||
"recaptcha": {
|
||||
"siteKey": "abcd",
|
||||
"secretKey": "1234"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
};
|
||||
@@ -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
5
package-lock.json
generated
@@ -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",
|
||||
|
||||
@@ -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
109
routes/pnid.js
Normal 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;
|
||||
@@ -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
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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
6
views/login.hbs
Normal 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
7
views/register.hbs
Normal 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>
|
||||
Reference in New Issue
Block a user