mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 12:05:57 +01:00
interim commit for password reset
This commit is contained in:
10
public/templates/emails/reset_plaintext.tpl
Normal file
10
public/templates/emails/reset_plaintext.tpl
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
Hello,
|
||||||
|
|
||||||
|
We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.
|
||||||
|
|
||||||
|
To continue with the password reset, please click on the following link:
|
||||||
|
|
||||||
|
{RESET_LINK}
|
||||||
|
|
||||||
|
Thanks!
|
||||||
|
NodeBB
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
<span id="number_of_users"></span><br />
|
<span id="number_of_users"></span><br />
|
||||||
<span id="latest_user"></span>
|
<span id="latest_user"></span>
|
||||||
</div>
|
</div>
|
||||||
<footer class="footer">Copyright (c) 2013 <a target="_blank" href="http://www.nodebb.com">NodeBB</a> by <a target="_blank" href="https://github.com/psychobunny">psychobunny</a>, <a href="https://github.com/julianlam" target="_blank">julianlam</a>, <a href="https://github.com/barisusakli" target="_blank">barisusakli</a> from <a target="_blank" href="http://www.designcreateplay.com">designcreateplay</a></footer>
|
<footer class="footer">Copyright © 2013 <a target="_blank" href="http://www.nodebb.com">NodeBB</a> by <a target="_blank" href="https://github.com/psychobunny">psychobunny</a>, <a href="https://github.com/julianlam" target="_blank">julianlam</a>, <a href="https://github.com/barisusakli" target="_blank">barisusakli</a> from <a target="_blank" href="http://www.designcreateplay.com">designcreateplay</a></footer>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|||||||
@@ -8,21 +8,29 @@
|
|||||||
<div class="alert" id="error" style="display:none">
|
<div class="alert" id="error" style="display:none">
|
||||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||||
<strong>Invalid Email!</strong>
|
<strong>Invalid Email!</strong>
|
||||||
<p>The email you put in (<span id="invalid-email"></span>) is not registered with us. Please try again.</p>
|
<p></p>
|
||||||
</div>
|
</div>
|
||||||
<label>Email Address</label><input type="text" placeholder="Enter Email Address" id="email" /><br />
|
<label for="email">Email Address</label><input type="text" placeholder="Enter Email Address" id="email" /><br />
|
||||||
<button class="btn btn-primary" id="reset" type="submit">Reset Password</button>
|
<button class="btn btn-primary" id="reset" type="submit">Reset Password</button>
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
(function() {
|
(function() {
|
||||||
|
var inputEl = document.getElementById('email'),
|
||||||
|
errorEl = document.getElementById('error'),
|
||||||
|
errorTextEl = errorEl.querySelector('p');
|
||||||
|
|
||||||
document.getElementById('reset').onclick = function() {
|
document.getElementById('reset').onclick = function() {
|
||||||
socket.emit('user.send_reset', { email: document.getElementById('email').value });
|
if (inputEl.value.length > 0 && inputEl.value.indexOf('@') !== -1) {
|
||||||
|
socket.emit('user.send_reset', { email: inputEl.value });
|
||||||
|
} else {
|
||||||
|
jQuery('#success').hide();
|
||||||
|
jQuery(errorEl).show();
|
||||||
|
errorTextEl.innerHTML = 'Please enter a valid email';
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
socket.on('user.send_reset', function(data) {
|
socket.on('user.send_reset', function(data) {
|
||||||
var inputEl = document.getElementById('email'),
|
var submitEl = document.getElementById('reset');
|
||||||
submitEl = document.getElementById('reset'),
|
|
||||||
invalidEl = document.getElementById('invalid-email');
|
|
||||||
|
|
||||||
if (data.status === 'ok') {
|
if (data.status === 'ok') {
|
||||||
jQuery('#error').hide();
|
jQuery('#error').hide();
|
||||||
@@ -31,8 +39,15 @@
|
|||||||
inputEl.value = '';
|
inputEl.value = '';
|
||||||
} else {
|
} else {
|
||||||
jQuery('#success').hide();
|
jQuery('#success').hide();
|
||||||
jQuery('#error').show();
|
jQuery(errorEl).show();
|
||||||
invalidEl.innerHTML = data.email;
|
switch(data.message) {
|
||||||
|
case 'invalid-email':
|
||||||
|
errorTextEl.innerHTML = 'The email you put in (<span>' + data.email + '</span>) is not registered with us. Please try again.';
|
||||||
|
break;
|
||||||
|
case 'send-failed':
|
||||||
|
errorTextEl.innerHTML = 'There was a problem sending the reset code. Please try again later.';
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}());
|
}());
|
||||||
|
|||||||
@@ -6,16 +6,20 @@
|
|||||||
<p></p>
|
<p></p>
|
||||||
</div>
|
</div>
|
||||||
<label>New Password</label><input type="password" placeholder="A new password" id="password" /><br />
|
<label>New Password</label><input type="password" placeholder="A new password" id="password" /><br />
|
||||||
<label>... and again</label><input type="password" placeholder="" id="password_2" /><br />
|
<label>... and again</label><input type="password" placeholder="" id="repeat" /><br />
|
||||||
<input type="hidden" value="{andrew - the code goes here}" />
|
<input type="hidden" value="{reset_code}" />
|
||||||
<button class="btn btn-primary" id="reset" type="submit">Reset Password</button>
|
<button class="btn btn-primary" id="reset" type="submit">Reset Password</button>
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
(function() {
|
(function() {
|
||||||
var resetEl = document.getElementById('reset');
|
var resetEl = document.getElementById('reset'),
|
||||||
|
password = document.getElementById('password'),
|
||||||
|
repeat = document.getElementById('repeat');
|
||||||
|
|
||||||
resetEl.addEventListener('click', function() {
|
resetEl.addEventListener('click', function() {
|
||||||
|
if (password.value === repeat.value) {
|
||||||
|
alert("match");
|
||||||
|
}
|
||||||
}, false);
|
}, false);
|
||||||
// socket.on('user.password.reset', function(data) {
|
// socket.on('user.password.reset', function(data) {
|
||||||
// if (data.success === 'ok') {
|
// if (data.success === 'ok') {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ var fs = require('fs');
|
|||||||
}
|
}
|
||||||
|
|
||||||
Templates.init = function() {
|
Templates.init = function() {
|
||||||
loadTemplates(['header', 'footer', 'register', 'home', 'login', 'reset', 'reset_code', 'emails/reset']);
|
loadTemplates(['header', 'footer', 'register', 'home', 'login', 'reset', 'reset_code', 'emails/reset', 'emails/reset_plaintext']);
|
||||||
}
|
}
|
||||||
|
|
||||||
var parse = function(data) {
|
var parse = function(data) {
|
||||||
|
|||||||
17
src/user.js
17
src/user.js
@@ -114,19 +114,21 @@ var config = require('../config.js'),
|
|||||||
if (uid !== null) {
|
if (uid !== null) {
|
||||||
// Generate a new reset code
|
// Generate a new reset code
|
||||||
var reset_code = utils.generateUUID();
|
var reset_code = utils.generateUUID();
|
||||||
RDB.set('user:reset:' + reset_code, uid);
|
RDB.set('reset:' + reset_code + ':uid', uid);
|
||||||
|
// RDB.set('reset:' + reset_code + ':expiry', expiry);
|
||||||
|
|
||||||
var reset_link = config.url + 'reset/' + reset_code,
|
var reset_link = config.url + 'reset/' + reset_code,
|
||||||
reset_email = global.templates['emails/reset'].parse({'RESET_LINK': reset_link});
|
reset_email = global.templates['emails/reset'].parse({'RESET_LINK': reset_link}),
|
||||||
|
reset_email_plaintext = global.templates['emails/reset_plaintext'].parse({ 'RESET_LINK': reset_link });
|
||||||
|
|
||||||
var message = emailjs.message.create({
|
var message = emailjs.message.create({
|
||||||
text: reset_email,
|
text: reset_email_plaintext,
|
||||||
from: config.mailer.from,
|
from: config.mailer.from,
|
||||||
to: email,
|
to: email,
|
||||||
subject: 'Password Reset Requested',
|
subject: 'Password Reset Requested',
|
||||||
attachment: [
|
attachment: [
|
||||||
{
|
{
|
||||||
data: reset_email,
|
data: reset_email,
|
||||||
alternative: true
|
alternative: true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -139,8 +141,13 @@ var config = require('../config.js'),
|
|||||||
message: "code-sent",
|
message: "code-sent",
|
||||||
email: email
|
email: email
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
global.socket.emit('user.send_reset', {
|
||||||
|
status: "error",
|
||||||
|
message: "send-failed"
|
||||||
|
});
|
||||||
|
throw new Error(err);
|
||||||
}
|
}
|
||||||
else throw new Error(err);
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
global.socket.emit('user.send_reset', {
|
global.socket.emit('user.send_reset', {
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ var express = require('express'),
|
|||||||
|
|
||||||
app.get('/reset/:code', function(req, res) {
|
app.get('/reset/:code', function(req, res) {
|
||||||
refreshTemplates();
|
refreshTemplates();
|
||||||
res.send(templates['header'] + templates['reset_code'] + templates['footer']);
|
res.send(templates['header'] + templates['reset_code'].parse({ reset_code: req.params.code }) + templates['footer']);
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/reset', function(req, res) {
|
app.get('/reset', function(req, res) {
|
||||||
|
|||||||
Reference in New Issue
Block a user