dina 0.6.2.0 → 0.7.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 +4 -4
- data/lib/dina/authentication/authentication.rb +89 -75
- data/lib/dina/models/base_model.rb +3 -3
- data/lib/dina/models/object_store/file.rb +3 -3
- data/lib/dina/version.rb +2 -2
- data/lib/dina.rb +17 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f683d4b9e156194f6c356e5ebfbd46fcb6f821548403cb5821357d0813d5ba6a
|
4
|
+
data.tar.gz: 867eef99e2ffb402420f425f495c4b44f4b5e98dbf955383d7fe39215f8d1104
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 815c80204d71ac6eb567ff3aee545123d582573a38d4602b85a18b20c2200837323a57e515663790951691ce642c8865ef0587532a6acefd1cc9dc378051d779
|
7
|
+
data.tar.gz: 4a8d252554cc5eff4a76ee00970a525ba15d805eee63ec026832ddd9ad5eeeeafac2e5eefb5667ab7ea9c22eb9ee5cca92f639492e5b6b7ea0c0a157a58a35e4
|
@@ -1,7 +1,25 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
module Dina
|
4
|
-
|
4
|
+
class Authentication
|
5
|
+
|
6
|
+
class << self
|
7
|
+
attr_accessor :endpoint_url
|
8
|
+
|
9
|
+
def instance
|
10
|
+
Thread.current[:dina_authentication] ||= new
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@token = nil
|
16
|
+
@endpoint_url = nil
|
17
|
+
@token_store_file = nil
|
18
|
+
@user = nil
|
19
|
+
@password = nil
|
20
|
+
@server_name = nil
|
21
|
+
@client_id = nil
|
22
|
+
end
|
5
23
|
|
6
24
|
# Sets Authentication configuration
|
7
25
|
# Options hash as follows:
|
@@ -17,7 +35,7 @@ module Dina
|
|
17
35
|
# }
|
18
36
|
#
|
19
37
|
# @param options [Hash] the configuration options
|
20
|
-
def
|
38
|
+
def config(options = {})
|
21
39
|
raise ConfigItemMissing, "Missing token_store_file from config." unless options[:token_store_file]
|
22
40
|
raise ConfigItemMissing, "Missing user from config." unless options[:user]
|
23
41
|
raise ConfigItemMissing, "Missing password from config." unless options[:password]
|
@@ -53,7 +71,7 @@ module Dina
|
|
53
71
|
# and load the token_store_file with every call to header
|
54
72
|
#
|
55
73
|
# @return [String] the Bearer token
|
56
|
-
def
|
74
|
+
def header
|
57
75
|
if access_token.nil? || refresh_token.nil?
|
58
76
|
set_token
|
59
77
|
end
|
@@ -66,98 +84,94 @@ module Dina
|
|
66
84
|
end
|
67
85
|
|
68
86
|
# Flush instance variables and save default values in token store file
|
69
|
-
def
|
87
|
+
def flush
|
70
88
|
write_token(data: empty_token)
|
71
89
|
end
|
72
90
|
|
73
|
-
|
74
|
-
attr_accessor :endpoint_url
|
91
|
+
private
|
75
92
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
rescue
|
82
|
-
raise TokenStoreContentInvalid
|
83
|
-
end
|
93
|
+
def access_token
|
94
|
+
begin
|
95
|
+
token[@server_name.to_sym][:access_token]
|
96
|
+
rescue
|
97
|
+
raise TokenStoreContentInvalid
|
84
98
|
end
|
99
|
+
end
|
85
100
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
101
|
+
def refresh_token
|
102
|
+
begin
|
103
|
+
token[@server_name.to_sym][:refresh_token]
|
104
|
+
rescue
|
105
|
+
raise TokenStoreContentInvalid
|
92
106
|
end
|
107
|
+
end
|
93
108
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
end
|
109
|
+
def auth_expiry
|
110
|
+
begin
|
111
|
+
token[@server_name.to_sym][:auth_expiry]
|
112
|
+
rescue
|
113
|
+
raise TokenStoreContentInvalid
|
100
114
|
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def get_token
|
118
|
+
response = Keycloak::Client.get_token(
|
119
|
+
@user,
|
120
|
+
@password,
|
121
|
+
client_id= @client_id,
|
122
|
+
secret='')
|
123
|
+
JSON.parse(response, symbolize_names: true)
|
124
|
+
end
|
101
125
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
126
|
+
def set_token
|
127
|
+
json = get_token
|
128
|
+
auth_expiry = (Time.now + json[:expires_in].seconds).to_s
|
129
|
+
save_token(access_token: json[:access_token], refresh_token: json[:refresh_token], auth_expiry: auth_expiry)
|
130
|
+
end
|
131
|
+
|
132
|
+
def renew_token
|
133
|
+
begin
|
134
|
+
response = Keycloak::Client.get_token_by_refresh_token(
|
135
|
+
refresh_token,
|
106
136
|
client_id= @client_id,
|
107
137
|
secret='')
|
108
|
-
JSON.parse(response, symbolize_names: true)
|
109
|
-
end
|
110
|
-
|
111
|
-
def set_token
|
112
|
-
json = get_token
|
138
|
+
json = JSON.parse(response, symbolize_names: true)
|
113
139
|
auth_expiry = (Time.now + json[:expires_in].seconds).to_s
|
114
140
|
save_token(access_token: json[:access_token], refresh_token: json[:refresh_token], auth_expiry: auth_expiry)
|
141
|
+
rescue
|
142
|
+
set_token
|
115
143
|
end
|
144
|
+
end
|
116
145
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
refresh_token,
|
121
|
-
client_id= @client_id,
|
122
|
-
secret='')
|
123
|
-
json = JSON.parse(response, symbolize_names: true)
|
124
|
-
auth_expiry = (Time.now + json[:expires_in].seconds).to_s
|
125
|
-
save_token(access_token: json[:access_token], refresh_token: json[:refresh_token], auth_expiry: auth_expiry)
|
126
|
-
rescue
|
127
|
-
set_token
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def token
|
132
|
-
@token ||= JSON.parse(::File.read(@token_store_file), symbolize_names: true)
|
133
|
-
end
|
134
|
-
|
135
|
-
def empty_token
|
136
|
-
data = {}
|
137
|
-
data[@server_name.to_sym] = {
|
138
|
-
access_token: nil,
|
139
|
-
refresh_token: nil,
|
140
|
-
auth_expiry: nil
|
141
|
-
}
|
142
|
-
data
|
143
|
-
end
|
146
|
+
def token
|
147
|
+
@token ||= JSON.parse(::File.read(@token_store_file), symbolize_names: true)
|
148
|
+
end
|
144
149
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
150
|
+
def empty_token
|
151
|
+
data = {}
|
152
|
+
data[@server_name.to_sym] = {
|
153
|
+
access_token: nil,
|
154
|
+
refresh_token: nil,
|
155
|
+
auth_expiry: nil
|
156
|
+
}
|
157
|
+
data
|
158
|
+
end
|
154
159
|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
160
|
+
def save_token(access_token:, refresh_token:, auth_expiry:)
|
161
|
+
data = JSON.parse(::File.read(@token_store_file), symbolize_names: true) rescue {}
|
162
|
+
data[@server_name.to_sym] = {
|
163
|
+
access_token: access_token,
|
164
|
+
refresh_token: refresh_token,
|
165
|
+
auth_expiry: auth_expiry
|
166
|
+
}
|
167
|
+
write_token(data: data)
|
168
|
+
end
|
159
169
|
|
170
|
+
def write_token(data:)
|
171
|
+
::File.write(@token_store_file, JSON.dump(data))
|
172
|
+
@token = data
|
160
173
|
end
|
161
174
|
|
162
175
|
end
|
176
|
+
|
163
177
|
end
|
@@ -15,13 +15,13 @@ module Dina
|
|
15
15
|
|
16
16
|
# Required by json_api_client
|
17
17
|
def self.site
|
18
|
-
raise ConfigItemMissing, "Missing endpoint_url from config. Perhaps Dina
|
19
|
-
|
18
|
+
raise ConfigItemMissing, "Missing endpoint_url from config. Perhaps Dina.config has not yet been called." unless Authentication.endpoint_url
|
19
|
+
Authentication.endpoint_url + "/" + endpoint_path
|
20
20
|
end
|
21
21
|
|
22
22
|
# injects keybloak bearer token with all json_api_client calls
|
23
23
|
def self.custom_headers
|
24
|
-
{ content_type: "application/vnd.api+json", authorization: Dina
|
24
|
+
{ content_type: "application/vnd.api+json", authorization: Dina.header }
|
25
25
|
end
|
26
26
|
|
27
27
|
# helper method for all child classes to retrieve records by group
|
@@ -15,7 +15,7 @@ module Dina
|
|
15
15
|
obj.group = group
|
16
16
|
RestClient::Request.execute(
|
17
17
|
method: :get,
|
18
|
-
headers: { authorization: Dina
|
18
|
+
headers: { authorization: Dina.header },
|
19
19
|
url: obj.url + "/#{id}",
|
20
20
|
verify_ssl: verify_ssl
|
21
21
|
)
|
@@ -35,7 +35,7 @@ module Dina
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def endpoint
|
38
|
-
|
38
|
+
Autentication.endpoint_url
|
39
39
|
end
|
40
40
|
|
41
41
|
def endpoint_path
|
@@ -58,7 +58,7 @@ module Dina
|
|
58
58
|
validate_params
|
59
59
|
response = RestClient::Request.execute(
|
60
60
|
method: :post,
|
61
|
-
headers: { authorization: Dina
|
61
|
+
headers: { authorization: Dina.header },
|
62
62
|
url: (!is_derivative) ? url : url + "/derivative",
|
63
63
|
payload: {
|
64
64
|
multipart: true,
|
data/lib/dina/version.rb
CHANGED
data/lib/dina.rb
CHANGED
@@ -14,7 +14,22 @@ module Dina
|
|
14
14
|
JsonApiClient::Schema.register multilingual_title: Dina::MultilingualTitleCaster
|
15
15
|
JsonApiClient::Schema.register multilingual_description: Dina::MultilingualDescriptionCaster
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
module_function
|
18
|
+
|
19
|
+
def classes
|
20
|
+
BaseModel.subclasses
|
21
|
+
end
|
22
|
+
|
23
|
+
def config(options = {})
|
24
|
+
Authentication.instance.config(options)
|
25
|
+
end
|
26
|
+
|
27
|
+
def header
|
28
|
+
Authentication.instance.header
|
29
|
+
end
|
30
|
+
|
31
|
+
def flush
|
32
|
+
Authentication.instance.flush
|
19
33
|
end
|
34
|
+
|
20
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dina
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David P. Shorthouse
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json_api_client
|