dmcloud 1.1 → 1.2

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NmU0YWI4Mjk2YzQ1ZjIwN2NjMzU3YzkyODE3ZDJjMWNjYmUzYWZjMQ==
4
+ MGJiOWVmMGRkMDMwMDIxYWQ5ZjA5NDQwN2E4NTM5YTFjOGRiM2IyYw==
5
5
  data.tar.gz: !binary |-
6
- MTkwMzMzZGI5YWI3YTY0MmE5ODk4NDRlY2EyNTk5Njc4ZDFmYjA4OA==
6
+ NTQzMzhmYjlmZmM4MTJlNzAxZDliODVmMmEzNzYyZDljY2ZhMDdjMA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- ZWNmOGIxY2JmYjNkZjA1Y2FhNmJjNDc1OTIyYjFjNzE4YjU0NThjODQxMGZl
10
- NGEzZDZjODIzN2YyMTI3YTZhOGJlYzZlODc5MjdlYjZkZjE0ZGU3NWEyZWZk
11
- NDUzYjViMTNkOWI3Y2YzMWQzZWY1ZGJmM2E1ZDVkYWM5NjQzMzI=
9
+ MGY4ZjU4Y2ZjODVhMDZhODgxYzQzZmIyNTdkYmVjN2UwYzg2MmU0OWNjNGYy
10
+ ZDcxMmE4NzZmODJkYjdjYTc0MWMxYjg4NjI5ZDRlYjA0NzNhNGU4MWQ2ZDBl
11
+ OGUzYWUxNjFkYWI3YWZhZGM2NDJkMzIwMTBjNzNjMjMxNDdiYzY=
12
12
  data.tar.gz: !binary |-
13
- NjI5MjdhZGZmY2RkOGI2MjBmZDE4MWRhNmY0NGIzMzQyMDJlNTZkNWU1OGM5
14
- NzE5ZWQxMmVkNTk4ZjYyZmM0MDYzZTMzZWU0ODUzNWIzYmEwNzhkNjM3ZGYy
15
- MWU3Y2QwOWM5MWVkZjAyMjA0OTkzMWQ3YjljYjk1NDliODcwNjI=
13
+ MWI3ODk4YmNlMWIxZjJmNDRkZDRlZDFmYzc2Mjg1NGVlN2Q3ZThmNzEwMWZj
14
+ NmM0MjZjYzFmN2MwMzE0YTVjNmExMmIyYmYyMWNhZGFiODg4YmQwMzM1YTg1
15
+ ZGI2YWJlOTYyYzcyN2Q0ODQzZGZmZGRhYTZhNDAzODZlYWVjMDc=
data/dmcloud.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "dmcloud"
8
- s.version = "1.1"
8
+ s.version = "1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ritik Malhotra", "Tanooj Luthra"]
@@ -22,9 +22,10 @@ module DmCloud
22
22
  request = Hash.new
23
23
 
24
24
  # the media id
25
- request[:fields] = []
25
+ request[:id] = media_id
26
26
 
27
27
  # requested media meta datas
28
+ request[:fields] = []
28
29
  fields[:meta] = ['title'] unless fields[:meta]
29
30
  fields[:meta].each { |value| request[:fields] << "meta.#{value.to_s}" }
30
31
  request[:fields] += ['id', 'created', 'embed_url', 'frame_ratio']
@@ -57,6 +57,7 @@ module DmCloud
57
57
  :call => call_type,
58
58
  args: DmCloud::Builder::Media.info(media_id, assets_names, fields)
59
59
  }
60
+
60
61
  DmCloud.config[:auto_call] == true ? DmCloud::Request.execute(call_type, params) : {call: call_type, params: params}
61
62
  end
62
63
 
@@ -81,5 +82,22 @@ module DmCloud
81
82
  DmCloud.config[:auto_call] == true ? DmCloud::Request.execute(call_type, params) : {call: call_type, params: params}
82
83
  end
83
84
 
85
+ # Gets a URL pointer to the actual file...
86
+ def self.url(media_id, asset_name)
87
+ raise StandardError, "missing :media_id in params" unless media_id
88
+ raise StandardError, "missing :asset_name in params" unless asset_name
89
+ fields = { :assets => ["download_url"] }
90
+
91
+ self.info(media_id, [asset_name], fields)["result"]["assets"][asset_name]["download_url"]
92
+ end
93
+
94
+ # Gets the real URL that points to the download link on DMCloud's specific server
95
+ def self.download_url(media_id, asset_name)
96
+ download_url = self.url(media_id, asset_name)
97
+ response = Net::HTTP.get_response(URI.parse(download_url))
98
+ download_url = response.header["location"]
99
+
100
+ download_url
101
+ end
84
102
  end
85
103
  end
@@ -3,10 +3,10 @@ require 'json'
3
3
 
4
4
  module DmCloud
5
5
  class Request
6
-
6
+
7
7
  DAILYMOTION_API = 'http://api.DmCloud.net/api'
8
8
  DAILYMOTION_STATIC = 'http://api.DmCloud.net/api'
9
-
9
+
10
10
  # This method control signing for Media calls and handle request and response.
11
11
  def self.execute(call, params = {})
12
12
  url = define(call)
@@ -15,8 +15,8 @@ module DmCloud
15
15
  result = send_request(params)
16
16
  parse_response(result)
17
17
  end
18
-
19
-
18
+
19
+
20
20
  def self.send_request(params)
21
21
  @uri = URI.parse(DAILYMOTION_API)
22
22
 
@@ -24,20 +24,20 @@ module DmCloud
24
24
  request = Net::HTTP::Post.new(@uri.request_uri)
25
25
  request.content_type = 'application/json'
26
26
  request.body = params.to_json
27
-
27
+
28
28
  # puts 'request (YAML format ): ' + request.to_yaml + "\n" + '-' * 80
29
-
29
+
30
30
  http.request(request).body
31
31
  end
32
-
33
32
 
34
-
33
+
34
+
35
35
  def self.parse_response(result)
36
36
  JSON.parse(result)
37
37
  end
38
-
38
+
39
39
  def self.define(action)
40
- DAILYMOTION_API
40
+ DAILYMOTION_API
41
41
  end
42
42
  end
43
- end
43
+ end
@@ -24,7 +24,7 @@ module DmCloud
24
24
 
25
25
  auth_token
26
26
  end
27
-
27
+
28
28
  # To sign a URL, the client needs a secret shared with Dailymotion Cloud.
29
29
  # This secret is call client secret and is available in the back-office interface.
30
30
  # Params:
@@ -34,22 +34,22 @@ module DmCloud
34
34
  # nonce: A 8 characters-long random alphanumeric lowercase string to make the signature unique.
35
35
  # secret: The client secret.
36
36
  # sec-data: If sec-level doesn’t have the DELEGATED bit activated,
37
- # this component contains concatenated informations
37
+ # this component contains concatenated informations
38
38
  # for all activated sec levels.
39
39
  # pub-sec-data: Some sec level data have to be passed in clear in the signature.
40
40
  # To generate this component the parameters are serialized using x-www-form-urlencoded, compressed with gzip and encoded in base64.
41
41
  # Result :
42
- # return a string which contain the signed url like
42
+ # return a string which contain the signed url like
43
43
  # <expires>-<sec>-<nonce>-<md5sum>[-<pub-sec-data>]
44
44
  def self.sign(stream, security_datas = nil)
45
45
  raise StandardError, "missing :stream in params" unless stream
46
46
  sec_level = security(DmCloud.config[:security_level])
47
47
  sec_data = security_data(DmCloud.config[:security_level], security_datas) unless security_datas.nil?
48
48
 
49
- base = {
49
+ base = {
50
50
  :sec_level => sec_level,
51
51
  :url_no_query => stream,
52
- :expires => 1.hours.from_now.to_i,
52
+ :expires => Time.now + 1*60*60, # 1 hour from now
53
53
  :nonce => SecureRandom.hex(16)[0,16],
54
54
  :secret => DmCloud.config[:secret_key]
55
55
  }
@@ -60,13 +60,13 @@ module DmCloud
60
60
 
61
61
  signed_url = [base[:expires], base[:sec_level], base[:nonce], check_sum].compact
62
62
  signed_url.merge!(:pub_sec_data => sec_data) unless sec_data.nil?
63
-
63
+
64
64
  # puts signed_url
65
-
65
+
66
66
  signed_url = signed_url.join('-')
67
67
  signed_url
68
68
  end
69
-
69
+
70
70
  # Prepare datas for signing
71
71
  # Params :
72
72
  # base : contains media id and others for url signing
@@ -89,29 +89,29 @@ module DmCloud
89
89
  # This security level may wrongly block some users
90
90
  # which have their internet access load-balanced between several proxies.
91
91
  # This is the case in some office network or some ISPs.
92
- # User-Agent: Used in addition to one of the two former levels,
92
+ # User-Agent: Used in addition to one of the two former levels,
93
93
  # this level a limit on the exact user-agent of the end-user.
94
94
  # This is more secure but in some specific condition may lead to wrongly blocked users.
95
95
  # Use Once: The signed URL will only be usable once.
96
96
  # Note: should not be used with stream URLs.
97
97
  # Country: The URL can only be queried from specified countrie(s).
98
98
  # The rule can be reversed to allow all countries except some.
99
- # Referer: The URL can only be queried
99
+ # Referer: The URL can only be queried
100
100
  # if the Referer HTTP header contains a specified value.
101
101
  # If the URL contains a Referer header with a different value,
102
102
  # the request is refused. If the Referer header is missing,
103
- # the request is accepted in order to prevent from false positives as some browsers,
103
+ # the request is accepted in order to prevent from false positives as some browsers,
104
104
  # anti-virus or enterprise proxies may remove this header.
105
- # Delegate: This option instructs the signing algorithm
105
+ # Delegate: This option instructs the signing algorithm
106
106
  # that security level information won’t be embeded into the signature
107
107
  # but gathered and lock at the first use.
108
108
  # Result :
109
- # Return a string which contain the signed url like
109
+ # Return a string which contain the signed url like
110
110
  # http://cdn.DmCloud.net/route/<user_id>/<media_id>/<asset_name>.<asset_extension>?auth=<auth_token>
111
111
  def self.security(type = nil)
112
112
  type = :none unless type
113
113
  type = type.to_sym if type.class == String
114
-
114
+
115
115
  case type
116
116
  when :none
117
117
  0 # None
@@ -153,7 +153,7 @@ module DmCloud
153
153
 
154
154
  def self.security_pub_sec_data(type, value)
155
155
  type = type.to_sym if type.class == String
156
-
156
+
157
157
  case type
158
158
  when :country
159
159
  "cc=#{value}" # A list of 2 characters long country codes in lowercase by comas. If the list starts with a dash, the rule is inverted (ie: cc=fr,gb,de or cc=-fr,it). This data have to be stored in pub-sec-data component
@@ -163,10 +163,10 @@ module DmCloud
163
163
  nil
164
164
  end
165
165
  end
166
-
167
-
166
+
167
+
168
168
  # This block comes from Cloudkey gem.
169
- # I discovered this gem far after I start this one
169
+ # I discovered this gem far after I start this one
170
170
  # and I will try to add file upload from http or ftp.
171
171
  # (Missing in their gem)
172
172
  def self.normalize params
@@ -179,11 +179,11 @@ module DmCloud
179
179
  params.to_s
180
180
  end
181
181
  end
182
-
182
+
183
183
  # def self.normalize(params)
184
184
  # str = params.to_json.to_s
185
185
  # str.gsub!(/[^A-Za-z0-9]/, '')
186
186
  # str
187
187
  # end
188
188
  end
189
- end
189
+ end
@@ -67,14 +67,5 @@ module DmCloud
67
67
  stream += '?auth=[AUTH_TOKEN]'.gsub!('[AUTH_TOKEN]', DmCloud::Signing.sign(stream, security))
68
68
  stream
69
69
  end
70
-
71
- # Gets the real URL that points to the download link on DMCloud's specific server
72
- def self.download_url(media_id, asset_name, asset_extension = nil, security = {})
73
- download_url = self.url(media_id, asset_name, asset_extension, security)
74
- response = Net::HTTP.get_response(URI.parse(download_url))
75
- download_url = response.header["location"]
76
-
77
- download_url
78
- end
79
70
  end
80
71
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dmcloud
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.1'
4
+ version: '1.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ritik Malhotra