loopback/lib/models/application.js

104 lines
2.9 KiB
JavaScript
Raw Normal View History

2013-07-09 22:06:42 +00:00
// Authentication schemes
var AuthenticationScheme = {
scheme: String, // local, facebook, google, twitter, linkedin, github
credential: Object // Scheme-specific credentials
}
// Push notification settings
var PushNotificationSetting = {
platform: {type: String, required: true}, // apns, gcm, mpns
configuration: Object // platform-specific configurations
}
2013-07-08 23:59:11 +00:00
/**
* Data model for Application
*/
var ApplicationSchema = {
// Basic information
2013-07-09 22:06:42 +00:00
id: {type: String, required: true}, // The id
name: {type: String, required: true}, // The name
description: String, // The description
2013-07-08 23:59:11 +00:00
icon: String, // The icon image url
owner: String, // The user id of the developer who registers the application
collaborators: [String], // A list of users ids who have permissions to work on this app
// EMail
email: String, // e-mail address
emailVerified: Boolean, // Is the e-mail verified
2013-07-09 22:06:42 +00:00
// oAuth 2.0 settings
url: String, // The application url
callbackUrls: [String], // oAuth 2.0 code/token callback url
permissions: [String], // A list of permissions required by the application
// Keys
clientKey: String,
javaScriptKey: String,
restApiKey: String,
windowsKey: String,
masterKey: String,
// Push notification
2013-07-09 22:06:42 +00:00
pushSettings: [PushNotificationSetting],
2013-07-08 23:59:11 +00:00
// User Authentication
2013-07-09 22:06:42 +00:00
authenticationEnabled: {type: Boolean, default: true},
anonymousAllowed: {type: Boolean, default: true},
authenticationSchemes: [AuthenticationScheme],
2013-07-09 22:06:42 +00:00
status: {type: String, default: 'sandbox'}, // Status of the application, production/sandbox/disabled
2013-07-09 22:06:42 +00:00
// Timestamps
created: {type: Date, default: Date},
modified: {type: Date, default: Date}
};
2013-07-08 23:59:11 +00:00
/**
* Application management functions
*/
2013-07-09 22:06:42 +00:00
var crypto = require('crypto');
function generateKey(hmacKey, algorithm) {
hmacKey = hmacKey || 'asteroid';
algorithm = algorithm || 'sha256';
var hmac = crypto.createHmac(algorithm, hmacKey);
var buf = crypto.randomBytes(64);
hmac.update(buf);
return hmac.digest('base64');
}
module.exports = function (dataSource) {
dataSource = dataSource || new require('jugglingdb').ModelBuilder();
var Application = dataSource.define('Application', ApplicationSchema);
Application.afterInitialize = function () {
var app = this;
// use data argument to update object
app.created = app.modified = new Date();
app.id = generateKey('id', 'sha1');
app.clientKey = generateKey('client');
app.javaScriptKey = generateKey('javaScript');
app.restApiKey = generateKey('restApi');
app.windowsKey = generateKey('windows');
app.masterKey = generateKey('master');
};
// Register a new application
Application.register = function (name, description, owner) {
return new Application({name: name, description: description, owner: owner});
}
return Application;
}
2013-07-08 23:59:11 +00:00