stytch 3.1.1 → 3.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e91043619b43a9897c4df68cdfbdcff3153d21c09dcb0ba2fa0c7f7c2d8d2135
4
- data.tar.gz: 5f925cecd213b77e7e5991b95016849d81cb9a017bc3f0bebbc62d53e8d6f562
3
+ metadata.gz: c8df42027eb062c7be0ddfbe1f1ee11eece832c7ca442391421f7355a072c77e
4
+ data.tar.gz: 8df5887ad55b4f1c32efdcccf1873ffd371c4d2df3278ffbf290b1868cc56dad
5
5
  SHA512:
6
- metadata.gz: 1066e9ee807780bbe7d1a5f255b844553615ed93889ca129320ec499e494acc98321bdc48c6ae47c7eaf2ddc9a9410bb9e2e81e4dd92a5e72a87a3178384fd25
7
- data.tar.gz: d765dcf96b92bb7bdd65b0b710b27f94069635f61c3d74bdb376b7c8a086c7888f794c273bcb84617d1f2df2a737cbf2eedc5c50c3455b502c0a9371478df5d2
6
+ metadata.gz: fec2e73072c90bfc9d5d8c0ff7c29ccbb41e9979d117b1f5a91f2492a83a1f576390debf250a4e17d767a65d708799f48a4222ec79d4bddf27b79d3788f5670a
7
+ data.tar.gz: 77e7d520386a75d66b9aefc5052a93094d297d0764c5d7dc0c08757e9234c63ed0ead8cc17d9dd9160b404ea11c62ace810896e9b8c7dc98fa1a965bf0b7e6b6
@@ -37,7 +37,8 @@ module Stytch
37
37
  options: {},
38
38
  session_token: nil,
39
39
  session_jwt: nil,
40
- session_duration_minutes: nil
40
+ session_duration_minutes: nil,
41
+ code_verifier: nil
41
42
  )
42
43
  request = {
43
44
  token: token
@@ -48,6 +49,7 @@ module Stytch
48
49
  request[:session_token] = session_token unless session_token.nil?
49
50
  request[:session_jwt] = session_jwt unless session_jwt.nil?
50
51
  request[:session_duration_minutes] = session_duration_minutes unless session_duration_minutes.nil?
52
+ request[:code_verifier] = code_verifier unless code_verifier.nil?
51
53
 
52
54
  post_request("#{PATH}/authenticate", request)
53
55
  end
@@ -67,7 +69,8 @@ module Stytch
67
69
  signup_magic_link_url: nil,
68
70
  login_expiration_minutes: nil,
69
71
  signup_expiration_minutes: nil,
70
- attributes: {}
72
+ attributes: {},
73
+ code_challenge: nil
71
74
  )
72
75
  request = {
73
76
  email: email
@@ -78,6 +81,7 @@ module Stytch
78
81
  request[:login_expiration_minutes] = login_expiration_minutes unless login_expiration_minutes.nil?
79
82
  request[:signup_expiration_minutes] = signup_expiration_minutes unless signup_expiration_minutes.nil?
80
83
  request[:attributes] = attributes if attributes != {}
84
+ request[:code_challenge] = code_challenge unless code_challenge.nil?
81
85
 
82
86
  post_request("#{PATH}/send", request)
83
87
  end
@@ -89,7 +93,8 @@ module Stytch
89
93
  login_expiration_minutes: nil,
90
94
  signup_expiration_minutes: nil,
91
95
  attributes: {},
92
- create_user_as_pending: false
96
+ create_user_as_pending: false,
97
+ code_challenge: nil
93
98
  )
94
99
  request = {
95
100
  email: email,
@@ -101,6 +106,7 @@ module Stytch
101
106
  request[:login_expiration_minutes] = login_expiration_minutes unless login_expiration_minutes.nil?
102
107
  request[:signup_expiration_minutes] = signup_expiration_minutes unless signup_expiration_minutes.nil?
103
108
  request[:attributes] = attributes if attributes != {}
109
+ request[:code_challenge] = code_challenge unless code_challenge.nil?
104
110
 
105
111
  post_request("#{PATH}/login_or_create", request)
106
112
  end
data/lib/stytch/oauth.rb CHANGED
@@ -16,7 +16,8 @@ module Stytch
16
16
  token:,
17
17
  session_token: nil,
18
18
  session_jwt: nil,
19
- session_duration_minutes: nil
19
+ session_duration_minutes: nil,
20
+ code_verifier: nil
20
21
  )
21
22
  request = {
22
23
  token: token
@@ -24,6 +25,7 @@ module Stytch
24
25
  request[:session_token] = session_token unless session_token.nil?
25
26
  request[:session_jwt] = session_jwt unless session_jwt.nil?
26
27
  request[:session_duration_minutes] = session_duration_minutes unless session_duration_minutes.nil?
28
+ request[:code_verifier] = code_verifier unless code_verifier.nil?
27
29
 
28
30
  post_request("#{PATH}/authenticate", request)
29
31
  end
@@ -88,6 +88,12 @@ module Stytch
88
88
  session_duration_minutes: session_duration_minutes,
89
89
  )
90
90
  end
91
+ rescue StandardError
92
+ # JWT could not be verified locally. Check with the Stytch API.
93
+ return authenticate(
94
+ session_jwt: session_jwt,
95
+ session_duration_minutes: session_duration_minutes,
96
+ )
91
97
  end
92
98
 
93
99
  # Parse a JWT and verify the signature locally (without calling /authenticate in the API)
@@ -97,7 +103,7 @@ module Stytch
97
103
  def authenticate_jwt_local(session_jwt)
98
104
  issuer = "stytch.com/" + @project_id
99
105
  begin
100
- decoded_token = JWT.decode session_jwt, nil, true,
106
+ decoded_token = JWT.decode session_jwt, nil, true,
101
107
  { jwks: @jwks_loader, iss: issuer, verify_iss: true, aud: @project_id, verify_aud: true, algorithms: ["RS256"]}
102
108
  return decoded_token[0]
103
109
  rescue JWT::InvalidIssuerError
@@ -113,12 +119,14 @@ module Stytch
113
119
 
114
120
  def marshal_jwt_into_session(jwt)
115
121
  stytch_claim = "https://stytch.com/session"
122
+ expires_at = jwt[stytch_claim]["expires_at"] || Time.at(jwt["exp"]).to_datetime.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
116
123
  return {
117
124
  "session_id" => jwt[stytch_claim]["id"],
118
125
  "user_id" => jwt["sub"],
119
126
  "started_at" => jwt[stytch_claim]["started_at"],
120
127
  "last_accessed_at" => jwt[stytch_claim]["last_accessed_at"],
121
- "expires_at" => Time.at(jwt["exp"]).to_datetime.iso8601,
128
+ # For JWTs that include it, prefer the inner expires_at claim.
129
+ "expires_at" => expires_at,
122
130
  "attributes" => jwt[stytch_claim]["attributes"],
123
131
  "authentication_factors" => jwt[stytch_claim]["authentication_factors"],
124
132
  }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Stytch
4
- VERSION = '3.1.1'
4
+ VERSION = '3.3.0'
5
5
  end
data/stytch.gemspec CHANGED
@@ -27,6 +27,8 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.add_dependency 'faraday', '>= 0.17.0', '< 2.0'
29
29
  spec.add_dependency 'faraday_middleware', '>= 0.14.0', '< 2.0'
30
- spec.add_dependency 'jwt', '>= 2.3.0'
31
30
  spec.add_dependency 'json-jwt', '>=1.13.0'
31
+ spec.add_dependency 'jwt', '>= 2.3.0'
32
+
33
+ spec.add_development_dependency 'test-unit', '>=3.5.3'
32
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stytch
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - stytch
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-27 00:00:00.000000000 Z
11
+ date: 2022-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -50,6 +50,20 @@ dependencies:
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '2.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: json-jwt
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 1.13.0
60
+ type: :runtime
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 1.13.0
53
67
  - !ruby/object:Gem::Dependency
54
68
  name: jwt
55
69
  requirement: !ruby/object:Gem::Requirement
@@ -65,20 +79,20 @@ dependencies:
65
79
  - !ruby/object:Gem::Version
66
80
  version: 2.3.0
67
81
  - !ruby/object:Gem::Dependency
68
- name: json-jwt
82
+ name: test-unit
69
83
  requirement: !ruby/object:Gem::Requirement
70
84
  requirements:
71
85
  - - ">="
72
86
  - !ruby/object:Gem::Version
73
- version: 1.13.0
74
- type: :runtime
87
+ version: 3.5.3
88
+ type: :development
75
89
  prerelease: false
76
90
  version_requirements: !ruby/object:Gem::Requirement
77
91
  requirements:
78
92
  - - ">="
79
93
  - !ruby/object:Gem::Version
80
- version: 1.13.0
81
- description:
94
+ version: 3.5.3
95
+ description:
82
96
  email:
83
97
  - support@stytch.com
84
98
  executables: []
@@ -118,7 +132,7 @@ licenses:
118
132
  metadata:
119
133
  homepage_uri: https://stytch.com
120
134
  source_code_uri: https://github.com/stytchauth/stytch-ruby
121
- post_install_message:
135
+ post_install_message:
122
136
  rdoc_options: []
123
137
  require_paths:
124
138
  - lib
@@ -133,8 +147,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
147
  - !ruby/object:Gem::Version
134
148
  version: '0'
135
149
  requirements: []
136
- rubygems_version: 3.1.6
137
- signing_key:
150
+ rubygems_version: 3.0.3.1
151
+ signing_key:
138
152
  specification_version: 4
139
153
  summary: Stytch Ruby Gem
140
154
  test_files: []