UNPKG

skyriver

Version:

SkyRiver Streaming Cloud server-side library for NodeJS

111 lines (84 loc) 3.9 kB
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; }