wowza-securetoken-generator
Version:
Returns a SecureToken v2 URL that can be used to access streams with playback security enabled
104 lines (89 loc) • 3.35 kB
JavaScript
;
var crypto = require('crypto');
/**
* Replaces all occurrences of string within a string.
*
* @param {String} s
* @param {String} r
* @return {String}
*/
String.prototype.replaceAll = function (s, r) {
return this.split(s).join(r);
};
var wowza_token = {
/**
* Generates secure URL for use with Wowza Streaming Server.
*
* @param {Object} params
* @return {Object}
*/
createSecureWowzaURL: function createSecureWowzaURL(params) {
if (!params === Object(params)) {
throw new Error('createSecureWowzaURL: Params must be of type object');
return;
}
var params = {
token_prefix: params.token_prefix || 'wowzatoken',
streaming_server: params.streaming_server || '',
streaming_file: params.streaming_file || '',
streaming_app: params.streaming_app || '',
hash_algorithm: params.hash_algorithm || 'sha512',
client_ip: params.client_ip || '',
shared_secret: params.shared_secret || '',
start_time: params.start_time || '0',
end_time: params.end_time || '0'
}
var string_for_hashing = params.streaming_app
+ '?' + params.client_ip
+ '&' + params.shared_secret
+ '&' + params.token_prefix
+ 'end_time='
+ params.end_time
+ '&'
+ params.token_prefix
+ 'start_time='
+ params.start_time;
var final_hash = crypto.createHash(params.hash_algorithm).update(string_for_hashing).digest("base64");
// From Wowza documentation: "URL-safe Base64 encoding replaces the '+' character with the '-' character and the '/' character with the '_'."
var url_safe_hash = final_hash.replaceAll('+', '-').replaceAll('/', '_');
var final_http_url = 'http://'
+ params.streaming_server
+ '/'
+ params.streaming_app
+ '/'
+ params.streaming_file
+ '?'
+ params.token_prefix
+ 'start_time='
+ params.start_time
+ '&'
+ params.token_prefix
+ 'end_time='
+ params.end_time
+ '&'
+ params.token_prefix
+ 'hash='
+ url_safe_hash;
var final_rtmp_url = 'rtmp://'
+ params.streaming_server
+ '/'
+ params.streaming_app
+ '?'
+ params.token_prefix
+ 'start_time='
+ params.start_time
+ '&'
+ params.token_prefix
+ 'end_time='
+ params.end_time
+ '&'
+ params.token_prefix
+ 'hash='
+ url_safe_hash;
return {
http: final_http_url,
rtmp: final_rtmp_url
};
}
}
module.exports = wowza_token;