widgit_accounts_sdk 0.0.6 → 0.0.8

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