Changes to email verification
This commit is contained in:
parent
89277b852f
commit
4796def5d2
5 changed files with 136 additions and 28 deletions
|
|
@ -1,7 +1,8 @@
|
|||
let constants = require('./constants'),
|
||||
database = require('./db'),
|
||||
pythonStruct = require('python-struct'),
|
||||
bcrypt = require('bcryptjs')
|
||||
bcrypt = require('bcryptjs'),
|
||||
randtoken = require('rand-token'),
|
||||
crypto = require('crypto');
|
||||
|
||||
async function generatePID() {
|
||||
|
|
@ -29,6 +30,34 @@ function generateRandID(length = 10) {
|
|||
return id;
|
||||
}
|
||||
|
||||
async function generateEmailToken() {
|
||||
let token = randtoken.generate(32);
|
||||
|
||||
let user = await database.user_collection.findOne({
|
||||
'sensitive.email_confirms.token': token
|
||||
});
|
||||
|
||||
if (user) {
|
||||
return await generateEmailToken();
|
||||
}
|
||||
|
||||
return token;
|
||||
}
|
||||
|
||||
async function generateEmailCode() {
|
||||
let code = generateRandID(6);
|
||||
|
||||
let user = await database.user_collection.findOne({
|
||||
'sensitive.email_confirms.code': code
|
||||
});
|
||||
|
||||
if (user) {
|
||||
return await generateEmailCode();
|
||||
}
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
function generateNintendoHashedPWrd(password, pid) {
|
||||
let buff1 = pythonStruct.pack('<I', pid);
|
||||
let buff2 = Buffer.from(password).toString('ascii');
|
||||
|
|
@ -219,5 +248,7 @@ module.exports = {
|
|||
generateRefreshToken: generateRefreshToken,
|
||||
getUser: getUser,
|
||||
getUserBasic: getUserBasic,
|
||||
mapUser: mapUser
|
||||
mapUser: mapUser,
|
||||
generateEmailToken: generateEmailToken,
|
||||
generateEmailCode: generateEmailCode,
|
||||
}
|
||||
|
|
@ -1,12 +1,13 @@
|
|||
let nodemailer = require('nodemailer');
|
||||
let nodemailer = require('nodemailer'),
|
||||
config = JSON.parse(require('fs').readFileSync('./config.json').toString());
|
||||
|
||||
let transporter = nodemailer.createTransport({
|
||||
service: 'gmail',
|
||||
auth: {
|
||||
user: 'removed',
|
||||
pass: 'removed'
|
||||
}
|
||||
});
|
||||
service: 'gmail',
|
||||
auth: {
|
||||
user: config.email.address,
|
||||
pass: config.email.password
|
||||
}
|
||||
});
|
||||
|
||||
function send(email, subject = 'No email subject provided', message = 'No email body provided') {
|
||||
let options = {
|
||||
|
|
|
|||
52
account.nintendo.net/routes/account/index.js
Normal file
52
account.nintendo.net/routes/account/index.js
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
let routes = require('express').Router(),
|
||||
database = require('../../db');
|
||||
|
||||
/**
|
||||
* [GET]
|
||||
* Replacement for: https://id.nintendo.net/account/email-confirmation
|
||||
* Description: Verifies a user email via token
|
||||
*/
|
||||
routes.get('/email-confirmation', async (request, response) => {
|
||||
let _GET = request.query;
|
||||
|
||||
if (!_GET.token) {
|
||||
return response.send('ERROR: Invalid token');
|
||||
}
|
||||
|
||||
let user = await database.user_collection.findOne({
|
||||
'sensitive.email_confirms.token': _GET.token
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
return response.send('ERROR: Invalid token');
|
||||
}
|
||||
|
||||
user.email.reachable = 'Y';
|
||||
user.email.validated = 'Y';
|
||||
|
||||
await database.user_collection.update({
|
||||
pid: user.pid
|
||||
}, {
|
||||
$set: {
|
||||
email: user.email
|
||||
}
|
||||
});
|
||||
|
||||
user.sensitive.email_confirms.token = null;
|
||||
user.sensitive.email_confirms.code = null;
|
||||
|
||||
await database.user_collection.update({
|
||||
pid: user.pid
|
||||
}, {
|
||||
$set: {
|
||||
sensitive: user.sensitive
|
||||
}
|
||||
});
|
||||
|
||||
response.send(```
|
||||
It has been confirmed that you can receive e-mails from Pretenod.<br>
|
||||
The confirmation process is now complete.
|
||||
```);
|
||||
});
|
||||
|
||||
module.exports = routes;
|
||||
|
|
@ -4,7 +4,6 @@ let routes = require('express').Router(),
|
|||
database = require('../../db'),
|
||||
mailer = require('../../mailer'),
|
||||
RateLimit = require('express-rate-limit'),
|
||||
randtoken = require('rand-token'),
|
||||
json2xml = require('json2xml'),
|
||||
bcrypt = require('bcryptjs'),
|
||||
moment = require('moment'),
|
||||
|
|
@ -87,8 +86,8 @@ routes.post('/', new RateLimit({
|
|||
password = bcrypt.hashSync(helpers.generateNintendoHashedPWrd(user_data.password, pid), 10),
|
||||
create_date = moment().format('YYYY-MM-DDTHH:MM:SS'),
|
||||
mii_hash = new puid(true).generate(),
|
||||
email_code = helpers.generateRandID(6),
|
||||
email_token = randtoken.generate(32);
|
||||
email_code = await helpers.generateEmailCode(),
|
||||
email_token = await helpers.generateEmailToken();
|
||||
|
||||
let document = {
|
||||
accounts: [ // WTF even is this??
|
||||
|
|
@ -162,7 +161,7 @@ routes.post('/', new RateLimit({
|
|||
token: ''
|
||||
},
|
||||
},
|
||||
email_confims: {
|
||||
email_confirms: {
|
||||
token: email_token,
|
||||
code: email_code,
|
||||
},
|
||||
|
|
@ -185,19 +184,19 @@ routes.post('/', new RateLimit({
|
|||
|
||||
await database.user_collection.insert(document);
|
||||
|
||||
/*mailer.send(
|
||||
mailer.send(
|
||||
user_data.email,
|
||||
'[Prentendo Network] Please confirm your e-mail address',
|
||||
`Hello,
|
||||
|
||||
Your Prentendo Network ID activation is almost complete. Please click the link below to confirm your e-mail address and complete the activation process.
|
||||
|
||||
id.prentendo.cc/account/email-confirmation?token=` + email_token + `
|
||||
http://account.prentendo.cc/account/email-confirmation?token=` + email_token + `
|
||||
|
||||
If you are unable to connect to the above URL, please enter the following confirmation code on the device to which your Prentendo Network ID is linked.
|
||||
|
||||
<<Confirmation code: ` + email_code + `>>`
|
||||
)*/
|
||||
<<Confirmation code: ` + email_code + `>>`
|
||||
)
|
||||
|
||||
response.send(json2xml({
|
||||
person: {
|
||||
|
|
|
|||
|
|
@ -102,35 +102,60 @@ routes.put('/email_confirmation/:pid/:code', async (request, response) => {
|
|||
response.set('Server', 'Nintendo 3DS (http)');
|
||||
response.set('X-Nintendo-Date', new Date().getTime());
|
||||
|
||||
let user = await helpers.getUser(request.params.pid);
|
||||
let user = await database.user_collection.findOne({
|
||||
pid: Number(request.params.pid)
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
let error = {
|
||||
errors: {
|
||||
error: {
|
||||
cause: 'no user found',
|
||||
code: '9999',
|
||||
message: 'Bad pid received; pid: ' + request.params.pid
|
||||
code: '0130',
|
||||
message: 'PID has not been registered yet'
|
||||
}
|
||||
}
|
||||
}
|
||||
return response.send(json2xml(error));
|
||||
}
|
||||
|
||||
if(user.sensitive.email_confims.code == request.params.code){
|
||||
database.user_collection.update(user._id, {$set:{'address[0].validated':'Y'}});
|
||||
}else{
|
||||
let error = {
|
||||
if (user.sensitive.email_confirms.code !== request.params.code) {
|
||||
let error = {
|
||||
errors: {
|
||||
error: {
|
||||
cause: 'Bad code',
|
||||
code: '9999',
|
||||
message: 'Bad code received; code: ' + request.params.code
|
||||
code: '0116',
|
||||
message: 'Missing or invalid verification code'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return response.send(json2xml(error));
|
||||
}
|
||||
|
||||
user.email.reachable = 'Y';
|
||||
user.email.validated = 'Y';
|
||||
|
||||
await database.user_collection.update({
|
||||
pid: user.pid
|
||||
}, {
|
||||
$set: {
|
||||
email: user.email
|
||||
}
|
||||
});
|
||||
|
||||
user.sensitive.email_confirms.token = null;
|
||||
user.sensitive.email_confirms.code = null;
|
||||
|
||||
await database.user_collection.update({
|
||||
pid: user.pid
|
||||
}, {
|
||||
$set: {
|
||||
sensitive: user.sensitive
|
||||
}
|
||||
});
|
||||
|
||||
response.send(json2xml({
|
||||
email: null
|
||||
}));
|
||||
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue