matterhorn_whymper 0.6.1 → 1.0.0

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
- YThhYTkwNmIxYTc2ZjExOWI3YWE0NDA2OGNhNWE0ZTRjOWEzNjUzZA==
4
+ Zjk0MThiN2Q1MzMyZjExNGMzZWM1ZjIxZGI1ZDY3NTEwMGRmNTk0MQ==
5
5
  data.tar.gz: !binary |-
6
- ZjkwYWE0OGY5YWUwOGJlOWM0NjUwZWY2MmI2YTgyNmRjZTdjYjY0Yw==
6
+ NDVhNjlhNWQwYWZjMGI1MzdlZDUxYjcxMWY0ZWM3OGU1Mzg2ZDkwZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NGM4ZGVmZDQ3NzRhMjAyZDk4ZjMwMDlhM2QxMTc2YTdiODA0ZGE1OTZmYjk1
10
- MDg1NmFiZGI0YjRiYTZhZDMwNmVjNjliZmUzYTZmMjZjZDRiOTQyMzVkMzVh
11
- MGViZWZjNzZiMzE4ZDBjOWZkYThiYjlkYWFjYWRmNjdjMDAzNTc=
9
+ NjM3ZmQ5OTEwODQ1ZDI4Yjg5NGMyYzc0NzM0ZDFlNjk0MmMwYjA3MmI1YzNk
10
+ NzM1NTIxNmU4NjU4MmY4YTBiZGVhMWRmYjdjMzM5YTMwZDI5MWFhZTk1ODMz
11
+ Y2ExNjlmNGUzODhkMzNkYTA5OTBiYWFjOTcwMDE2MTMxYzE2Yzg=
12
12
  data.tar.gz: !binary |-
13
- NGQ0MDYxOTViOTNkNDZmY2Y1ZTljYWYyMzhkZjIzZjAwOGQxM2YzOWQ1ZWE0
14
- Njk1YmNmNTQzNjI3YzUwYzE4OWU0MjM5NGM2ZmRhMTU0NzFiOWFmZTFhZjE1
15
- ODc0NWRkZGQ5YWU4Y2QyOWI2OGFjNDFlZjVhODc2Nzk0YjZlMDc=
13
+ MTcxMzY1NjcyYzMwYzAyMTU5MzRiNWYzYjE4YjZhYjJlMjI0MDgwMDM1NGU0
14
+ MjI1M2E1YmIwZDVmNjA0YmY0NGQxYjdiMTM5ZjllYWNkN2E1NDkxNTJiNTQ4
15
+ YjVjZjhhOGRlNzcyNzA4MzMxZGEzNTI3YTk5NTkxNGRkNTFkZTg=
@@ -72,6 +72,11 @@ class Matterhorn::DublinCore
72
72
  end
73
73
 
74
74
 
75
+ def each_dcterms_element(&block)
76
+ each_element('dcterms', &block)
77
+ end
78
+
79
+
75
80
  def save(file)
76
81
  File.open(file, 'w') do |file|
77
82
  file.write(@document.to_xml)
@@ -166,6 +171,13 @@ class Matterhorn::DublinCore
166
171
  end
167
172
  elem.content
168
173
  end
174
+
169
175
 
176
+ def each_element(ns, &block)
177
+ @document.xpath("/xmlns:dublincore/#{ns}:*").each do |elem|
178
+ yield elem.name, elem.content
179
+ end
180
+ end
170
181
 
182
+
171
183
  end # --------------------------------------------------------------- end Matterhorn::DublinCore ---
@@ -1,3 +1,5 @@
1
+ require 'json'
2
+
1
3
  # ================================================================== Matterhorn::Endpoint::Event ===
2
4
 
3
5
  # This endpoint is not a pure wrapper of the admin endpoint.
@@ -15,27 +17,89 @@ class Matterhorn::Endpoint::Event < Matterhorn::Endpoint
15
17
  # --------------------------------------------------------------------------------------- read ---
16
18
 
17
19
  def read_media_package(media_package_id)
18
- media_package_xml = nil
20
+ media_package = nil
19
21
  begin
20
- split_response http_client.get(
22
+ split_response http_endpoint_client.get(
21
23
  "archive/archive/mediapackage/#{media_package_id}"
22
24
  )
23
- media_package_xml = response_body
25
+ media_package = Matterhorn::MediaPackage.new(response_body)
24
26
  rescue => ex
25
27
  exception_handler('read_media_package', ex, {
26
28
  404 => "The media package of event[#{media_package_id}] could not be found."
27
29
  }
28
30
  )
29
31
  end
30
- media_package_xml
32
+ media_package
33
+ end
34
+
35
+
36
+ def read_dublin_core(media_package_id)
37
+ dublin_core = nil
38
+ begin
39
+ mp = read_media_package(media_package_id)
40
+ if !mp.nil?
41
+ dc_uri = URI.parse(mp.dc_catalog_url)
42
+ split_response http_endpoint_client.get(dc_uri.request_uri)
43
+ dublin_core = Matterhorn::DublinCore.new(response_body)
44
+ end
45
+ rescue => ex
46
+ exception_handler('read_dublin_core', ex, {
47
+ 404 => "The media package of event[#{media_package_id}] could not be found."
48
+ }
49
+ )
50
+ end
51
+ dublin_core
31
52
  end
32
53
 
33
54
 
34
55
  # ------------------------------------------------------------------------------------- update ---
35
56
 
57
+ def changeable_element?(element_name)
58
+ ['title', 'subject', 'description', 'language', 'license',
59
+ 'contributer', 'source'].include?(element_name)
60
+ end
61
+
62
+
63
+ def update_dublin_core(media_package_id, dublin_core)
64
+ updated = false
65
+ begin
66
+ dc_field_arr = []
67
+ dublin_core.each_dcterms_element do |name, content|
68
+ if changeable_element?(name) && !content.blank?
69
+ dc_field_arr << {
70
+ 'id' => name,
71
+ 'value' => content
72
+ }
73
+ end
74
+ end
75
+ split_response http_api_client.put(
76
+ "api/events/#{media_package_id}/metadata?type=dublincore/episode",
77
+ { 'metadata' => dc_field_arr.to_json }
78
+ )
79
+ updated = true
80
+ rescue => ex
81
+ exception_handler('update_dublin_core', ex, {
82
+ 400 => "The request is invaldi or inconsistent.",
83
+ 404 => "The media package of event[#{media_package_id}] could not be found."
84
+ }
85
+ )
86
+ end
87
+ updated
88
+ end
89
+
36
90
 
37
91
  # ------------------------------------------------------------------------------------- delete ---
38
92
 
93
+ def delete(media_package_id)
94
+ begin
95
+ split_response http_endpoint_client.delete(
96
+ "archive/delete/#{media_package_id}"
97
+ )
98
+ rescue => ex
99
+ exception_handler('delete', ex, {})
100
+ end
101
+ end
102
+
39
103
 
40
104
  # ---------------------------------------------------------------------------- private section ---
41
105
  private
@@ -9,7 +9,7 @@ class Matterhorn::Endpoint::Ingest < Matterhorn::Endpoint
9
9
  unless @media_pkg_xml_remote then raise(Matterhorn::Error, "No media package is available!"); end
10
10
  @media_pkg_local.add_attachment(file, flavor) if @media_pkg_local
11
11
  begin
12
- spit_response http_client.post(
12
+ spit_response http_endpoint_client.post(
13
13
  "ingest/addAttachment",
14
14
  { 'flavor' => flavor,
15
15
  'mediaPackage' => @media_pkg_xml_remote,
@@ -32,7 +32,7 @@ class Matterhorn::Endpoint::Ingest < Matterhorn::Endpoint
32
32
  unless @media_pkg_xml_remote then raise(Matterhorn::Error, "No media package is available!"); end
33
33
  @media_pkg_local.add_catalog(file, flavor) if @media_pkg_local
34
34
  begin
35
- split_response http_client.post(
35
+ split_response http_endpoint_client.post(
36
36
  "ingest/addCatalog",
37
37
  { 'flavor' => flavor,
38
38
  'mediaPackage' => @media_pkg_xml_remote,
@@ -55,7 +55,7 @@ class Matterhorn::Endpoint::Ingest < Matterhorn::Endpoint
55
55
  unless @media_pkg_xml_remote then raise(Matterhorn::Error, "No media package is available!"); end
56
56
  @media_pkg_local.add_dc_catalog(dublin_core) if @media_pkg_local
57
57
  begin
58
- split_response http_client.post(
58
+ split_response http_endpoint_client.post(
59
59
  "ingest/addDCCatalog",
60
60
  { 'flavor' => 'dublincore/episode',
61
61
  'mediaPackage' => @media_pkg_xml_remote,
@@ -80,7 +80,7 @@ class Matterhorn::Endpoint::Ingest < Matterhorn::Endpoint
80
80
  @media_pkg_local.add_track(file_or_url, flavor) if @media_pkg_local
81
81
  begin
82
82
  if HTTP_PROTOCOL_RE =~ file_or_url
83
- split_response http_client.post(
83
+ split_response http_endpoint_client.post(
84
84
  "ingest/addTrack",
85
85
  { 'flavor' => flavor,
86
86
  'mediaPackage' => @media_pkg_xml_remote,
@@ -88,7 +88,7 @@ class Matterhorn::Endpoint::Ingest < Matterhorn::Endpoint
88
88
  }
89
89
  )
90
90
  else
91
- split_response http_client.post(
91
+ split_response http_endpoint_client.post(
92
92
  "ingest/addTrack",
93
93
  { 'flavor' => flavor,
94
94
  'mediaPackage' => @media_pkg_xml_remote,
@@ -120,7 +120,7 @@ class Matterhorn::Endpoint::Ingest < Matterhorn::Endpoint
120
120
  nil
121
121
  end
122
122
  begin
123
- split_response http_client.get(
123
+ split_response http_endpoint_client.get(
124
124
  "ingest/createMediaPackage"
125
125
  )
126
126
  @media_pkg_xml_remote = response_body
@@ -137,7 +137,7 @@ class Matterhorn::Endpoint::Ingest < Matterhorn::Endpoint
137
137
  @media_pkg_local.save if @media_pkg_local
138
138
  options['mediaPackage'] = @media_pkg_xml_remote
139
139
  begin
140
- split_response http_client.post(
140
+ split_response http_endpoint_client.post(
141
141
  "ingest/ingest/#{wdID}",
142
142
  options
143
143
  )
@@ -17,7 +17,7 @@ class Matterhorn::Endpoint::Series < Matterhorn::Endpoint
17
17
  def create(dublin_core, acl = nil)
18
18
  dc = nil
19
19
  begin
20
- split_response http_client.post(
20
+ split_response http_endpoint_client.post(
21
21
  "series",
22
22
  { 'series' => dublin_core.to_xml, 'acl' => acl ? acl.to_xml : '' }
23
23
  )
@@ -39,7 +39,7 @@ class Matterhorn::Endpoint::Series < Matterhorn::Endpoint
39
39
  def read(series_id)
40
40
  dc_model = nil
41
41
  begin
42
- split_response http_client.get(
42
+ split_response http_endpoint_client.get(
43
43
  "series/#{series_id}.xml"
44
44
  )
45
45
  dc_model = Matterhorn::DublinCore.new(response_body)
@@ -59,7 +59,7 @@ class Matterhorn::Endpoint::Series < Matterhorn::Endpoint
59
59
  def read_acl(series_id)
60
60
  acl_model = nil
61
61
  begin
62
- split_response http_client.get(
62
+ split_response http_endpoint_client.get(
63
63
  "series/#{series_id}/acl.xml"
64
64
  )
65
65
  acl_model = Matterhorn::Acl.new(response_body)
@@ -76,7 +76,7 @@ class Matterhorn::Endpoint::Series < Matterhorn::Endpoint
76
76
  def find(options)
77
77
  dc_models = []
78
78
  begin
79
- split_response http_client.get(
79
+ split_response http_endpoint_client.get(
80
80
  "series/series.xml#{build_query_str(options)}"
81
81
  )
82
82
  Nokogiri::XML(response_body).
@@ -97,7 +97,7 @@ class Matterhorn::Endpoint::Series < Matterhorn::Endpoint
97
97
  def count
98
98
  count = 0
99
99
  begin
100
- split_response http_client.get(
100
+ split_response http_endpoint_client.get(
101
101
  "series/count"
102
102
  )
103
103
  count = response_body.to_i
@@ -132,7 +132,7 @@ class Matterhorn::Endpoint::Series < Matterhorn::Endpoint
132
132
  def update_acl(series_id, acl)
133
133
  acl_updated = false
134
134
  begin
135
- split_response http_client.post(
135
+ split_response http_endpoint_client.post(
136
136
  "series/#{series_id}/accesscontrol", { 'acl' => acl.to_xml }
137
137
  )
138
138
  acl_updated = true
@@ -154,7 +154,7 @@ class Matterhorn::Endpoint::Series < Matterhorn::Endpoint
154
154
  def delete(series_id)
155
155
  deleted = false
156
156
  begin
157
- split_response http_client.delete(
157
+ split_response http_endpoint_client.delete(
158
158
  "series/#{series_id}"
159
159
  )
160
160
  deleted = true
@@ -8,7 +8,7 @@ class Matterhorn::Endpoint::Workflow < Matterhorn::Endpoint
8
8
  def instance(wi_id)
9
9
  wi = nil
10
10
  begin
11
- split_response http_client.get(
11
+ split_response http_endpoint_client.get(
12
12
  "workflow/instance/#{wi_id}.xml"
13
13
  )
14
14
  wi = response_body
@@ -25,7 +25,7 @@ class Matterhorn::Endpoint::Workflow < Matterhorn::Endpoint
25
25
  def remove(wi_id)
26
26
  wi_removed = false
27
27
  begin
28
- split_response http_client.delete(
28
+ split_response http_endpoint_client.delete(
29
29
  "workflow/remove/#{wi_id}"
30
30
  )
31
31
  wi_removed = true
@@ -42,7 +42,7 @@ class Matterhorn::Endpoint::Workflow < Matterhorn::Endpoint
42
42
  def resume(wi_id)
43
43
  wi = nil
44
44
  begin
45
- split_response http_client.post(
45
+ split_response http_endpoint_client.post(
46
46
  "workflow/resume",
47
47
  { 'id' => wi_id }
48
48
  )
@@ -61,7 +61,7 @@ class Matterhorn::Endpoint::Workflow < Matterhorn::Endpoint
61
61
  def stop(wi_id)
62
62
  wi = nil
63
63
  begin
64
- split_response http_client.post(
64
+ split_response http_endpoint_client.post(
65
65
  "workflow/stop",
66
66
  { 'id' => wi_id }
67
67
  )
@@ -9,14 +9,15 @@ class Matterhorn::Endpoint
9
9
 
10
10
  # ----------------------------------------------------------------------------- initialization ---
11
11
 
12
- def self.create(endpoint)
12
+ def self.create(endpoint, org_domain = '', mh_instance = :default)
13
13
  if endpoint.respond_to? 'to_s'
14
14
  endpoint = endpoint.to_s.capitalize
15
15
  else
16
16
  raise(Matterhorn::Error, "Matterhorn::Endpoint::open | " +
17
17
  "#{endpoint.inspect} does not respond to 'to_s'")
18
18
  end
19
- endpoint = Object.const_get('Matterhorn').const_get('Endpoint').const_get(endpoint).new
19
+ endpoint = Object.const_get('Matterhorn').const_get('Endpoint').
20
+ const_get(endpoint).new(org_domain, mh_instance)
20
21
  if endpoint.nil? || !endpoint.kind_of?(Matterhorn::Endpoint)
21
22
  raise(Matterhorn::Error, "Matterhorn::Endpoint::open | " +
22
23
  "#{endpoint ? endpoint.class.name : 'nil'} is not a sub class " +
@@ -26,8 +27,8 @@ class Matterhorn::Endpoint
26
27
  end
27
28
 
28
29
 
29
- def self.open(endpoint)
30
- endpoint = create(endpoint)
30
+ def self.open(endpoint, org_domain = '', mh_instance = :default)
31
+ endpoint = create(endpoint, mh_instance)
31
32
  begin
32
33
  yield endpoint
33
34
  ensure
@@ -36,12 +37,33 @@ class Matterhorn::Endpoint
36
37
  end
37
38
 
38
39
 
39
- def initialize
40
- @http_client = Matterhorn::HttpClient.new(
41
- MatterhornWhymper.configuration.uri,
42
- MatterhornWhymper.configuration.http_timeout,
43
- MatterhornWhymper.configuration.ssl_dont_verify_cert
40
+ def initialize(org_domain = '', mh_instance = :default)
41
+ @http_endpoint_client = Matterhorn::HttpClient.new(
42
+ MatterhornWhymper.configuration.endpoint(mh_instance)[:protocol],
43
+ MatterhornWhymper.configuration.endpoint(mh_instance)[:domain],
44
+ org_domain,
45
+ MatterhornWhymper.configuration.endpoint(mh_instance)[:user],
46
+ MatterhornWhymper.configuration.endpoint(mh_instance)[:password],
47
+ MatterhornWhymper.configuration.endpoint(mh_instance)[:auth_mode],
48
+ MatterhornWhymper.configuration.endpoint(mh_instance)[:http_timeout],
49
+ MatterhornWhymper.configuration.endpoint(mh_instance)[:ssl_dont_verify_cert],
50
+ MatterhornWhymper.configuration.endpoint(mh_instance)[:multi_tenand]
44
51
  )
52
+ @http_api_client = if !MatterhornWhymper.configuration.api(mh_instance).nil?
53
+ Matterhorn::HttpClient.new(
54
+ MatterhornWhymper.configuration.api(mh_instance)[:protocol],
55
+ MatterhornWhymper.configuration.api(mh_instance)[:domain],
56
+ org_domain,
57
+ MatterhornWhymper.configuration.api(mh_instance)[:user],
58
+ MatterhornWhymper.configuration.api(mh_instance)[:password],
59
+ MatterhornWhymper.configuration.api(mh_instance)[:auth_mode],
60
+ MatterhornWhymper.configuration.api(mh_instance)[:http_timeout],
61
+ MatterhornWhymper.configuration.api(mh_instance)[:ssl_dont_verify_cert],
62
+ MatterhornWhymper.configuration.api(mh_instance)[:multi_tenand]
63
+ )
64
+ else
65
+ nil
66
+ end
45
67
  @response_code = 200
46
68
  @response_body = nil
47
69
  @error_msg = ''
@@ -66,15 +88,21 @@ class Matterhorn::Endpoint
66
88
 
67
89
 
68
90
  def close
69
- http_client.close
91
+ http_endpoint_client.close
92
+ http_api_client.close
70
93
  end
71
94
 
72
95
 
73
96
  # ---------------------------------------------------------------------- *** protected section ***
74
97
  protected
75
98
 
76
- def http_client
77
- @http_client
99
+ def http_endpoint_client
100
+ @http_endpoint_client
101
+ end
102
+
103
+
104
+ def http_api_client
105
+ @http_api_client
78
106
  end
79
107
 
80
108
 
@@ -2,6 +2,7 @@ require 'net/http/post/multipart'
2
2
  require 'net/http/digest_auth'
3
3
  require 'mime/types'
4
4
 
5
+
5
6
  # =================================================================================== Matterhorn ===
6
7
 
7
8
  module Matterhorn
@@ -11,27 +12,26 @@ module Matterhorn
11
12
 
12
13
  class HttpClient
13
14
 
14
- # ------------------------------------------------------------------------------- attributes ---
15
-
16
- attr_reader :base_uri, :host, :port, :ssl, :ssl_dont_verify_cert, :timeout
17
-
18
-
19
15
  # --------------------------------------------------------------------------- initialization ---
20
16
 
21
- def initialize(base_uri, http_timeout = nil, ssl_dont_verify_cert = false)
22
- @base_uri = URI.parse(base_uri)
23
- @host = @base_uri.host
24
- @port = @base_uri.port
25
- @ssl = @port == 443 ? true : false
26
- @timeout = http_timeout
17
+ def initialize(protocol, domain, org_domain, user, password, auth_mode,
18
+ http_timeout = nil, ssl_dont_verify_cert = false, multi_tenand = true)
19
+ @sub_domain = org_domain.split('.').first
20
+ @uri = URI.parse("#{protocol}://#{domain}")
21
+ @uri.user = user
22
+ @uri.password = password
23
+ @auth_mode = auth_mode
24
+ @ssl = @uri.port == 443 ? true : false
25
+ @timeout = http_timeout
27
26
  @ssl_dont_verify_cert = ssl_dont_verify_cert
27
+ @multi_tenand = multi_tenand
28
28
  end
29
29
 
30
30
 
31
31
  # ---------------------------------------------------------------------------- http methodes ---
32
32
 
33
33
  def get(url)
34
- request = Net::HTTP::Get.new(base_uri.request_uri + url)
34
+ request = Net::HTTP::Get.new(assemble_url(url))
35
35
  execute_request(request)
36
36
  end
37
37
 
@@ -45,9 +45,16 @@ module Matterhorn
45
45
  execute_request(request)
46
46
  end
47
47
 
48
+
49
+ def put(url, params = {})
50
+ request = Net::HTTP::Put.new(assemble_url(url))
51
+ request.set_form_data(params)
52
+ execute_request(request)
53
+ end
48
54
 
55
+
49
56
  def delete(url)
50
- request = Net::HTTP::Delete.new(base_uri.request_uri + url)
57
+ request = Net::HTTP::Delete.new(assemble_url(url))
51
58
  execute_request(request)
52
59
  end
53
60
 
@@ -62,19 +69,28 @@ module Matterhorn
62
69
 
63
70
  def http_socket
64
71
  return @http_socket if !@http_socket.nil? && @http_socket.started?
65
- @http_socket = Net::HTTP.new(host, port)
66
- @http_socket.use_ssl = ssl
67
- @http_socket.verify_mode = OpenSSL::SSL::VERIFY_NONE if ssl && ssl_dont_verify_cert
68
- if !timeout.nil?
69
- @http_socket.open_timeout = timeout
70
- @http_socket.read_timeout = timeout
72
+ @http_socket = Net::HTTP.new(@uri.host, @uri.port)
73
+ @http_socket.use_ssl = @ssl
74
+ @http_socket.verify_mode = OpenSSL::SSL::VERIFY_NONE if @ssl && @ssl_dont_verify_cert
75
+ if !@timeout.nil?
76
+ @http_socket.open_timeout = @timeout
77
+ @http_socket.read_timeout = @timeout
71
78
  end
72
79
  @http_socket.start
73
80
  end
74
81
 
82
+
83
+ def assemble_url(url)
84
+ if @multi_tenand && !@sub_domain.blank?
85
+ @uri.request_uri + "#{@sub_domain}/" + url
86
+ else
87
+ @uri.request_uri + url
88
+ end
89
+ end
75
90
 
91
+
76
92
  def singlepart_post(url, params)
77
- request = Net::HTTP::Post.new(base_uri.request_uri + url)
93
+ request = Net::HTTP::Post.new(assemble_url(url))
78
94
  request.set_form_data(params)
79
95
  request
80
96
  end
@@ -102,18 +118,23 @@ module Matterhorn
102
118
  mime_type = MIME::Types.type_for(File.basename(file.path)).first
103
119
  end
104
120
  params['BODY'] = UploadIO.new(file, mime_type, filename)
105
- Net::HTTP::Post::Multipart.new(base_uri.request_uri + url, params)
121
+ Net::HTTP::Post::Multipart.new(assemble_url(url), params)
106
122
  end
107
123
 
108
124
 
109
125
  def execute_request(request)
110
- head = Net::HTTP::Head.new(request.path)
111
- head['X-REQUESTED-AUTH'] = 'Digest'
112
- head['X-Opencast-Matterhorn-Authorization'] = 'true'
113
- digest_result = http_socket.request(head)
114
- digest_auth = Net::HTTP::DigestAuth.new
115
- auth = digest_auth.auth_header(base_uri, digest_result['www-authenticate'], request.method)
116
- request.add_field('Authorization', auth)
126
+ case @auth_mode
127
+ when 'basic'
128
+ request.basic_auth(@uri.user, @uri.password)
129
+ when 'digest'
130
+ head = Net::HTTP::Head.new(@uri.request_uri + request.path)
131
+ head['X-REQUESTED-AUTH'] = 'Digest'
132
+ head['X-Opencast-Matterhorn-Authorization'] = 'true'
133
+ digest_result = http_socket.request(head)
134
+ digest_auth = Net::HTTP::DigestAuth.new
135
+ auth = digest_auth.auth_header(@uri, digest_result['www-authenticate'], request.method)
136
+ request.add_field('Authorization', auth)
137
+ end
117
138
  response = http_socket.request(request)
118
139
  case response.code.to_i
119
140
  when 200..299
@@ -98,6 +98,17 @@ class Matterhorn::MediaPackage
98
98
  end
99
99
 
100
100
 
101
+ def dc_catalog_url
102
+ url_elem = @document.at_xpath('//xmlns:catalog[@type="dublincore/episode"]/xmlns:url',
103
+ {'xmlns' => XML_NS_MEDIAPACKAGE})
104
+ if url_elem
105
+ url_elem.content
106
+ else
107
+ nil
108
+ end
109
+ end
110
+
111
+
101
112
  # <media>
102
113
  # <track type="presenter/source+partial">
103
114
  # <tags/>
@@ -115,6 +126,17 @@ class Matterhorn::MediaPackage
115
126
  end
116
127
 
117
128
 
129
+ def track_url(flavor)
130
+ url_elem = @document.at_xpath("//xmlns:track[contains(@type, \"#{flavor}\")]/xmlns:url",
131
+ {'xmlns' => Matterhorn::MediaPackage::XML_NS_MEDIAPACKAGE})
132
+ if url_elem
133
+ url_elem.content
134
+ else
135
+ nil
136
+ end
137
+ end
138
+
139
+
118
140
  # Returns the id attribute of mediapackage element.
119
141
  # <mediapackage xmlns="http://mediapackage.opencastproject.org" id="1" duration="2704016" start="2014-04-23T12:35:00Z">
120
142
  #
@@ -5,7 +5,7 @@ module MatterhornWhymper
5
5
 
6
6
  # -------------------------------------------------------------------------- const definitions ---
7
7
 
8
- VERSION = "0.6.1"
8
+ VERSION = "1.0.0"
9
9
 
10
10
 
11
11
  end # -------------------------------------------------------------------- end MatterhornWhymper ---
@@ -46,7 +46,6 @@ module MatterhornWhymper
46
46
  require 'logger'
47
47
  self.logger = Logger.new(STDOUT)
48
48
  end
49
- self.configuration.http_timeout = nil
50
49
  yield(configuration) if block_given?
51
50
  end
52
51
 
@@ -56,16 +55,62 @@ module MatterhornWhymper
56
55
 
57
56
  class Configuration
58
57
 
59
- # ------------------------------------------------------------------------------- attributes ---
58
+ # --------------------------------------------------------------------------------- methodes ---
60
59
 
61
- attr_accessor :system_account_user, :system_account_password, :system_domain, :system_protocol,
62
- :http_timeout, :ssl_dont_verify_cert
60
+ def initialize
61
+ @mhw_config = {}
62
+ end
63
63
 
64
+ def add_matterhorn_instance(name = 'default')
65
+ @mhw_config[name.to_sym] = {}
66
+ end
64
67
 
65
- # --------------------------------------------------------------------------------- methodes ---
68
+ def add_endpoint(options, mh_i = 'default')
69
+ @mhw_config[mh_i.to_sym][:endpoint] = validate_options(options)
70
+ end
71
+
72
+ def add_api(options, mh_i = 'default')
73
+ @mhw_config[mh_i.to_sym][:api] = validate_options(options)
74
+ end
75
+
76
+ def set_default_matterhorn_instance(mh_i)
77
+ unless @mhw_config[mh_i.to_sym].nil?
78
+ @mhw_config[:default] = @mhw_config[mh_i.to_sym]
79
+ end
80
+ end
81
+
82
+
83
+ def endpoint(mh_i = :default)
84
+ @mhw_config[mh_i][:endpoint]
85
+ end
86
+
87
+ def api(mh_i = :default)
88
+ @mhw_config[mh_i][:api]
89
+ end
66
90
 
67
- def uri
68
- "#{system_protocol}://#{system_account_user}:#{system_account_password}@#{system_domain}"
91
+
92
+ # -------------------------------------------------------------------------- private section ---
93
+ private
94
+
95
+ def validate_options(opt)
96
+ valid_keys = [:protocol, :domain, :user, :password, :auth_mode,
97
+ :http_timeout, :ssl_dont_verify_cert, :multi_tenand]
98
+ options = {
99
+ :protocol => 'http',
100
+ :domain => 'example.org',
101
+ :user => 'admin',
102
+ :password => '',
103
+ :auth_mode => 'basic',
104
+ :http_timeout => nil,
105
+ :ssl_dont_verify_cert => false,
106
+ :multi_tenand => true
107
+ }
108
+ opt.each do |key, value|
109
+ if valid_keys.include? key.to_sym
110
+ options[key.to_sym] = value
111
+ end
112
+ end
113
+ options
69
114
  end
70
115
 
71
116
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: matterhorn_whymper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Fritschi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-22 00:00:00.000000000 Z
11
+ date: 2015-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multipart-post