stytch 3.1.1 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
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: []