gp-ruby-client 0.0.1 → 0.1.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 +4 -4
- data/{lib → src}/cache_control.rb +52 -52
- data/{lib → src}/gp-ruby-client.rb +107 -107
- data/{lib → src}/hmac.rb +50 -50
- data/{lib → src}/rest_client.rb +196 -194
- data/src/service_account.rb +243 -0
- metadata +13 -13
- data/lib/service_account.rb +0 -166
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c17c83bd400ce6e462372c9fb52cb15b99b89c8
|
4
|
+
data.tar.gz: 415d9e1fcc8b3ad7d275868ad3ee1940c8944886
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e46889c07fcdb005cee0c990962f8ec7878ab391202c12d912e9195d7cb2599b1888faf82911efd9f26d86703ba888240418dd6fc3ca2ea554749209b728408
|
7
|
+
data.tar.gz: 53612e14f095e22695490b4772cdeba5370e354c83428ea7971cd883e8751bceaab10d70598a719bbec5e15d9e8ea2b356a2a7f1f267f4c2efc735b68bd5899c
|
@@ -1,52 +1,52 @@
|
|
1
|
-
=begin
|
2
|
-
Copyright IBM Corp. 2015
|
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.
|
15
|
-
=end
|
16
|
-
|
17
|
-
class CacheControl
|
18
|
-
=begin
|
19
|
-
This class is meant to control how often the application updates
|
20
|
-
|
21
|
-
ttl = how many seconds the application waits before updating
|
22
|
-
last_accessed = when you last accessed the application
|
23
|
-
=end
|
24
|
-
@@cache_ttl = 600
|
25
|
-
@@cache_last_accessed = Time.now
|
26
|
-
|
27
|
-
def get_ttl
|
28
|
-
@@cache_ttl
|
29
|
-
end
|
30
|
-
|
31
|
-
def set_ttl(seconds)
|
32
|
-
@@cache_ttl = seconds
|
33
|
-
end
|
34
|
-
|
35
|
-
# Sets cache_ttl to a high number so it never (rarely) updates
|
36
|
-
def turn_off_cache_update
|
37
|
-
@@cache_ttl = 9999999999
|
38
|
-
end
|
39
|
-
|
40
|
-
# Sets cache_ttl to 0 so cache will update every time
|
41
|
-
def always_cache_update
|
42
|
-
@@cache_ttl = 0
|
43
|
-
end
|
44
|
-
|
45
|
-
def get_last_accessed_time
|
46
|
-
@@cache_last_accessed
|
47
|
-
end
|
48
|
-
|
49
|
-
def set_last_accessed_time(time)
|
50
|
-
@@cache_last_accessed = time
|
51
|
-
end
|
52
|
-
end
|
1
|
+
=begin
|
2
|
+
Copyright IBM Corp. 2015
|
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.
|
15
|
+
=end
|
16
|
+
|
17
|
+
class CacheControl
|
18
|
+
=begin
|
19
|
+
This class is meant to control how often the application updates
|
20
|
+
|
21
|
+
ttl = how many seconds the application waits before updating
|
22
|
+
last_accessed = when you last accessed the application
|
23
|
+
=end
|
24
|
+
@@cache_ttl = 600
|
25
|
+
@@cache_last_accessed = Time.now
|
26
|
+
|
27
|
+
def get_ttl
|
28
|
+
@@cache_ttl
|
29
|
+
end
|
30
|
+
|
31
|
+
def set_ttl(seconds)
|
32
|
+
@@cache_ttl = seconds
|
33
|
+
end
|
34
|
+
|
35
|
+
# Sets cache_ttl to a high number so it never (rarely) updates
|
36
|
+
def turn_off_cache_update
|
37
|
+
@@cache_ttl = 9999999999
|
38
|
+
end
|
39
|
+
|
40
|
+
# Sets cache_ttl to 0 so cache will update every time
|
41
|
+
def always_cache_update
|
42
|
+
@@cache_ttl = 0
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_last_accessed_time
|
46
|
+
@@cache_last_accessed
|
47
|
+
end
|
48
|
+
|
49
|
+
def set_last_accessed_time(time)
|
50
|
+
@@cache_last_accessed = time
|
51
|
+
end
|
52
|
+
end
|
@@ -1,108 +1,108 @@
|
|
1
|
-
=begin
|
2
|
-
Copyright IBM Corp. 2015
|
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.
|
15
|
-
=end
|
16
|
-
|
17
|
-
=begin
|
18
|
-
This class is meant to be the main container that holds all the necessary objects
|
19
|
-
|
20
|
-
It contains a service account object that identifies who you are and a REST client object
|
21
|
-
that makes the REST API calls and store the results of those calls. You must provide your bundle identifies
|
22
|
-
in order for the application to run effectively. You can choose the default translation language you would like
|
23
|
-
by setting the locale
|
24
|
-
|
25
|
-
cache_control = Cache Control Object - See cache_control.rb
|
26
|
-
locale = locale of the translated strings. Default is "" which indicates all locales will be loaded
|
27
|
-
use_service = parameter to set if user would like to disable/enable service
|
28
|
-
bundle_id = ID of the bundle that contains the translations
|
29
|
-
service_account = Service Account Object - See service_account.rb
|
30
|
-
rest_client = REST Client object - See rest_client.rb
|
31
|
-
=end
|
32
|
-
|
33
|
-
module GP
|
34
|
-
module Ruby
|
35
|
-
class Client
|
36
|
-
require_relative './service_account.rb'
|
37
|
-
require_relative './rest_client.rb'
|
38
|
-
require_relative './cache_control.rb'
|
39
|
-
|
40
|
-
@@cache_control = CacheControl.new
|
41
|
-
|
42
|
-
@@locale = ""
|
43
|
-
|
44
|
-
@@just_started = true
|
45
|
-
@@use_service = true
|
46
|
-
|
47
|
-
def initialize(bundle_id)
|
48
|
-
@@bundle_id = bundle_id
|
49
|
-
|
50
|
-
if @@use_service && (Time.now - @@cache_control.get_last_accessed_time >= @@cache_control.get_ttl || @@just_started)
|
51
|
-
@@just_started = false
|
52
|
-
@@cache_control.set_last_accessed_time(Time.now)
|
53
|
-
|
54
|
-
backend = {}
|
55
|
-
I18n.backend = I18n::Backend::Chain.new(I18n::Backend::KeyValue.new(backend), I18n.backend)
|
56
|
-
|
57
|
-
@@service_account = ServiceAccount.new
|
58
|
-
if @@service_account.nil?
|
59
|
-
raise "No valid service account"
|
60
|
-
end
|
61
|
-
|
62
|
-
@@rest_client = RESTClient.new(@@service_account, @@bundle_id, @@locale)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def get_bundle_id
|
67
|
-
@@bundle_id
|
68
|
-
end
|
69
|
-
|
70
|
-
def set_bundle_id(bundle_id)
|
71
|
-
@@bundle_id = bundle_id
|
72
|
-
end
|
73
|
-
|
74
|
-
def get_locale
|
75
|
-
@@locale
|
76
|
-
end
|
77
|
-
|
78
|
-
def set_locale(locale)
|
79
|
-
@@locale = locale
|
80
|
-
end
|
81
|
-
|
82
|
-
def get_cache_control
|
83
|
-
@@cache_control
|
84
|
-
end
|
85
|
-
|
86
|
-
def get_service_account
|
87
|
-
@@service_account
|
88
|
-
end
|
89
|
-
|
90
|
-
def get_rest_client
|
91
|
-
@@rest_client
|
92
|
-
end
|
93
|
-
|
94
|
-
def disable_service
|
95
|
-
@@use_service = false
|
96
|
-
end
|
97
|
-
|
98
|
-
def enable_service
|
99
|
-
@@use_service = true
|
100
|
-
end
|
101
|
-
|
102
|
-
def get_default_locale
|
103
|
-
request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
107
|
-
end
|
1
|
+
=begin
|
2
|
+
Copyright IBM Corp. 2015
|
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.
|
15
|
+
=end
|
16
|
+
|
17
|
+
=begin
|
18
|
+
This class is meant to be the main container that holds all the necessary objects
|
19
|
+
|
20
|
+
It contains a service account object that identifies who you are and a REST client object
|
21
|
+
that makes the REST API calls and store the results of those calls. You must provide your bundle identifies
|
22
|
+
in order for the application to run effectively. You can choose the default translation language you would like
|
23
|
+
by setting the locale
|
24
|
+
|
25
|
+
cache_control = Cache Control Object - See cache_control.rb
|
26
|
+
locale = locale of the translated strings. Default is "" which indicates all locales will be loaded
|
27
|
+
use_service = parameter to set if user would like to disable/enable service
|
28
|
+
bundle_id = ID of the bundle that contains the translations
|
29
|
+
service_account = Service Account Object - See service_account.rb
|
30
|
+
rest_client = REST Client object - See rest_client.rb
|
31
|
+
=end
|
32
|
+
|
33
|
+
module GP
|
34
|
+
module Ruby
|
35
|
+
class Client
|
36
|
+
require_relative './service_account.rb'
|
37
|
+
require_relative './rest_client.rb'
|
38
|
+
require_relative './cache_control.rb'
|
39
|
+
|
40
|
+
@@cache_control = CacheControl.new
|
41
|
+
|
42
|
+
@@locale = ""
|
43
|
+
|
44
|
+
@@just_started = true
|
45
|
+
@@use_service = true
|
46
|
+
|
47
|
+
def initialize(bundle_id)
|
48
|
+
@@bundle_id = bundle_id
|
49
|
+
|
50
|
+
if @@use_service && (Time.now - @@cache_control.get_last_accessed_time >= @@cache_control.get_ttl || @@just_started)
|
51
|
+
@@just_started = false
|
52
|
+
@@cache_control.set_last_accessed_time(Time.now)
|
53
|
+
|
54
|
+
backend = {}
|
55
|
+
I18n.backend = I18n::Backend::Chain.new(I18n::Backend::KeyValue.new(backend), I18n.backend)
|
56
|
+
|
57
|
+
@@service_account = ServiceAccount.new
|
58
|
+
if @@service_account.nil?
|
59
|
+
raise "No valid service account"
|
60
|
+
end
|
61
|
+
|
62
|
+
@@rest_client = RESTClient.new(@@service_account, @@bundle_id, @@locale)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def get_bundle_id
|
67
|
+
@@bundle_id
|
68
|
+
end
|
69
|
+
|
70
|
+
def set_bundle_id(bundle_id)
|
71
|
+
@@bundle_id = bundle_id
|
72
|
+
end
|
73
|
+
|
74
|
+
def get_locale
|
75
|
+
@@locale
|
76
|
+
end
|
77
|
+
|
78
|
+
def set_locale(locale)
|
79
|
+
@@locale = locale
|
80
|
+
end
|
81
|
+
|
82
|
+
def get_cache_control
|
83
|
+
@@cache_control
|
84
|
+
end
|
85
|
+
|
86
|
+
def get_service_account
|
87
|
+
@@service_account
|
88
|
+
end
|
89
|
+
|
90
|
+
def get_rest_client
|
91
|
+
@@rest_client
|
92
|
+
end
|
93
|
+
|
94
|
+
def disable_service
|
95
|
+
@@use_service = false
|
96
|
+
end
|
97
|
+
|
98
|
+
def enable_service
|
99
|
+
@@use_service = true
|
100
|
+
end
|
101
|
+
|
102
|
+
def get_default_locale
|
103
|
+
request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
end
|
108
108
|
end
|
data/{lib → src}/hmac.rb
RENAMED
@@ -1,51 +1,51 @@
|
|
1
|
-
=begin
|
2
|
-
Copyright IBM Corp. 2015
|
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.
|
15
|
-
=end
|
16
|
-
|
17
|
-
require 'time'
|
18
|
-
require 'openssl'
|
19
|
-
require 'base64'
|
20
|
-
|
21
|
-
class HMAC
|
22
|
-
=begin
|
23
|
-
This class is meant to provide HMAC authentication when making the REST API calls.
|
24
|
-
=end
|
25
|
-
GAAS_SCHEME_STRING ||= "GaaS-HMAC"
|
26
|
-
SEPARATOR ||= ":"
|
27
|
-
ENCODING ||= "ISO-8859-1"
|
28
|
-
SHA1_STRING ||= "sha1"
|
29
|
-
|
30
|
-
def get_auth_credentials(uid, secret, method, url, rfc1123date, body)
|
31
|
-
signature = get_signature(secret,method,url,rfc1123date,body)
|
32
|
-
if !signature.empty?
|
33
|
-
output = "#{GAAS_SCHEME_STRING} #{uid}#{SEPARATOR}#{signature}"
|
34
|
-
return output
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def get_signature(secret,method,url,rfc1123date,body)
|
39
|
-
secret.encode(ENCODING)
|
40
|
-
|
41
|
-
key = "#{method.encode(ENCODING)}\n#{url.encode(ENCODING)}\n#{rfc1123date.encode(ENCODING)}\n#{body.encode(ENCODING)}"
|
42
|
-
|
43
|
-
digest = OpenSSL::Digest.new(SHA1_STRING)
|
44
|
-
hex_string = OpenSSL::HMAC.digest(digest,secret,key)
|
45
|
-
return Base64.encode64(hex_string)
|
46
|
-
end
|
47
|
-
|
48
|
-
def get_rfc1123_date
|
49
|
-
Time.now.httpdate
|
50
|
-
end
|
1
|
+
=begin
|
2
|
+
Copyright IBM Corp. 2015
|
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.
|
15
|
+
=end
|
16
|
+
|
17
|
+
require 'time'
|
18
|
+
require 'openssl'
|
19
|
+
require 'base64'
|
20
|
+
|
21
|
+
class HMAC
|
22
|
+
=begin
|
23
|
+
This class is meant to provide HMAC authentication when making the REST API calls.
|
24
|
+
=end
|
25
|
+
GAAS_SCHEME_STRING ||= "GaaS-HMAC"
|
26
|
+
SEPARATOR ||= ":"
|
27
|
+
ENCODING ||= "ISO-8859-1"
|
28
|
+
SHA1_STRING ||= "sha1"
|
29
|
+
|
30
|
+
def get_auth_credentials(uid, secret, method, url, rfc1123date, body)
|
31
|
+
signature = get_signature(secret,method,url,rfc1123date,body)
|
32
|
+
if !signature.empty?
|
33
|
+
output = "#{GAAS_SCHEME_STRING} #{uid}#{SEPARATOR}#{signature}"
|
34
|
+
return output
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_signature(secret,method,url,rfc1123date,body)
|
39
|
+
secret.encode(ENCODING)
|
40
|
+
|
41
|
+
key = "#{method.encode(ENCODING)}\n#{url.encode(ENCODING)}\n#{rfc1123date.encode(ENCODING)}\n#{body.encode(ENCODING)}"
|
42
|
+
|
43
|
+
digest = OpenSSL::Digest.new(SHA1_STRING)
|
44
|
+
hex_string = OpenSSL::HMAC.digest(digest,secret,key)
|
45
|
+
return Base64.encode64(hex_string)
|
46
|
+
end
|
47
|
+
|
48
|
+
def get_rfc1123_date
|
49
|
+
Time.now.httpdate
|
50
|
+
end
|
51
51
|
end
|
data/{lib → src}/rest_client.rb
RENAMED
@@ -1,195 +1,197 @@
|
|
1
|
-
=begin
|
2
|
-
Copyright IBM Corp. 2015
|
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.
|
15
|
-
=end
|
16
|
-
|
17
|
-
require 'net/http'
|
18
|
-
require 'json'
|
19
|
-
require_relative './hmac.rb'
|
20
|
-
|
21
|
-
class RESTClient
|
22
|
-
=begin
|
23
|
-
This object is used to make the REST API calls using credentials found in your service account object
|
24
|
-
and store the results of the REST API calls.
|
25
|
-
|
26
|
-
bundles = list of all the bundles associated to your service instance
|
27
|
-
language = a map of the languages of your translated string in the following format: {sourceLanguage : [targetLanguages]}
|
28
|
-
resource_data = hash containing your translalated strings in the following format: {locale: {key : translated_value}}
|
29
|
-
service_account = ServiceAccount object that contains the credentials necessary to make the REST API calls. See service_account.rb
|
30
|
-
bundle_id = ID of the bundle that contains the translated strings
|
31
|
-
=end
|
32
|
-
|
33
|
-
BUNDLE_STRING ||= "bundle"
|
34
|
-
SOURCE_LANGUAGE_STRING ||= "sourceLanguage"
|
35
|
-
TARGET_LANGUAGES_STRING ||= "targetLanguages"
|
36
|
-
RESOURCE_STRINGS ||= "resourceStrings"
|
37
|
-
BUNDLE_ID_STRING ||= "bundleIds"
|
38
|
-
|
39
|
-
URL_PATH ||= "v2/bundles"
|
40
|
-
|
41
|
-
@supportedLangs = ['en','de','es','fr','it', 'ja','ko', 'pt-BR', 'zh-Hans', 'zh-Hant']
|
42
|
-
@expectedMatches = {
|
43
|
-
'en': 'en', 'en_US': 'en', 'en-US': 'en',
|
44
|
-
'de': 'de', 'de_at': 'de', 'de-at': 'de',
|
45
|
-
'es': 'es', 'es_mx': 'es', 'es-mx': 'es',
|
46
|
-
'fr': 'fr', 'fr_FR': 'fr', 'fr-Fr': 'fr', 'fr_CA': 'fr',
|
47
|
-
'it': 'it', 'it_ch': 'it', 'it-ch': 'it', 'it-IT': 'it',
|
48
|
-
'ja': 'ja', 'ja_JA': 'ja', 'ja-JA': 'ja',
|
49
|
-
'ko': 'ko', 'ko_KO': 'ko', 'ko-KO': 'ko',
|
50
|
-
'pt-BR': 'pt-BR', 'pt': nil,
|
51
|
-
'zh': 'zh-Hans', 'zh-tw': 'zh-Hant', 'zh-cn': 'zh-Hans',
|
52
|
-
'zh-hk': 'zh-Hant', 'zh-sg': 'zh-Hans',
|
53
|
-
}
|
54
|
-
|
55
|
-
def initialize(service_account, bundle_id, locale = "")
|
56
|
-
@bundles = []
|
57
|
-
@languages = {}
|
58
|
-
@resource_data = {}
|
59
|
-
@service_account = service_account
|
60
|
-
@bundle_id = bundle_id
|
61
|
-
|
62
|
-
get_resource_strings(locale)
|
63
|
-
end
|
64
|
-
|
65
|
-
def get_bundles
|
66
|
-
if @bundles.empty?
|
67
|
-
url_string = "#{@service_account.get_url_string}/#{@service_account.get_instance_id}/#{URL_PATH}"
|
68
|
-
response = make_request(url_string, service_account)
|
69
|
-
@bundles = request[BUNDLE_ID_STRING]
|
70
|
-
end
|
71
|
-
@bundles
|
72
|
-
end
|
73
|
-
|
74
|
-
#bundle info contains the languages - used get_bundle_info to reflect current API
|
75
|
-
def get_bundle_info
|
76
|
-
if @languages.empty?
|
77
|
-
url_string = "#{@service_account.get_url_string}/#{@service_account.get_instance_id}/#{URL_PATH}/#{@bundle_id}"
|
78
|
-
puts url_string
|
79
|
-
response = make_request(url_string, @service_account)
|
80
|
-
source_language = response[BUNDLE_STRING][SOURCE_LANGUAGE_STRING]
|
81
|
-
@languages[source_language] = response[BUNDLE_STRING][TARGET_LANGUAGES_STRING]
|
82
|
-
end
|
83
|
-
@languages
|
84
|
-
end
|
85
|
-
|
86
|
-
def get_resource_strings(locale = "")
|
87
|
-
if @resource_data.empty?
|
88
|
-
target_languages = []
|
89
|
-
|
90
|
-
if locale.empty?
|
91
|
-
language_dictionary = get_bundle_info
|
92
|
-
target_languages = get_target_languages.dup
|
93
|
-
target_languages << get_source_language
|
94
|
-
else
|
95
|
-
if (!@supportedLangs.include? locale)
|
96
|
-
if (@expectedMatches.has_key? locale)
|
97
|
-
locale = @expectedMatches[locale]
|
98
|
-
else
|
99
|
-
raise "Unsupported Locale: #{locale}"
|
100
|
-
end
|
101
|
-
end
|
102
|
-
target_languages << locale
|
103
|
-
end
|
104
|
-
|
105
|
-
get_translations(@service_account, target_languages, @bundle_id)
|
106
|
-
else
|
107
|
-
@resource_data
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def has_language(language)
|
112
|
-
if language.equal? get_source_language
|
113
|
-
return true
|
114
|
-
end
|
115
|
-
get_target_languages.each do |lang|
|
116
|
-
if lang.equal? language
|
117
|
-
return true
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
return false
|
122
|
-
end
|
123
|
-
|
124
|
-
def get_source_language
|
125
|
-
@languages.keys[0]
|
126
|
-
end
|
127
|
-
|
128
|
-
def get_target_languages
|
129
|
-
source_language = get_source_language
|
130
|
-
@languages[source_language]
|
131
|
-
end
|
132
|
-
|
133
|
-
def get_service_account
|
134
|
-
@service_account
|
135
|
-
end
|
136
|
-
|
137
|
-
def get_bundle_id
|
138
|
-
@bundle_id
|
139
|
-
end
|
140
|
-
|
141
|
-
def set_resource_strings (map)
|
142
|
-
@resource_data = map
|
143
|
-
end
|
144
|
-
|
145
|
-
def set_service_account(sa)
|
146
|
-
@service_account = sa
|
147
|
-
end
|
148
|
-
|
149
|
-
def set_bundle_id(name)
|
150
|
-
@bundle_id = name
|
151
|
-
end
|
152
|
-
|
153
|
-
private
|
154
|
-
|
155
|
-
def make_request(url, service_account, basic_auth = false)
|
156
|
-
uri = URI.parse(url.to_s)
|
157
|
-
request = Net::HTTP::Get.new uri.path
|
158
|
-
|
159
|
-
if
|
160
|
-
|
161
|
-
else
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
1
|
+
=begin
|
2
|
+
Copyright IBM Corp. 2015
|
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.
|
15
|
+
=end
|
16
|
+
|
17
|
+
require 'net/http'
|
18
|
+
require 'json'
|
19
|
+
require_relative './hmac.rb'
|
20
|
+
|
21
|
+
class RESTClient
|
22
|
+
=begin
|
23
|
+
This object is used to make the REST API calls using credentials found in your service account object
|
24
|
+
and store the results of the REST API calls.
|
25
|
+
|
26
|
+
bundles = list of all the bundles associated to your service instance
|
27
|
+
language = a map of the languages of your translated string in the following format: {sourceLanguage : [targetLanguages]}
|
28
|
+
resource_data = hash containing your translalated strings in the following format: {locale: {key : translated_value}}
|
29
|
+
service_account = ServiceAccount object that contains the credentials necessary to make the REST API calls. See service_account.rb
|
30
|
+
bundle_id = ID of the bundle that contains the translated strings
|
31
|
+
=end
|
32
|
+
|
33
|
+
BUNDLE_STRING ||= "bundle"
|
34
|
+
SOURCE_LANGUAGE_STRING ||= "sourceLanguage"
|
35
|
+
TARGET_LANGUAGES_STRING ||= "targetLanguages"
|
36
|
+
RESOURCE_STRINGS ||= "resourceStrings"
|
37
|
+
BUNDLE_ID_STRING ||= "bundleIds"
|
38
|
+
|
39
|
+
URL_PATH ||= "v2/bundles"
|
40
|
+
|
41
|
+
@supportedLangs = ['en','de','es','fr','it', 'ja','ko', 'pt-BR', 'zh-Hans', 'zh-Hant']
|
42
|
+
@expectedMatches = {
|
43
|
+
'en': 'en', 'en_US': 'en', 'en-US': 'en',
|
44
|
+
'de': 'de', 'de_at': 'de', 'de-at': 'de',
|
45
|
+
'es': 'es', 'es_mx': 'es', 'es-mx': 'es',
|
46
|
+
'fr': 'fr', 'fr_FR': 'fr', 'fr-Fr': 'fr', 'fr_CA': 'fr',
|
47
|
+
'it': 'it', 'it_ch': 'it', 'it-ch': 'it', 'it-IT': 'it',
|
48
|
+
'ja': 'ja', 'ja_JA': 'ja', 'ja-JA': 'ja',
|
49
|
+
'ko': 'ko', 'ko_KO': 'ko', 'ko-KO': 'ko',
|
50
|
+
'pt-BR': 'pt-BR', 'pt': nil,
|
51
|
+
'zh': 'zh-Hans', 'zh-tw': 'zh-Hant', 'zh-cn': 'zh-Hans',
|
52
|
+
'zh-hk': 'zh-Hant', 'zh-sg': 'zh-Hans',
|
53
|
+
}
|
54
|
+
|
55
|
+
def initialize(service_account, bundle_id, locale = "")
|
56
|
+
@bundles = []
|
57
|
+
@languages = {}
|
58
|
+
@resource_data = {}
|
59
|
+
@service_account = service_account
|
60
|
+
@bundle_id = bundle_id
|
61
|
+
|
62
|
+
get_resource_strings(locale)
|
63
|
+
end
|
64
|
+
|
65
|
+
def get_bundles
|
66
|
+
if @bundles.empty?
|
67
|
+
url_string = "#{@service_account.get_url_string}/#{@service_account.get_instance_id}/#{URL_PATH}"
|
68
|
+
response = make_request(url_string, service_account)
|
69
|
+
@bundles = request[BUNDLE_ID_STRING]
|
70
|
+
end
|
71
|
+
@bundles
|
72
|
+
end
|
73
|
+
|
74
|
+
#bundle info contains the languages - used get_bundle_info to reflect current API
|
75
|
+
def get_bundle_info
|
76
|
+
if @languages.empty?
|
77
|
+
url_string = "#{@service_account.get_url_string}/#{@service_account.get_instance_id}/#{URL_PATH}/#{@bundle_id}"
|
78
|
+
puts url_string
|
79
|
+
response = make_request(url_string, @service_account)
|
80
|
+
source_language = response[BUNDLE_STRING][SOURCE_LANGUAGE_STRING]
|
81
|
+
@languages[source_language] = response[BUNDLE_STRING][TARGET_LANGUAGES_STRING]
|
82
|
+
end
|
83
|
+
@languages
|
84
|
+
end
|
85
|
+
|
86
|
+
def get_resource_strings(locale = "")
|
87
|
+
if @resource_data.empty?
|
88
|
+
target_languages = []
|
89
|
+
|
90
|
+
if locale.empty?
|
91
|
+
language_dictionary = get_bundle_info
|
92
|
+
target_languages = get_target_languages.dup
|
93
|
+
target_languages << get_source_language
|
94
|
+
else
|
95
|
+
if (!@supportedLangs.include? locale)
|
96
|
+
if (@expectedMatches.has_key? locale)
|
97
|
+
locale = @expectedMatches[locale]
|
98
|
+
else
|
99
|
+
raise "Unsupported Locale: #{locale}"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
target_languages << locale
|
103
|
+
end
|
104
|
+
|
105
|
+
get_translations(@service_account, target_languages, @bundle_id)
|
106
|
+
else
|
107
|
+
@resource_data
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def has_language(language)
|
112
|
+
if language.equal? get_source_language
|
113
|
+
return true
|
114
|
+
end
|
115
|
+
get_target_languages.each do |lang|
|
116
|
+
if lang.equal? language
|
117
|
+
return true
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
return false
|
122
|
+
end
|
123
|
+
|
124
|
+
def get_source_language
|
125
|
+
@languages.keys[0]
|
126
|
+
end
|
127
|
+
|
128
|
+
def get_target_languages
|
129
|
+
source_language = get_source_language
|
130
|
+
@languages[source_language]
|
131
|
+
end
|
132
|
+
|
133
|
+
def get_service_account
|
134
|
+
@service_account
|
135
|
+
end
|
136
|
+
|
137
|
+
def get_bundle_id
|
138
|
+
@bundle_id
|
139
|
+
end
|
140
|
+
|
141
|
+
def set_resource_strings (map)
|
142
|
+
@resource_data = map
|
143
|
+
end
|
144
|
+
|
145
|
+
def set_service_account(sa)
|
146
|
+
@service_account = sa
|
147
|
+
end
|
148
|
+
|
149
|
+
def set_bundle_id(name)
|
150
|
+
@bundle_id = name
|
151
|
+
end
|
152
|
+
|
153
|
+
private
|
154
|
+
|
155
|
+
def make_request(url, service_account, basic_auth = false)
|
156
|
+
uri = URI.parse(url.to_s)
|
157
|
+
request = Net::HTTP::Get.new uri.path
|
158
|
+
|
159
|
+
if service_account.is_iam_enabled
|
160
|
+
request["Authorization"] = "API-KEY #{service_account.get_api_key}"
|
161
|
+
else if basic_auth
|
162
|
+
request.basic_auth(service_account.get_user_id, service_account.get_password)
|
163
|
+
else
|
164
|
+
hmac = HMAC.new
|
165
|
+
d = hmac.get_rfc1123_date
|
166
|
+
request["Date"] = d
|
167
|
+
request["Authorization"] = hmac.get_auth_credentials(service_account.get_user_id, service_account.get_password, "GET", url,d, "").strip
|
168
|
+
end
|
169
|
+
|
170
|
+
response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') {|http|
|
171
|
+
http.request(request)
|
172
|
+
}
|
173
|
+
json_response = JSON.parse(response.body)
|
174
|
+
|
175
|
+
if json_response["status"] != "SUCCESS"
|
176
|
+
raise "Invalid HTTP Request #{json_response["message"]}"
|
177
|
+
end
|
178
|
+
|
179
|
+
return json_response
|
180
|
+
end
|
181
|
+
|
182
|
+
def get_translations(service_account, locale_list, project_name)
|
183
|
+
url_string = "#{service_account.get_url_string}/#{service_account.get_instance_id}/#{URL_PATH}/#{project_name}"
|
184
|
+
|
185
|
+
locale_list.each do |language|
|
186
|
+
target_lang_url = "#{url_string}/#{language}"
|
187
|
+
response = make_request(target_lang_url, service_account)
|
188
|
+
|
189
|
+
@resource_data[language] = {}
|
190
|
+
|
191
|
+
response[RESOURCE_STRINGS].each do |key, value|
|
192
|
+
I18n.backend.store_translations(language, {key => value}, :escape => false)
|
193
|
+
@resource_data[language][key] = value
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
195
197
|
end
|
@@ -0,0 +1,243 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright IBM Corp. 2015
|
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.
|
15
|
+
=end
|
16
|
+
|
17
|
+
require 'json'
|
18
|
+
|
19
|
+
class ServiceAccount
|
20
|
+
=begin
|
21
|
+
This object is meant to identify the user and contains credentials needed to make the REST API calls.
|
22
|
+
Access to Globalization Pipeline RC enabled service instances for users in is controlled by IBM Cloud Identity and Access Management
|
23
|
+
(IAM) and/or Globalization Pipeline Authentication. Whereas for CF instances only Globalization Pipeline Authentication can be used.
|
24
|
+
|
25
|
+
There are three options for creating a valid instance:
|
26
|
+
1. Provide the credentials as parameters.
|
27
|
+
|
28
|
+
url_string = base url string user must call for REST API
|
29
|
+
user_id = ID of user
|
30
|
+
pwd = password of user
|
31
|
+
instance_id = ID of your specific service instanceId
|
32
|
+
api_key = IAM API Key to access the instance.
|
33
|
+
|
34
|
+
Mandatory for both authentication mechanisms
|
35
|
+
url_string, instance_id
|
36
|
+
|
37
|
+
For Globalization Pipeline authentication:
|
38
|
+
user_id and pwd
|
39
|
+
|
40
|
+
For IAM authentication:
|
41
|
+
api_key
|
42
|
+
|
43
|
+
If both Globalization Pipeline and IAM authentication credentials are provided then
|
44
|
+
instance will be initialized with Globalization Pipeline authentication.
|
45
|
+
|
46
|
+
|
47
|
+
2. Use the user defined environment variables for providing credentials (no params required).
|
48
|
+
GP_URL = base url string user must call for REST API
|
49
|
+
GP_USER_ID = ID of user
|
50
|
+
GP_PWD = password of user
|
51
|
+
GP_INSTANCE_ID = ID of your specific service instanceId
|
52
|
+
GP_IAM_API_KEY = IAM API Key to access the instance.
|
53
|
+
|
54
|
+
Mandatory for both authentication mechanisms:
|
55
|
+
GP_URL, GP_INSTANCE_ID
|
56
|
+
|
57
|
+
For Globalization Pipeline authentication:
|
58
|
+
GP_USER_ID, GP_PWD
|
59
|
+
|
60
|
+
For IAM authentication:
|
61
|
+
GP_IAM_API_KEY
|
62
|
+
|
63
|
+
If both Globalization Pipeline and IAM authentication credentials are provided then
|
64
|
+
instance will be initialized with Globalization Pipeline authentication.
|
65
|
+
|
66
|
+
3. Use the ``VCAP_SERVICES`` environment variable for the first matching GP service instance,
|
67
|
+
where matching is defined as app name = g11n-pipeline or matches the regex /gp-(.*)/
|
68
|
+
|
69
|
+
=end
|
70
|
+
|
71
|
+
GP_URL ||= "GP_URL"
|
72
|
+
GP_USER_ID ||= "GP_USER_ID"
|
73
|
+
GP_PWD ||= "GP_PASSWORD"
|
74
|
+
GP_INSTANCE_ID ||="GP_INSTANCE_ID"
|
75
|
+
GP_IAM_API_KEY ||= "GP_IAM_API_KEY"
|
76
|
+
|
77
|
+
|
78
|
+
APP_NAME ||= "g11n-pipeline"
|
79
|
+
APP_NAME_REGEX = /gp-(.*)/
|
80
|
+
|
81
|
+
VCAP_SERVICES ||= "VCAP_SERVICES"
|
82
|
+
|
83
|
+
CREDENTIALS ||= "credentials"
|
84
|
+
CREDENTIALS_INDEX = 0
|
85
|
+
|
86
|
+
URL_STRING ||="url"
|
87
|
+
USER_ID_STRING ||= "userId"
|
88
|
+
PASSWORD_STRING ||= "password"
|
89
|
+
INSTANCE_ID_STRING ||= "instanceId"
|
90
|
+
IAM_API_KEY_STRING ||= "apikey"
|
91
|
+
|
92
|
+
def initialize(url_string = "", user_id = "", pwd = "", instance_id = "", api_key="", credsFilePath = "")
|
93
|
+
|
94
|
+
if !url_string.empty? && !user_id.empty? && !pwd.empty? && !instance_id.empty?
|
95
|
+
@url_string = url_string
|
96
|
+
@user_id = user_id
|
97
|
+
@pwd = pwd
|
98
|
+
@instance_id = instance_id
|
99
|
+
@iam_enabled = false
|
100
|
+
|
101
|
+
else if !url_string.empty? && !instance_id.empty? && !api_key.empty?
|
102
|
+
@url_string = url_string
|
103
|
+
@instance_id = instance_id
|
104
|
+
@api_key = api_key
|
105
|
+
@iam_enabled = true
|
106
|
+
|
107
|
+
else
|
108
|
+
account = get_service_account_via_env_var
|
109
|
+
if account.nil?
|
110
|
+
account = get_service_account_via_vcap_service
|
111
|
+
end
|
112
|
+
if account.nil? && !credsFilePath.empty?
|
113
|
+
credsFile = File.open credsFilePath
|
114
|
+
creds = JSON.parse(credsFile)
|
115
|
+
if !creds.nil
|
116
|
+
if creds.has_key?("credentials")
|
117
|
+
creds=creds["credentials"]
|
118
|
+
end
|
119
|
+
account = extractCredsFromJson(creds)
|
120
|
+
if account.nil?
|
121
|
+
raise "Couldn't create a service account"
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
@url_string = account[0]
|
127
|
+
@user_id = account[1]
|
128
|
+
@pwd = account[2]
|
129
|
+
@instance_id=account[3]
|
130
|
+
@api_key = account[4]
|
131
|
+
@iam_enabled = account[5]
|
132
|
+
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def is_iam_enabled
|
137
|
+
@iam_enabled
|
138
|
+
|
139
|
+
def get_api_key
|
140
|
+
@api_key
|
141
|
+
|
142
|
+
def get_url_string
|
143
|
+
@url_string
|
144
|
+
end
|
145
|
+
|
146
|
+
def get_user_id
|
147
|
+
@user_id
|
148
|
+
end
|
149
|
+
|
150
|
+
def get_password
|
151
|
+
@pwd
|
152
|
+
end
|
153
|
+
|
154
|
+
def get_instance_id
|
155
|
+
@instance_id
|
156
|
+
end
|
157
|
+
|
158
|
+
def set_url_string(url)
|
159
|
+
@url_string = url
|
160
|
+
end
|
161
|
+
|
162
|
+
def set_user_id(user_id)
|
163
|
+
@user_id = user_id
|
164
|
+
end
|
165
|
+
|
166
|
+
def set_password(password)
|
167
|
+
@pwd = password
|
168
|
+
end
|
169
|
+
|
170
|
+
def set_instance_id(instance_id)
|
171
|
+
@instance_id = instance_id
|
172
|
+
end
|
173
|
+
|
174
|
+
private
|
175
|
+
|
176
|
+
def get_service_account_via_env_var
|
177
|
+
|
178
|
+
url_string = ENV[GP_URL]
|
179
|
+
if url_string.nil?
|
180
|
+
return
|
181
|
+
end
|
182
|
+
|
183
|
+
instance_id = ENV[GP_INSTANCE_ID]
|
184
|
+
if instance_id.nil?
|
185
|
+
return
|
186
|
+
end
|
187
|
+
|
188
|
+
user_id = ENV[GP_USER_ID]
|
189
|
+
pwd = ENV[GP_PWD]
|
190
|
+
api_key=ENV[GP_IAM_API_KEY]
|
191
|
+
|
192
|
+
if (user_id.nil? || pwd.nil?) && api_key.nil?
|
193
|
+
return
|
194
|
+
end
|
195
|
+
|
196
|
+
iam_enabled=api_key.nil?false:true
|
197
|
+
|
198
|
+
return [url_string, user_id, pwd, instance_id, api_key, iam_enabled]
|
199
|
+
end
|
200
|
+
|
201
|
+
def get_service_account_via_vcap_service
|
202
|
+
|
203
|
+
vcap_services = ENV[VCAP_SERVICES]
|
204
|
+
|
205
|
+
if vcap_services.nil?
|
206
|
+
return
|
207
|
+
end
|
208
|
+
|
209
|
+
json_vcap_services = JSON.parse(vcap_services)
|
210
|
+
|
211
|
+
app_name = ""
|
212
|
+
json_vcap_services.each do |key, value|
|
213
|
+
if (key =~ APP_NAME_REGEX or key.equals? (APP_NAME))
|
214
|
+
app_name = key
|
215
|
+
break
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
credentials_list = JSON.parse(vcap_services)[app_name][CREDENTIALS_INDEX][CREDENTIALS]
|
220
|
+
return extractCredsFromJson(credentials_list)
|
221
|
+
end
|
222
|
+
|
223
|
+
def extractCredsFromJson(credentials_list)
|
224
|
+
|
225
|
+
if credentials_list.nil?
|
226
|
+
return
|
227
|
+
end
|
228
|
+
url = credentials_list[URL_STRING]
|
229
|
+
user_id = credentials_list[USER_ID_STRING]
|
230
|
+
pwd = credentials_list[PASSWORD_STRING]
|
231
|
+
instance_id = credentials_list[INSTANCE_ID_STRING]
|
232
|
+
api_key= credentials_list[IAM_API_KEY_STRING]
|
233
|
+
if url.nil? || instance_id.nil?
|
234
|
+
return
|
235
|
+
end
|
236
|
+
if (user_id.nil? || pwd.nil?) && api_key.nil?
|
237
|
+
return
|
238
|
+
end
|
239
|
+
iam_enabled=api_key.nil?false:true
|
240
|
+
return [url, user_id, pwd, instance_id, api_key, iam_enabled]
|
241
|
+
end
|
242
|
+
|
243
|
+
end
|
metadata
CHANGED
@@ -1,28 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gp-ruby-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Visaahan Anandarajah
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-05-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description: Ruby SDK for Globalization Pipeline on IBM
|
14
|
-
email:
|
13
|
+
description: Ruby SDK for Globalization Pipeline on IBM Cloud
|
14
|
+
email: icuintl@us.ibm.com
|
15
15
|
executables: []
|
16
16
|
extensions: []
|
17
17
|
extra_rdoc_files: []
|
18
18
|
files:
|
19
|
-
-
|
20
|
-
-
|
21
|
-
-
|
22
|
-
-
|
23
|
-
-
|
24
|
-
homepage:
|
25
|
-
licenses:
|
19
|
+
- src/cache_control.rb
|
20
|
+
- src/gp-ruby-client.rb
|
21
|
+
- src/hmac.rb
|
22
|
+
- src/rest_client.rb
|
23
|
+
- src/service_account.rb
|
24
|
+
homepage: https://github.com/IBM-Cloud/gp-ruby-client
|
25
|
+
licenses:
|
26
|
+
- Apache-2.0
|
26
27
|
metadata: {}
|
27
28
|
post_install_message:
|
28
29
|
rdoc_options: []
|
@@ -40,9 +41,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
40
41
|
version: '0'
|
41
42
|
requirements: []
|
42
43
|
rubyforge_project:
|
43
|
-
rubygems_version: 2.
|
44
|
+
rubygems_version: 2.5.2.3
|
44
45
|
signing_key:
|
45
46
|
specification_version: 4
|
46
47
|
summary: Ruby SDK for Globalization Pipeline
|
47
48
|
test_files: []
|
48
|
-
has_rdoc:
|
data/lib/service_account.rb
DELETED
@@ -1,166 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
Copyright IBM Corp. 2015
|
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.
|
15
|
-
=end
|
16
|
-
|
17
|
-
require 'json'
|
18
|
-
|
19
|
-
class ServiceAccount
|
20
|
-
=begin
|
21
|
-
This object is meant to identify the user and contains credentials needed to make the REST API calls
|
22
|
-
|
23
|
-
This class will either use user-provided variables, environment variables or vcap_services variables in your application
|
24
|
-
|
25
|
-
url = base url string user must call for REST API
|
26
|
-
user_id = ID of user
|
27
|
-
password = password of user
|
28
|
-
instance_id = ID of your specific service instanceId
|
29
|
-
=end
|
30
|
-
|
31
|
-
GP_URL ||= "GP_URL"
|
32
|
-
GP_USER_ID ||= "GP_USER_ID"
|
33
|
-
GP_PWD ||= "GP_PASSWORD"
|
34
|
-
GP_INSTANCE_ID ||="GP_INSTANCE_ID"
|
35
|
-
|
36
|
-
APP_NAME ||= "g11n-pipeline"
|
37
|
-
APP_NAME_REGEX = /gp-(.*)/
|
38
|
-
|
39
|
-
VCAP_SERVICES ||= "VCAP_SERVICES"
|
40
|
-
|
41
|
-
CREDENTIALS ||= "credentials"
|
42
|
-
CREDENTIALS_INDEX = 0
|
43
|
-
|
44
|
-
URL_STRING ||="url"
|
45
|
-
USER_ID_STRING ||= "userId"
|
46
|
-
PASSWORD_STRING ||= "password"
|
47
|
-
INSTANCE_ID_STRING ||= "instanceId"
|
48
|
-
|
49
|
-
def initialize(url_string = "", user_id = "", pwd = "", instance_id = "")
|
50
|
-
if !url_string.empty? && !user_id.empty? && !pwd.empty? && !instance_id.empty?
|
51
|
-
@url_string = url_string
|
52
|
-
@user_id = user_id
|
53
|
-
@pwd = pwd
|
54
|
-
@instance_id = instance_id
|
55
|
-
else
|
56
|
-
account = get_service_account_via_env_var
|
57
|
-
|
58
|
-
if account.nil?
|
59
|
-
account = get_service_account_via_vcap_service
|
60
|
-
if account.nil?
|
61
|
-
raise "Couldn't create a service account"
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
@url_string = account[0]
|
66
|
-
@user_id = account[1]
|
67
|
-
@pwd = account[2]
|
68
|
-
@instance_id=account[3]
|
69
|
-
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def get_url_string
|
74
|
-
@url_string
|
75
|
-
end
|
76
|
-
|
77
|
-
def get_user_id
|
78
|
-
@user_id
|
79
|
-
end
|
80
|
-
|
81
|
-
def get_password
|
82
|
-
@pwd
|
83
|
-
end
|
84
|
-
|
85
|
-
def get_instance_id
|
86
|
-
@instance_id
|
87
|
-
end
|
88
|
-
|
89
|
-
def set_url_string(url)
|
90
|
-
@url_string = url
|
91
|
-
end
|
92
|
-
|
93
|
-
def set_user_id(user_id)
|
94
|
-
@user_id = user_id
|
95
|
-
end
|
96
|
-
|
97
|
-
def set_password(password)
|
98
|
-
@pwd = password
|
99
|
-
end
|
100
|
-
|
101
|
-
def set_instance_id(instance_id)
|
102
|
-
@instance_id = instance_id
|
103
|
-
end
|
104
|
-
|
105
|
-
private
|
106
|
-
|
107
|
-
def get_service_account_via_env_var
|
108
|
-
|
109
|
-
url_string = ENV[GP_URL]
|
110
|
-
if url_string.nil?
|
111
|
-
return
|
112
|
-
end
|
113
|
-
|
114
|
-
user_id = ENV[GP_USER_ID]
|
115
|
-
if user_id.nil?
|
116
|
-
return
|
117
|
-
end
|
118
|
-
|
119
|
-
pwd = ENV[GP_PWD]
|
120
|
-
if pwd.nil?
|
121
|
-
return
|
122
|
-
end
|
123
|
-
|
124
|
-
instance_id = ENV[GP_INSTANCE_ID]
|
125
|
-
if instance_id.nil?
|
126
|
-
return
|
127
|
-
end
|
128
|
-
|
129
|
-
return [url_string, user_id, pwd,instance_id]
|
130
|
-
end
|
131
|
-
|
132
|
-
def get_service_account_via_vcap_service
|
133
|
-
|
134
|
-
vcap_services = ENV[VCAP_SERVICES]
|
135
|
-
|
136
|
-
if vcap_services.nil?
|
137
|
-
return
|
138
|
-
end
|
139
|
-
|
140
|
-
json_vcap_services = JSON.parse(vcap_services)
|
141
|
-
|
142
|
-
app_name = ""
|
143
|
-
json_vcap_services.each do |key, value|
|
144
|
-
if (key =~ APP_NAME_REGEX or key.equals? (APP_NAME))
|
145
|
-
app_name = key
|
146
|
-
break
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
credentials_list = JSON.parse(vcap_services)[app_name][CREDENTIALS_INDEX][CREDENTIALS]
|
151
|
-
|
152
|
-
if !credentials_list.nil?
|
153
|
-
url = credentials_list[URL_STRING]
|
154
|
-
user_id = credentials_list[USER_ID_STRING]
|
155
|
-
pwd = credentials_list[PASSWORD_STRING]
|
156
|
-
instance_id = credentials_list[INSTANCE_ID_STRING]
|
157
|
-
if url.nil? || user_id.nil? || pwd.nil? || instance_id.nil?
|
158
|
-
return
|
159
|
-
end
|
160
|
-
|
161
|
-
return [url, user_id, pwd, instance_id]
|
162
|
-
end
|
163
|
-
|
164
|
-
return
|
165
|
-
end
|
166
|
-
end
|