mirror of
https://github.com/jsbin/jsbin.git
synced 2026-01-18 15:18:04 +00:00
54 lines
1.3 KiB
JavaScript
54 lines
1.3 KiB
JavaScript
var Observable = require('../utils').Observable,
|
|
crypto = require('crypto');
|
|
|
|
module.exports = Observable.extend({
|
|
constructor: function ForgotTokenModel(store) {
|
|
Observable.call(this);
|
|
this.store = store;
|
|
},
|
|
loadUser: function (token, fn) {
|
|
var _this = this;
|
|
|
|
this.store.getUserByForgotToken(token, function (err, user) {
|
|
if (err) {
|
|
return fn(err);
|
|
}
|
|
|
|
// Make sure token hasn't expired.
|
|
if (user && user.expires <= new Date()) {
|
|
_this.expireToken(token, function () {});
|
|
fn(null);
|
|
} else {
|
|
fn(null, user);
|
|
}
|
|
});
|
|
},
|
|
createToken: function (user, fn) {
|
|
var token = this.generateToken();
|
|
this.store.setForgotToken(user, token, function (err) {
|
|
if (err) {
|
|
fn(err);
|
|
} else {
|
|
fn(null, token);
|
|
}
|
|
});
|
|
},
|
|
expireToken: function (token, fn) {
|
|
if (typeof token === 'function') {
|
|
fn = token;
|
|
token = null;
|
|
}
|
|
this.store.expireForgotToken(token, fn);
|
|
},
|
|
expireTokensByUser: function (user, fn) {
|
|
this.store.expireForgotTokenByUser(user, fn);
|
|
},
|
|
expireTokens: function (fn) {
|
|
this.expireToken(fn);
|
|
},
|
|
generateToken: function () {
|
|
var rand = '' + (new Date()).getTime();
|
|
return crypto.createHash('md5').update(rand).digest('hex');
|
|
}
|
|
});
|