widgit_accounts_sdk 0.0.6 → 0.0.7

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,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e86d598f05cce8432a51cfcbe65cb94c8778c47cd64105fb0e4d31447fbaf9f5
4
- data.tar.gz: c3d709020421e239a22e157a3a3dd1e382ad27ac78b74d49bf5fa89c15c7edbd
3
+ metadata.gz: 7c55743e80bab6e1a33ac5ddd8bba686d00ce44f4a2322bf32603bf0a2f3d93b
4
+ data.tar.gz: f4ae9bfab8e4fc08bdf6a4a9d68e8ed1486390860433f0c01820b5c4f9a6cf34
5
5
  SHA512:
6
- metadata.gz: 03db3def928738a18e1f0690a1673a3bd19a8bb9160a5449986ff65cbdb17590e609c7fde5b657bc7276fb51adda7740b16cca37a31357742133a2da9a5597e1
7
- data.tar.gz: 203f35427c3ad47ddac74e1ff34077c3a1195a7316406d500d95898015520c244268c9f2522c2dec300787ee6636a94a3ee6bec2629b5918e8f81bca4a309701
6
+ metadata.gz: 4af367fbf76278d2a46b20ee2b8d0284f234217fd03010eee4e97d17d4141dbb6e79ed26c65b0dfe35f30f1a6ba4a22c21f294f4b716afb9768e85ac7ca45898
7
+ data.tar.gz: 750e4532950ca2d82d0ca3702df03cbc1f8109e51cdd2222ef2c0491d3223d5a5437c9b120c53d096c74672ae445d3ac1fd5c21e341f1c6dd5f9711c02752352
@@ -1,5 +1,6 @@
1
1
  require 'uri'
2
2
  require 'net/http'
3
+ require 'jwt'
3
4
 
4
5
  module WidgitAccountsSdk
5
6
  module Client
@@ -64,6 +65,64 @@ module WidgitAccountsSdk
64
65
  return response
65
66
  end
66
67
 
68
+ def valid_access_token?(token)
69
+ begin
70
+ JWT.decode(
71
+ token,
72
+ nil,
73
+ true,
74
+ { algorithms: ['RS256'], jwks: method(:jwks_set) }
75
+ )
76
+ true
77
+ rescue JWT::ExpiredSignature
78
+ :expired
79
+ rescue JWT::JWKError
80
+ :jwk_error
81
+ rescue JWT::DecodeError => e
82
+ :error
83
+ end
84
+ end
85
+
86
+ def access_token_payload(token)
87
+ begin
88
+ payload, _ = JWT.decode(
89
+ token,
90
+ nil,
91
+ true,
92
+ { algorithms: ['RS256'], jwks: method(:jwks_set) }
93
+ )
94
+ { valid: true, payload: payload.symbolize_keys }
95
+ rescue JWT::ExpiredSignature
96
+ { valid: false, error: :expired }
97
+ rescue JWT::JWKError
98
+ { valid: false, error: :jwk_error }
99
+ rescue JWT::DecodeError => e
100
+ { valid: false, error: :error }
101
+ end
102
+ end
103
+
104
+ def refresh_access_token(refresh_token)
105
+ refresh_response = request("/oauth/token", :post, {
106
+ grant_type: 'refresh_token',
107
+ refresh_token: refresh_token,
108
+ redirect_uri: WidgitAccountsSdk.configuration.redirect_uri,
109
+ client_id: WidgitAccountsSdk.configuration.client_id,
110
+ client_secret: WidgitAccountsSdk.configuration.client_secret
111
+ })
112
+
113
+ if refresh_response["error"].present?
114
+ { error: refresh_response["error"] }
115
+ else
116
+ {
117
+ access_token: refresh_response["access_token"],
118
+ refresh_token: refresh_response["refresh_token"],
119
+ id_token: refresh_response["id_token"],
120
+ expires_in: refresh_response["expires_in"],
121
+ created_at: refresh_response["created_at"]
122
+ }
123
+ end
124
+ end
125
+
67
126
  private
68
127
  def request(path, method = :get, params = {})
69
128
  uri = URI.parse("#{WidgitAccountsSdk.configuration.host}#{path}")
@@ -101,5 +160,18 @@ module WidgitAccountsSdk
101
160
  def success
102
161
  { 'status' => 'success', 'code' => 200 }
103
162
  end
163
+
164
+ def jwks_set(options = {})
165
+ if options[:kid_not_found] && @cache_last_update < Time.now.to_i - 300
166
+ logger.info("Invalidating JWK cache. #{options[:kid]} not found from previous cache")
167
+ @cached_keys = nil
168
+ end
169
+
170
+ @cached_keys ||= begin
171
+ @cache_last_update = Time.now.to_i
172
+ jwks_hash = request('/oauth/discovery/keys')
173
+ JWT::JWK::Set.new(jwks_hash)
174
+ end
175
+ end
104
176
  end
105
177
  end
@@ -3,11 +3,17 @@ module WidgitAccountsSdk
3
3
  attr_accessor :host
4
4
  attr_accessor :api_key
5
5
  attr_accessor :watch_webhook_url
6
+ attr_accessor :redirect_uri
7
+ attr_accessor :client_id
8
+ attr_accessor :client_secret
6
9
 
7
10
  def initialize
8
11
  @api_key = nil
9
12
  @host = nil
10
13
  @watch_webhook_url
14
+ @redirect_uri = nil
15
+ @client_id = nil
16
+ @client_secret = nil
11
17
  end
12
18
  end
13
19
  end
metadata CHANGED
@@ -1,16 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: widgit_accounts_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stu Wright
8
8
  - James Sherriff
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-11-16 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2025-09-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: jwt
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 3.1.2
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 3.1.2
14
28
  description: A Ruby client for interacting with the Widgit Accounts API
15
29
  email: james.sherriff@widgit.com
16
30
  executables: []
@@ -20,10 +34,10 @@ files:
20
34
  - lib/widgit_accounts_sdk.rb
21
35
  - lib/widgit_accounts_sdk/client.rb
22
36
  - lib/widgit_accounts_sdk/configuration.rb
23
- homepage:
37
+ homepage:
24
38
  licenses: []
25
39
  metadata: {}
26
- post_install_message:
40
+ post_install_message:
27
41
  rdoc_options: []
28
42
  require_paths:
29
43
  - lib
@@ -38,8 +52,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
38
52
  - !ruby/object:Gem::Version
39
53
  version: '0'
40
54
  requirements: []
41
- rubygems_version: 3.3.7
42
- signing_key:
55
+ rubygems_version: 3.4.1
56
+ signing_key:
43
57
  specification_version: 4
44
58
  summary: Widgit Accounts API Client Ruby Gem
45
59
  test_files: []