wowza-secure_token 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +14 -0
- data/README.md +3 -0
- data/lib/wowza.rb +6 -0
- data/lib/wowza/secure_token.rb +70 -0
- data/lib/wowza/secure_token/version.rb +7 -0
- metadata +106 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 804f53ee8a6cd95adeefe35257bd1d6a1373e517
|
4
|
+
data.tar.gz: 73c27aa164cc42269750442ecc77d579603ba717
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a2c182e127be7708a249313a8f4a0461a66231ec89ed3c149efbc0407447315fd18b1e109fbf00c0cd675fed2ca373c97984aefcee105234ee7a0b3471796ed2
|
7
|
+
data.tar.gz: 50839716fffb893020c0912791002e38f4be14953f99eef56a167c309477e77f173ebcb4d14df43a259cd0c5ad2f58a2acc5988e60d344ff5971820f1f743d54
|
data/LICENSE
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Copyright 2018 Trustees of Columbia University
|
2
|
+
Additional copyright may be held by others, as reflected in CONTRIBUTORS or the commit history.
|
3
|
+
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
you may not use this file except in compliance with the License.
|
6
|
+
You may obtain a copy of the License at
|
7
|
+
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
See the License for the specific language governing permissions and
|
14
|
+
limitations under the License.
|
data/README.md
ADDED
data/lib/wowza.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'digest'
|
4
|
+
require 'base64'
|
5
|
+
|
6
|
+
module Wowza
|
7
|
+
# docs TBD
|
8
|
+
module SecureToken
|
9
|
+
require 'wowza/secure_token/version'
|
10
|
+
# Wraps a params hash in the sorting and hashing logic necessary
|
11
|
+
# to generate a Wowza secure token
|
12
|
+
class Params
|
13
|
+
# Create the wrapper
|
14
|
+
# required symbol keys for:
|
15
|
+
# - stream
|
16
|
+
# - secret
|
17
|
+
# - client_ip
|
18
|
+
# - prefix
|
19
|
+
# - starttime (Integer)
|
20
|
+
# - endtime (Integer)
|
21
|
+
# - playstart (Integer)
|
22
|
+
# - playduration (Integer)
|
23
|
+
# @param opts [Hash] options used to generate a token url
|
24
|
+
def initialize(opts)
|
25
|
+
@prefix = opts.delete(:prefix)
|
26
|
+
@stream = opts.delete(:stream)
|
27
|
+
@client_ip = opts.delete(:client_ip)
|
28
|
+
@secret = opts.delete(:secret)
|
29
|
+
@params = opts
|
30
|
+
end
|
31
|
+
|
32
|
+
# @return the sorted token string for the wrapped params
|
33
|
+
def to_token
|
34
|
+
query_string = params_to_sorted_query_string(prefix_params(@params).merge(@client_ip => nil, @secret => nil))
|
35
|
+
"#{@stream}?#{query_string}"
|
36
|
+
end
|
37
|
+
|
38
|
+
# @param digest_alg the digest algorithm to be used to hash the params
|
39
|
+
# @return a URL-safe B64 encoded hash
|
40
|
+
def to_token_hash(digest_alg = Digest::SHA256)
|
41
|
+
Base64.urlsafe_encode64(digest_alg.digest(to_token))
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_url_with_token_hash(host, port, stream_type)
|
45
|
+
query_string = params_to_sorted_query_string(prefix_params(@params))
|
46
|
+
case stream_type
|
47
|
+
when 'hls', 'hls-ssl'
|
48
|
+
(stream_type == 'hls' ? 'http' : 'https') + "://#{host}:#{port}/#{@stream}/playlist.m3u8?#{query_string}&#{@prefix}hash=#{self.to_token_hash}"
|
49
|
+
when 'mpeg-dash', 'mpeg-dash-ssl'
|
50
|
+
(stream_type == 'mpeg-dash' ? 'http' : 'https') + "://#{host}:#{port}/#{@stream}/manifest.mpd?#{query_string}&#{@prefix}hash=#{self.to_token_hash}"
|
51
|
+
when 'rtmp', 'rtmps'
|
52
|
+
"#{stream_type}://#{host}:#{port}/#{@stream}?#{query_string}&#{@prefix}hash=#{self.to_token_hash}"
|
53
|
+
else
|
54
|
+
raise "Unsupported stream_type: #{stream_type}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def params_to_sorted_query_string(prms)
|
61
|
+
prms.sort.map { |p| p[1].to_s == '' ? p[0] : "#{p[0]}=#{p[1]}" }.join('&')
|
62
|
+
end
|
63
|
+
|
64
|
+
def prefix_params(hsh)
|
65
|
+
hsh = hsh.clone
|
66
|
+
hsh.map { |p| ["#{@prefix}#{p[0]}", p[1]] }.to_h
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wowza-secure_token
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ben Armintor
|
8
|
+
- Eric O'Hanlon
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2018-08-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '10.1'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '10.1'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rspec
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '3.1'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '3.1'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rubocop
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 0.58.2
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.58.2
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rubocop-rspec
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 1.20.1
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.20.1
|
70
|
+
description: Generate secure token prefix for wowza requests and allow configurable
|
71
|
+
defaults (e.g., secret).
|
72
|
+
email: armintor@gmail.com
|
73
|
+
executables: []
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- LICENSE
|
78
|
+
- README.md
|
79
|
+
- lib/wowza.rb
|
80
|
+
- lib/wowza/secure_token.rb
|
81
|
+
- lib/wowza/secure_token/version.rb
|
82
|
+
homepage: https://github.com/cul/wowza-secure_token
|
83
|
+
licenses:
|
84
|
+
- APACHE2
|
85
|
+
metadata: {}
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options: []
|
88
|
+
require_paths:
|
89
|
+
- lib
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
requirements: []
|
101
|
+
rubyforge_project:
|
102
|
+
rubygems_version: 2.6.14
|
103
|
+
signing_key:
|
104
|
+
specification_version: 4
|
105
|
+
summary: Generate secure token prefix for wowza requests.
|
106
|
+
test_files: []
|