UNPKG

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
'use strict'; 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;