verikloak-bff 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: 255d2d606e30f92f8c562d91d975be06975a7ba373bd607aa5057e5abcc279a6
4
- data.tar.gz: 6f81b6407f5a1a6e5d307cb65981f48e12c5356ec411ba05d21829681bedb084
3
+ metadata.gz: 8fbec3da2912582f3684c1682fb75b45f9d26c3a1ebf3b7a41d4a5392fbe36c1
4
+ data.tar.gz: d1b5b9f750bd3cdbbf3308f1581c8327c039f87b660cde73a799a83740f818ae
5
5
  SHA512:
6
- metadata.gz: 995250cf2096de074988c0a00d4c2de0ff4b03c798089acfd0f0e0e5e3c0cdc3717da82f4f85be74db68fe40ced3cda5c27ae9f14ae41385a38a24e2eb9c4814
7
- data.tar.gz: 157ddfbc41d48b9903b59f732ef8128a4d27127fee098d4a6e2388ca713ce15a749acad287b4995f87515d70233f74d4f44f7ac9d289de34d548d26bef3e9d17
6
+ metadata.gz: 33655caab83ec29f7159264b660aadb878a61c3ca52c4f23e4256cdb30519384833d7ea8244de5c8252368227ef3999691eb1aa282d907c42e94db69fb39ecb3
7
+ data.tar.gz: d1442646ce08bd0a98ca211f781f0ba623d58d51323ed86492c01cee60086a27c5f27c1fd8d65e4b7ab5ea10c52a9bf6b4942e09c0be80cc8e4d250d6bfb4f48
data/CHANGELOG.md CHANGED
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ---
9
9
 
10
+ ## [0.2.2] - 2025-09-23
11
+
12
+ ### Changed
13
+ - Improved middleware class extraction logic to reduce code duplication while maintaining functionality
14
+
10
15
  ## [0.2.1] - 2025-09-23
11
16
 
12
17
  ### Fixed
@@ -29,6 +29,13 @@ module Verikloak
29
29
  # logger: Rails.logger
30
30
  # )
31
31
  def insert_after_core(stack, logger: nil)
32
+ return false unless auto_insert_enabled?
33
+
34
+ unless core_present?(stack)
35
+ log_skip(logger)
36
+ return false
37
+ end
38
+
32
39
  stack.insert_after(::Verikloak::Middleware, ::Verikloak::BFF::HeaderGuard)
33
40
  true
34
41
  rescue RuntimeError => e
@@ -38,6 +45,79 @@ module Verikloak
38
45
  false
39
46
  end
40
47
 
48
+ # Determine whether automatic insertion is enabled via Verikloak core configuration.
49
+ #
50
+ # When the core gem exposes +auto_insert_bff_header_guard+, respect that flag so
51
+ # consumers can opt out of automatic middleware wiring without triggering warnings.
52
+ # Any failures while reading configuration default to enabling insertion in order
53
+ # to preserve the previous behavior.
54
+ #
55
+ # @return [Boolean]
56
+ def auto_insert_enabled?
57
+ return true unless defined?(::Verikloak)
58
+ return true unless ::Verikloak.respond_to?(:config)
59
+
60
+ config = ::Verikloak.config
61
+ return true unless config
62
+ return config.auto_insert_bff_header_guard if config.respond_to?(:auto_insert_bff_header_guard)
63
+
64
+ true
65
+ rescue StandardError
66
+ true
67
+ end
68
+
69
+ # Detect whether the Verikloak core middleware is already present in the stack.
70
+ #
71
+ # @param stack [#include?, #each, nil]
72
+ # @return [Boolean]
73
+ def core_present?(stack)
74
+ return false unless stack
75
+
76
+ if stack.respond_to?(:include?)
77
+ begin
78
+ return true if stack.include?(::Verikloak::Middleware)
79
+ rescue StandardError
80
+ # Fall back to manual enumeration when include? is unsupported for this stack
81
+ end
82
+ end
83
+
84
+ return false unless stack.respond_to?(:each)
85
+
86
+ stack.each do |middleware|
87
+ return true if middleware_matches_core?(middleware)
88
+ end
89
+
90
+ false
91
+ end
92
+
93
+ # Check whether a middleware entry represents the Verikloak core middleware.
94
+ #
95
+ # @param middleware [Object]
96
+ # @return [Boolean]
97
+ def middleware_matches_core?(middleware)
98
+ candidate = middleware.is_a?(Array) ? middleware.first : middleware
99
+
100
+ klass = extract_middleware_class(candidate)
101
+
102
+ klass == ::Verikloak::Middleware ||
103
+ (klass.is_a?(String) && klass == 'Verikloak::Middleware') ||
104
+ (klass.respond_to?(:name) && klass.name == 'Verikloak::Middleware')
105
+ end
106
+
107
+ # Extracts the class or class-like identifier from a middleware candidate.
108
+ #
109
+ # @param candidate [Object]
110
+ # @return [Class, String, Object]
111
+ def extract_middleware_class(candidate)
112
+ if candidate.respond_to?(:klass)
113
+ candidate.klass
114
+ elsif candidate.respond_to?(:name)
115
+ candidate.name
116
+ else
117
+ candidate
118
+ end
119
+ end
120
+
41
121
  # Checks if the error indicates missing core Verikloak middleware
42
122
  #
43
123
  # Examines a RuntimeError to determine if it was caused by attempting
@@ -75,11 +155,7 @@ module Verikloak
75
155
  [verikloak-bff] Skipping Verikloak::BFF::HeaderGuard insertion because Verikloak::Middleware is not present. Configure verikloak-rails discovery settings and restart once core verification is enabled.
76
156
  MSG
77
157
 
78
- if logger
79
- logger.warn(message)
80
- else
81
- warn(message)
82
- end
158
+ logger ? logger.warn(message) : warn(message)
83
159
  end
84
160
  end
85
161
  end
@@ -5,6 +5,6 @@
5
5
  # @return [String]
6
6
  module Verikloak
7
7
  module BFF
8
- VERSION = '0.2.1'
8
+ VERSION = '0.2.2'
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: verikloak-bff
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
  - taiyaky
@@ -98,7 +98,7 @@ metadata:
98
98
  source_code_uri: https://github.com/taiyaky/verikloak-bff
99
99
  changelog_uri: https://github.com/taiyaky/verikloak-bff/blob/main/CHANGELOG.md
100
100
  bug_tracker_uri: https://github.com/taiyaky/verikloak-bff/issues
101
- documentation_uri: https://rubydoc.info/gems/verikloak-bff/0.2.1
101
+ documentation_uri: https://rubydoc.info/gems/verikloak-bff/0.2.2
102
102
  rubygems_mfa_required: 'true'
103
103
  rdoc_options: []
104
104
  require_paths: