Class: Legion::Extensions::Identity::Entra::Client
- Inherits:
-
Object
- Object
- Legion::Extensions::Identity::Entra::Client
show all
- Defined in:
- lib/legion/extensions/identity/entra/client.rb
Constant Summary
collapse
- GRAPH_BASE =
'https://graph.microsoft.com/v1.0'
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize ⇒ Client
Returns a new instance of Client.
77
78
79
80
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 77
def initialize
@connection = Concurrent::AtomicReference.new(nil)
@access_token = Concurrent::AtomicReference.new(nil)
end
|
Class Method Details
.authenticated?(pattern: :delegated) ⇒ Boolean
.denied_scopes(pattern: :delegated) ⇒ Object
46
47
48
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 46
def denied_scopes(pattern: :delegated)
registry(pattern: pattern).denied
end
|
.graph(pattern: :delegated) ⇒ Object
24
25
26
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 24
def graph(pattern: :delegated)
instance(pattern: pattern).connection
end
|
.instance(pattern: :delegated) ⇒ Object
20
21
22
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 20
def instance(pattern: :delegated)
@instances.compute_if_absent(pattern.to_sym) { client_class_for(pattern).new }
end
|
.permitted?(scope, pattern: :delegated) ⇒ Boolean
34
35
36
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 34
def permitted?(scope, pattern: :delegated)
registry(pattern: pattern).permitted?(scope)
end
|
.permitted_all?(*scopes, pattern: :delegated) ⇒ Boolean
38
39
40
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 38
def permitted_all?(*scopes, pattern: :delegated)
registry(pattern: pattern).permitted_all?(*scopes)
end
|
.permitted_any?(*scopes, pattern: :delegated) ⇒ Boolean
42
43
44
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 42
def permitted_any?(*scopes, pattern: :delegated)
registry(pattern: pattern).permitted_any?(*scopes)
end
|
.registry(pattern: :delegated) ⇒ Object
.reset!(pattern: nil) ⇒ Object
50
51
52
53
54
55
56
57
58
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 50
def reset!(pattern: nil)
if pattern
@instances.delete(pattern.to_sym)
@registries[pattern.to_sym]&.reset!
else
@instances.clear
@registries.each_value(&:reset!)
end
end
|
Instance Method Details
#access_token ⇒ Object
117
118
119
120
121
122
123
124
125
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 117
def access_token
@access_token.set(nil) if token_expired?
token = @access_token.get
return token if token
resolved = resolve_token
@access_token.compare_and_set(nil, resolved)
@access_token.get
end
|
#connection ⇒ Object
86
87
88
89
90
91
92
93
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 86
def connection
@connection.set(nil) if token_expired?
conn = @connection.get
return conn if conn
@connection.compare_and_set(nil, build_connection)
@connection.get
end
|
#delete(path) ⇒ Object
113
114
115
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 113
def delete(path)
connection.delete(path)
end
|
#get(path, params: {}) ⇒ Object
95
96
97
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 95
def get(path, params: {})
connection.get(path, params)
end
|
#patch(path, body: {}) ⇒ Object
106
107
108
109
110
111
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 106
def patch(path, body: {})
connection.patch(path) do |req|
req.['Content-Type'] = 'application/json'
req.body = json_dump(body)
end
end
|
#pattern ⇒ Object
82
83
84
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 82
def pattern
raise NotImplementedError, "#{self.class} must define #pattern"
end
|
#post(path, body: {}) ⇒ Object
99
100
101
102
103
104
|
# File 'lib/legion/extensions/identity/entra/client.rb', line 99
def post(path, body: {})
connection.post(path) do |req|
req.['Content-Type'] = 'application/json'
req.body = json_dump(body)
end
end
|