passageidentity 0.2.1 → 0.2.2

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: 04e31805b3eb522f8677f9c249abc99f8daf02f807fbe8855702b97656e0371b
4
- data.tar.gz: 1d3e7b0d52b180bf880c0e988e035e6d393aaa856a3ff01b8c04b76567266950
3
+ metadata.gz: 92327755aba79e3ce7da3431f3899de291606db6ff146f3a2690442fdf3c6146
4
+ data.tar.gz: 775acf7946238286a3f84f3b5611c7d0d2d34443f03d0e9250224a7a5f5f9d27
5
5
  SHA512:
6
- metadata.gz: ea2498dd8f07d7a7f8bd5434635ef43e643611656bce4e71afa0a63d1eb4b29df1ed58b1bcd78e4dc348c8826b0ca16ba55f4ce37085b746685c0252be285195
7
- data.tar.gz: f67a7631241795a30209c65caff48b624175bb5c181a0ac67b0c8cbba38e202c26d2c143d2d94a6e2436fcaae38cd0581a5d5323d4800aa613dddb3a75d33ce1
6
+ metadata.gz: 21c9e84843b859462b4dea7ee09dee93ec1604b5267e6e803f313ac574f45d244d79460fa9e5840af7c735eb5239cd86fc6642e224c3a0b59e69ec6d25b061a8
7
+ data.tar.gz: e81c39c83bd438a9ce58e34ed965490e75b4f1a51980fc0ea9f57ca5f1dede568a9ce051dd8cc2ab6fe5e983f2c0d3ebab6eed4281be7e4ee7d6f7d53684cf08
@@ -3,7 +3,7 @@ name: PR Checks
3
3
  on:
4
4
  workflow_dispatch:
5
5
  pull_request:
6
- branches:
6
+ branches:
7
7
  - main
8
8
 
9
9
  env:
@@ -21,16 +21,13 @@ jobs:
21
21
  - uses: actions/checkout@v2
22
22
  - uses: ruby/setup-ruby@v1
23
23
  with:
24
- ruby-version: '3.0'
24
+ ruby-version: '3.1'
25
25
 
26
26
  - name: Run Tests
27
27
  run: |
28
- gem build passageidentity.gemspec -o test.gem
29
- gem install test.gem
30
- rm test.gem
28
+ bundle install
31
29
  ruby tests/all.rb
32
30
  - name: Run Linting
33
31
  run: |
34
32
  npm install -g prettier @prettier/plugin-ruby
35
- gem install bundler prettier_print syntax_tree syntax_tree-haml syntax_tree-rbs
36
33
  prettier --check '**/*.rb'
data/.gitignore CHANGED
@@ -55,3 +55,4 @@ build-iPhoneSimulator/
55
55
 
56
56
  # Used by RuboCop. Remote config files pulled in from inherit_from directive.
57
57
  # .rubocop-https?--*
58
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in auth0.gemspec
4
+ gemspec
5
+
6
+ group :development do
7
+ gem 'rack'
8
+ gem 'dotenv'
9
+ gem 'prettier_print'
10
+ gem 'syntax_tree'
11
+ gem 'syntax_tree-haml'
12
+ gem 'syntax_tree-rbs'
13
+ end
@@ -54,16 +54,16 @@ module Passage
54
54
  def authenticate_request(request)
55
55
  # Get the token based on the strategy
56
56
  if @auth_strategy === Passage::COOKIE_STRATEGY
57
- unless request.cookies["psg_auth_token"].present?
57
+ unless request.cookies.key?("psg_auth_token")
58
58
  raise PassageError.new(
59
59
  message:
60
- `missing authentication token: expected "psg_auth_token" cookie`
60
+ "missing authentication token: expected \"psg_auth_token\" cookie"
61
61
  )
62
62
  end
63
63
  @token = request.cookies["psg_auth_token"]
64
64
  else
65
65
  headers = request.headers
66
- unless headers["Authorization"].present?
66
+ unless headers.key?("Authorization")
67
67
  raise PassageError.new(message: "no authentication token in header")
68
68
  end
69
69
  @token = headers["Authorization"].split(" ").last
@@ -79,16 +79,16 @@ module Passage
79
79
  end
80
80
 
81
81
  def authenticate_token(token)
82
- kid = JWT.decode(token, nil, false)[1]["kid"]
83
- exists = false
84
- for jwk in @jwks["keys"]
85
- if jwk["kid"] == kid
86
- exists = true
87
- break
88
- end
89
- end
90
- fetch_jwks unless exists
91
82
  begin
83
+ kid = JWT.decode(token, nil, false)[1]["kid"]
84
+ exists = false
85
+ for jwk in @jwks["keys"]
86
+ if jwk["kid"] == kid
87
+ exists = true
88
+ break
89
+ end
90
+ end
91
+ fetch_jwks unless exists
92
92
  claims =
93
93
  JWT.decode(
94
94
  token,
@@ -105,13 +105,13 @@ module Passage
105
105
  rescue JWT::InvalidIssuerError => e
106
106
  raise PassageError.new(message: e.message)
107
107
  rescue JWT::InvalidAudError => e
108
- raise PassageError.new(e.message)
108
+ raise PassageError.new(message: e.message)
109
109
  rescue JWT::ExpiredSignature => e
110
- raise PassageError.new(e.message)
110
+ raise PassageError.new(message: e.message)
111
111
  rescue JWT::IncorrectAlgorithm => e
112
- raise PassageError.new(e.message)
112
+ raise PassageError.new(message: e.message)
113
113
  rescue JWT::DecodeError => e
114
- raise PassageError.new(e.message)
114
+ raise PassageError.new(message: e.message)
115
115
  end
116
116
  end
117
117
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'passageidentity'
3
- s.version = '0.2.1'
3
+ s.version = '0.2.2'
4
4
  s.summary = 'Passage SDK for biometric authentication'
5
5
  s.description =
6
6
  'Enables verification of server-side authentication and user management for applications using Passage'
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.license = 'MIT'
12
12
 
13
13
  s.metadata['source_code_uri'] =
14
- 'https://github.com/passage-identity/passage-ruby'
14
+ 'https://github.com/passageidentity/passage-ruby'
15
15
 
16
16
  # Specify which files should be added to the gem when it is released.
17
17
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -25,7 +25,6 @@ Gem::Specification.new do |s|
25
25
  end
26
26
 
27
27
  s.add_dependency 'faraday', '>= 0.17.0', '< 2.0'
28
- s.add_dependency 'jwt', '>= 2.3.0'
29
- s.add_dependency 'openssl', '>= 3.0.0'
30
- s.add_dependency 'dotenv', '>= 2.7.6'
28
+ s.add_dependency 'jwt', '~> 2.3', '>= 2.3.0'
29
+ s.add_dependency 'openssl', '~> 3.0', '>= 3.0.0'
31
30
  end
data/tests/auth_test.rb CHANGED
@@ -1,15 +1,69 @@
1
1
  require_relative "../lib/passageidentity/client"
2
2
  require "dotenv"
3
3
  require "faraday"
4
+ require "rack"
4
5
  require "test/unit"
5
6
 
6
7
  Dotenv.load(".env")
7
8
  class TestUserAPI < Test::Unit::TestCase
8
9
  PassageClient =
9
10
  Passage::Client.new(app_id: ENV["APP_ID"], api_key: ENV["API_KEY"])
11
+ PassageHeaderClient =
12
+ Passage::Client.new(
13
+ app_id: ENV["APP_ID"],
14
+ api_key: ENV["API_KEY"],
15
+ auth_strategy: Passage::HEADER_STRATEGY
16
+ )
10
17
 
11
- def test_authenticate_token
18
+ def test_valid_authenticate_token
12
19
  user_id = PassageClient.auth.authenticate_token(ENV["PSG_JWT"])
13
20
  assert_equal ENV["TEST_USER_ID"], user_id
14
21
  end
22
+
23
+ def test_invalid_authenticate_token
24
+ assert_raises Passage::PassageError do
25
+ PassageClient.auth.authenticate_token("invalid_token")
26
+ end
27
+ end
28
+
29
+ def test_valid_authenticate_request_cookie
30
+ env = Rack::MockRequest.env_for("https://test.com")
31
+ env["HTTP_COOKIE"] = "psg_auth_token=#{ENV["PSG_JWT"]}"
32
+ cookie_request = Rack::Request.new(env)
33
+ user_id = PassageClient.auth.authenticate_request(cookie_request)
34
+ assert_equal ENV["TEST_USER_ID"], user_id
35
+ end
36
+
37
+ def test_invalid_authenticate_request_cookie
38
+ envBadCookie = Rack::MockRequest.env_for("https://test.com")
39
+ envBadCookie["HTTP_COOKIE"] = "psg_auth_token=invalid_token}"
40
+ bad_cookie_request = Rack::Request.new(envBadCookie)
41
+ assert_raises Passage::PassageError do
42
+ PassageClient.auth.authenticate_request(bad_cookie_request)
43
+ end
44
+ no_cookie_request = Rack::Request.new({})
45
+ assert_raises Passage::PassageError do
46
+ PassageClient.auth.authenticate_request(no_cookie_request)
47
+ end
48
+ end
49
+
50
+ def test_valid_authenticate_request_header
51
+ headers = { "Authorization" => "Bearer #{ENV["PSG_JWT"]}" }
52
+ header_request = Faraday.new(url: "https://test.com", headers: headers)
53
+ user_id = PassageHeaderClient.auth.authenticate_request(header_request)
54
+ assert_equal ENV["TEST_USER_ID"], user_id
55
+ end
56
+
57
+ def test_invalid_authenticate_request_header
58
+ invalid_headers = { "Authorization" => "Bearer invalid_token" }
59
+ no_header_request = Faraday.new(url: "https://test.com")
60
+ assert_raises Passage::PassageError do
61
+ PassageHeaderClient.auth.authenticate_request(no_header_request)
62
+ end
63
+ invalid_header_request =
64
+ Faraday.new(url: "https://test.com", headers: invalid_headers)
65
+ assert_raises Passage::PassageError do
66
+ PassageHeaderClient.auth.authenticate_request(no_header_request)
67
+ end
68
+ end
15
69
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: passageidentity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Passage Identity
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-03 00:00:00.000000000 Z
11
+ date: 2023-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -34,6 +34,9 @@ dependencies:
34
34
  name: jwt
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.3'
37
40
  - - ">="
38
41
  - !ruby/object:Gem::Version
39
42
  version: 2.3.0
@@ -41,6 +44,9 @@ dependencies:
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '2.3'
44
50
  - - ">="
45
51
  - !ruby/object:Gem::Version
46
52
  version: 2.3.0
@@ -48,30 +54,22 @@ dependencies:
48
54
  name: openssl
49
55
  requirement: !ruby/object:Gem::Requirement
50
56
  requirements:
51
- - - ">="
57
+ - - "~>"
52
58
  - !ruby/object:Gem::Version
53
- version: 3.0.0
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
59
+ version: '3.0'
58
60
  - - ">="
59
61
  - !ruby/object:Gem::Version
60
62
  version: 3.0.0
61
- - !ruby/object:Gem::Dependency
62
- name: dotenv
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: 2.7.6
68
63
  type: :runtime
69
64
  prerelease: false
70
65
  version_requirements: !ruby/object:Gem::Requirement
71
66
  requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '3.0'
72
70
  - - ">="
73
71
  - !ruby/object:Gem::Version
74
- version: 2.7.6
72
+ version: 3.0.0
75
73
  description: Enables verification of server-side authentication and user management
76
74
  for applications using Passage
77
75
  email: support@passage.id
@@ -83,6 +81,7 @@ files:
83
81
  - ".github/workflows/on_pr.yml"
84
82
  - ".gitignore"
85
83
  - CONTRIBUTING.md
84
+ - Gemfile
86
85
  - LICENSE
87
86
  - README.md
88
87
  - lib/passageidentity.rb
@@ -101,7 +100,7 @@ homepage: https://rubygems.org/gems/passageidentity
101
100
  licenses:
102
101
  - MIT
103
102
  metadata:
104
- source_code_uri: https://github.com/passage-identity/passage-ruby
103
+ source_code_uri: https://github.com/passageidentity/passage-ruby
105
104
  post_install_message:
106
105
  rdoc_options: []
107
106
  require_paths: