omniauth-nitro-id 0.1.1 → 1.1.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: d4d3e8c274665be7c83f34c25dbf04aa079f54192cbd30a59ef4b6243020d33d
4
- data.tar.gz: 964db9c5a01dd33f16cc8491b9aeaac22dd980fd09d25ee737953824b2fbcc21
3
+ metadata.gz: c3fcfd3453a65729b3e8f7a24c6741c14cacc74d88547e24cb120fdeda0f55c3
4
+ data.tar.gz: 2a6b81428854f8eb43b5be273aff890d9caf2cdf48cbb9154fd7d4eecab7d09b
5
5
  SHA512:
6
- metadata.gz: b16e8610dd2aeea20d1cdbe80088d7fd95898863987ccab37d2ffaa4efbdc59c21d9443e4e341b3c58a58d55bf19e33160b1c072e54f766250d114d5fda60794
7
- data.tar.gz: 25a285b3e002a2dcbc096cc7c9c9ecfc45fdc6ef59c06acf923705676c06320f390dc8c82f0780b4b3b700bf23d3878fc866e9b610644901501f287f12783e2f
6
+ metadata.gz: 386e8ba55776a76e8905e58420dc897261011083adc935005c806944a48ec20ed772adef07d82571fbaa34903934ee4ed9d3d1063324b1047c072a56863f526f
7
+ data.tar.gz: 3e9aa553a7de06ccbb143da81061c87489b3412ccc8ac15e6aaa10edbdf046e2ab0c261aebb203e2e5fb4358de546b7e391925f1e3ea91975a7627b7f78c16a3
data/docs/CHANGELOG.md ADDED
@@ -0,0 +1,24 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [1.1.0] - 2022-12-14
11
+
12
+ ### Added
13
+
14
+ * Add support for `id_token_hint`. PR [#8](https://github.com/powerhome/omniauth-nitro-id/pull/8)
15
+
16
+ ## [1.0.0] - 2022-12-05
17
+
18
+ ### Added
19
+
20
+ * Initial release
21
+
22
+ [Unreleased]: https://github.com/powerhome/omniauth-nitro-id/compare/v1.0.0...HEAD
23
+ [1.1.0]: https://github.com/powerhome/omniauth-nitro-id/releases/tag/v1.1.0
24
+ [1.0.0]: https://github.com/powerhome/omniauth-nitro-id/releases/tag/v1.0.0
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Extensions
4
+ module Discovery
5
+ Module.new do
6
+ # Monkey patch allow HTTP instead of forcing HTTPS for discovery.
7
+
8
+ attr_reader :scheme
9
+
10
+ def initialize(uri)
11
+ @scheme = uri.scheme
12
+ super
13
+ end
14
+
15
+ def endpoint
16
+ URI::Generic.build(scheme: scheme, host: host, port: port, path: path)
17
+ rescue URI::Error => e
18
+ raise SWD::Exception, e.message
19
+ end
20
+
21
+ prepend_features(::OpenIDConnect::Discovery::Provider::Config::Resource)
22
+ end
23
+ end
24
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OmniAuth
4
4
  module NitroId
5
- VERSION = "0.1.1"
5
+ VERSION = "1.1.0"
6
6
  end
7
7
  end
@@ -2,3 +2,4 @@
2
2
 
3
3
  require "omniauth/nitro_id/version"
4
4
  require "omniauth/strategies/nitro_id"
5
+ require "omniauth/strategies/tempo_id"
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "omniauth_openid_connect"
4
+ require_relative "../../extensions/discovery"
5
+
6
+ module OmniAuth
7
+ module Strategies
8
+ class BaseStrategy < OmniAuth::Strategies::OpenIDConnect
9
+ def public_key
10
+ @public_key ||= if options.discovery
11
+ config.jwks
12
+ elsif key_or_secret
13
+ key_or_secret
14
+ elsif client_options.jwks_uri
15
+ fetch_key
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def fetch_key
22
+ @fetch_key ||= parse_jwk_key(::OpenIDConnect.http_client.get_content(client_options.jwks_uri))
23
+ end
24
+
25
+ def key_or_secret
26
+ @key_or_secret ||=
27
+ case options.client_signing_alg&.to_sym
28
+ when :HS256, :HS384, :HS512
29
+ client_options.secret
30
+ when :RS256, :RS384, :RS512
31
+ parse_key
32
+ end
33
+ end
34
+
35
+ def encoded_post_logout_redirect_uri
36
+ return unless options.post_logout_redirect_uri
37
+
38
+ query = {
39
+ post_logout_redirect_uri: options.post_logout_redirect_uri,
40
+ }
41
+ query = query.merge({ id_token_hint: params["id_token_hint"] }) if params["id_token_hint"]
42
+
43
+ URI.encode_www_form(query)
44
+ end
45
+
46
+ def parse_key
47
+ if options.client_jwk_signing_key
48
+ parse_jwk_key(options.client_jwk_signing_key)
49
+ elsif options.client_x509_signing_key
50
+ parse_x509_key(options.client_x509_signing_key)
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,18 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "omniauth_openid_connect"
3
+ require_relative "base_strategy"
4
4
 
5
5
  module OmniAuth
6
6
  module Strategies
7
- class NitroId < OmniAuth::Strategies::OpenIDConnect
8
- DEFAULT_STRATEGY_NAME = "nitro_id"
9
- DEFAULT_ISSUER = "https://id.powerhrg.com/"
10
- DEFAULT_HOST = "id.powerhrg.com"
11
-
12
- option :name, DEFAULT_STRATEGY_NAME
7
+ class NitroId < BaseStrategy
8
+ option :name, "nitro_id"
13
9
  option :discovery, true
14
- option :issuer, DEFAULT_ISSUER
15
- option :client_options, host: DEFAULT_HOST
10
+ option :issuer, "https://id.powerhrg.com/"
11
+ option :client_options, host: "id.powerhrg.com"
16
12
  end
17
13
  end
18
14
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_strategy"
4
+
5
+ module OmniAuth
6
+ module Strategies
7
+ class TempoId < BaseStrategy
8
+ option :name, "tempo_id"
9
+ option :discovery, true
10
+ option :issuer, "https://id.streamfinancial.io/"
11
+ option :client_options, host: "id.streamfinancial.io"
12
+ end
13
+ end
14
+ end
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  spec.required_ruby_version = ">= 2.7.0"
15
15
 
16
16
  spec.files = `git ls-files`.split("\n")
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.executables = []
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.add_dependency "omniauth_openid_connect", "~> 0.4.0"
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe OmniAuth::Strategies::TempoId do
6
+ let(:access_token) { instance_double("AccessToken", :options => {}, :[] => "user") }
7
+ let(:custom_client) do
8
+ OmniAuth::Strategies::TempoId.new(:test_app,
9
+ issuer: "https://example-host.com/",
10
+ discovery: false,
11
+ client_options: {
12
+ host: "example-host.com",
13
+ })
14
+ end
15
+
16
+ subject do
17
+ OmniAuth::Strategies::TempoId.new({})
18
+ end
19
+
20
+ before(:each) do
21
+ allow(subject).to receive(:access_token).and_return(access_token)
22
+ end
23
+
24
+ context "options" do
25
+ it "should have correct name" do
26
+ expect(subject.options.name).to eq "tempo_id"
27
+ end
28
+
29
+ it "should have correct host" do
30
+ expect(subject.options.client_options.host).to eq "id.streamfinancial.io"
31
+ end
32
+
33
+ it "should have correct issuer" do
34
+ expect(subject.options.issuer).to eq "https://id.streamfinancial.io/"
35
+ end
36
+
37
+ it "should have the correct discovery setting" do
38
+ expect(subject.options.discovery).to eq true
39
+ end
40
+
41
+ describe "should be overrideable" do
42
+ it "for host" do
43
+ expect(custom_client.options.client_options.host).to eq "example-host.com"
44
+ end
45
+
46
+ it "for issuer" do
47
+ expect(custom_client.options.issuer).to eq "https://example-host.com/"
48
+ end
49
+
50
+ it "for discovery" do
51
+ expect(custom_client.options.discovery).to eq false
52
+ end
53
+ end
54
+ end
55
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-nitro-id
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Greer
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-08 00:00:00.000000000 Z
11
+ date: 2022-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: omniauth_openid_connect
@@ -139,9 +139,7 @@ dependencies:
139
139
  description: NitroID Strategy for OmniAuth.
140
140
  email:
141
141
  - stephen.greer@powerhrg.com
142
- executables:
143
- - console
144
- - setup
142
+ executables: []
145
143
  extensions: []
146
144
  extra_rdoc_files: []
147
145
  files:
@@ -156,22 +154,27 @@ files:
156
154
  - Rakefile
157
155
  - bin/console
158
156
  - bin/setup
157
+ - docs/CHANGELOG.md
159
158
  - docs/README.md
159
+ - lib/extensions/discovery.rb
160
160
  - lib/omniauth-nitro-id.rb
161
161
  - lib/omniauth/nitro_id.rb
162
162
  - lib/omniauth/nitro_id/version.rb
163
+ - lib/omniauth/strategies/base_strategy.rb
163
164
  - lib/omniauth/strategies/nitro_id.rb
165
+ - lib/omniauth/strategies/tempo_id.rb
164
166
  - mkdocs.yml
165
167
  - omniauth-nitro-id.gemspec
166
168
  - portal.yml
167
169
  - renovate.json
168
170
  - spec/omniauth/strategies/nitro_id_spec.rb
171
+ - spec/omniauth/strategies/tempo_id_spec.rb
169
172
  - spec/spec_helper.rb
170
173
  homepage: https://github.com/powerhome/omniauth-nitro-id
171
174
  licenses:
172
175
  - MIT
173
176
  metadata: {}
174
- post_install_message:
177
+ post_install_message:
175
178
  rdoc_options: []
176
179
  require_paths:
177
180
  - lib
@@ -186,8 +189,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
189
  - !ruby/object:Gem::Version
187
190
  version: '0'
188
191
  requirements: []
189
- rubygems_version: 3.3.7
190
- signing_key:
192
+ rubygems_version: 3.1.6
193
+ signing_key:
191
194
  specification_version: 4
192
195
  summary: NitroID Strategy for OmniAuth.
193
196
  test_files: []