skyriver
Version:
SkyRiver Streaming Cloud server-side library for NodeJS
111 lines (84 loc) • 3.9 kB
JavaScript
var conf = require('./config');
var util = require('./util');
exports.PutPolicy = PutPolicy;
exports.PutPolicy2 = PutPolicy2;
exports.GetPolicy = GetPolicy;
// ----- token --------
// @gist PutPolicy
function PutPolicy(scope, callbackUrl, callbackBody, returnUrl, returnBody,
asyncOps, endUser, expires, persistentOps, persistentNotifyUrl) {
this.scope = scope || null;
this.callbackUrl = callbackUrl || null;
this.callbackBody = callbackBody || null;
this.returnUrl = returnUrl || null;
this.returnBody = returnBody || null;
this.endUser = endUser || null;
this.expires = expires || 3600;
this.persistentOps = persistentOps || null;
this.persistentNotifyUrl = persistentNotifyUrl || null;
}
// @endgist
PutPolicy.prototype.token = function() {
var flags = this.getFlags();
var encodedFlags = util.urlsafeBase64Encode(JSON.stringify(flags));
var encoded = util.hmacSha1(encodedFlags, conf.APP_SECRET);
var encodedSign = util.base64ToUrlSafe(encoded);
var uploadToken = conf.APP_KEY + ':' + encodedSign + ':' + encodedFlags;
return uploadToken;
}
PutPolicy.prototype.getFlags = function() {
var flags = {};
var attrs = ['scope', 'insertOnly', 'saveKey', 'endUser', 'returnUrl', 'returnBody', 'callbackUrl', 'callbackHost', 'callbackBody', 'callbackBodyType', 'callbackFetchKey', 'persistentOps', 'persistentNotifyUrl', 'persistentPipeline', 'fsizeLimit', 'detectMime', 'mimeLimit'];
for (var i = attrs.length - 1; i >= 0; i--) {
if (this[attrs[i]] !== null) {
flags[attrs[i]] = this[attrs[i]];
}
}
flags['deadline'] = this.expires + Math.floor(Date.now() / 1000);
return flags;
}
function PutPolicy2(putPolicyObj) {
if (typeof putPolicyObj !== 'object') {
return false;
}
this.scope = putPolicyObj.scope || null;
this.expires = putPolicyObj.expires || 3600;
this.insertOnly = putPolicyObj.insertOnly || null;
this.saveKey = putPolicyObj.saveKey || null;
this.endUser = putPolicyObj.endUser || null;
this.returnUrl = putPolicyObj.returnUrl || null;
this.returnBody = putPolicyObj.returnBody || null;
this.callbackUrl = putPolicyObj.callbackUrl || null;
this.callbackHost = putPolicyObj.callbackHost || null;
this.callbackBody = putPolicyObj.callbackBody || null;
this.callbackBodyType = putPolicyObj.callbackBodyType || null;
this.persistentOps = putPolicyObj.persistentOps || null;
this.persistentNotifyUrl = putPolicyObj.persistentNotifyUrl || null;
this.persistentPipeline = putPolicyObj.persistentPipeline || null;
this.fsizeLimit = putPolicyObj.fsizeLimit || null;
this.fsizeMin = putPolicyObj.fsizeMin || null;
this.detectMime = putPolicyObj.detectMime || null;
this.mimeLimit = putPolicyObj.mimeLimit || null;
}
PutPolicy2.prototype.token = function() {
var flags = this.getFlags();
var encodedFlags = util.urlsafeBase64Encode(JSON.stringify(flags));
var encoded = util.hmacSha1(encodedFlags, conf.APP_SECRET);
var encodedSign = util.base64ToUrlSafe(encoded);
var uploadToken = conf.APP_KEY + ':' + encodedSign + ':' + encodedFlags;
return uploadToken;
}
PutPolicy2.prototype.getFlags = function() {
var flags = {};
var attrs = ['scope', 'insertOnly', 'saveKey', 'endUser', 'returnUrl', 'returnBody', 'callbackUrl', 'callbackHost', 'callbackBody', 'callbackBodyType', 'callbackFetchKey', 'persistentOps', 'persistentNotifyUrl', 'persistentPipeline', 'fsizeLimit', 'fsizeMin', 'detectMime', 'mimeLimit'];
for (var i = attrs.length - 1; i >= 0; i--) {
if (this[attrs[i]] !== null) {
flags[attrs[i]] = this[attrs[i]];
}
}
flags['deadline'] = this.expires + Math.floor(Date.now() / 1000);
return flags;
}
function GetPolicy(expires) {
this.expires = expires || 3600;
}