0f855c538e
* 🎨 schema change - simply role_id attribute * 🎨 update invite model - remove all methods we don't need - ensure we remove the relation from the model - ensure we do not allow to call withRelated * 🎨 adapt api changes * 🎨 adapt auth module * 🎨 adapt tests * 🎨 better error handling * schema update
72 lines
2.1 KiB
JavaScript
72 lines
2.1 KiB
JavaScript
var ghostBookshelf = require('./base'),
|
|
globalUtils = require('../utils'),
|
|
crypto = require('crypto'),
|
|
_ = require('lodash'),
|
|
Invite,
|
|
Invites;
|
|
|
|
Invite = ghostBookshelf.Model.extend({
|
|
tableName: 'invites',
|
|
|
|
toJSON: function (options) {
|
|
options = options || {};
|
|
|
|
var attrs = ghostBookshelf.Model.prototype.toJSON.call(this, options);
|
|
delete attrs.token;
|
|
return attrs;
|
|
}
|
|
}, {
|
|
orderDefaultOptions: function orderDefaultOptions() {
|
|
return {};
|
|
},
|
|
|
|
processOptions: function processOptions(options) {
|
|
return options;
|
|
},
|
|
|
|
/**
|
|
* @TODO: can't use base class, because:
|
|
* options.withRelated = _.union(options.withRelated, options.include); is missing
|
|
* there are some weird self implementations in each model
|
|
* so adding this line, will destroy other models, because they rely on something else
|
|
* FIX ME!!!!!
|
|
*/
|
|
findOne: function findOne(data, options) {
|
|
options = options || {};
|
|
|
|
options = this.filterOptions(options, 'findOne');
|
|
data = this.filterData(data, 'findOne');
|
|
options.withRelated = _.union(options.withRelated, options.include);
|
|
|
|
var invite = this.forge(data, {include: options.include});
|
|
return invite.fetch(options);
|
|
},
|
|
|
|
add: function add(data, options) {
|
|
var hash = crypto.createHash('sha256'),
|
|
text = '';
|
|
|
|
options = this.filterOptions(options, 'add');
|
|
options.withRelated = _.union(options.withRelated, options.include);
|
|
|
|
data.expires = Date.now() + globalUtils.ONE_WEEK_MS;
|
|
data.status = 'pending';
|
|
|
|
// @TODO: call a util fn?
|
|
hash.update(String(data.expires));
|
|
hash.update(data.email.toLocaleLowerCase());
|
|
text += [data.expires, data.email, hash.digest('base64')].join('|');
|
|
data.token = new Buffer(text).toString('base64');
|
|
return ghostBookshelf.Model.add.call(this, data, options);
|
|
}
|
|
});
|
|
|
|
Invites = ghostBookshelf.Collection.extend({
|
|
model: Invite
|
|
});
|
|
|
|
module.exports = {
|
|
Invite: ghostBookshelf.model('Invite', Invite),
|
|
Invites: ghostBookshelf.collection('Invites', Invites)
|
|
};
|