authlete 1.39.0 → 1.40.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: ad3294911fdac07bffbcfba52de0394b6c9c54238aa5de3ad04aa527f80fb917
4
- data.tar.gz: 52176abfc6daf0fea4516e0da863df86f32a56b392cbf46f2af7d973af8d09a8
3
+ metadata.gz: 74a860b721b7613f2db6d38a29c773099a775a6a2db4cad9aee401acfc5c3720
4
+ data.tar.gz: a9f1de04dc44a566132358b9f90c5c72db7e8e05891c9bb8b48f32c5394c47a2
5
5
  SHA512:
6
- metadata.gz: 29e9942e712d2886dd590b47d5eed7581b3b998eae80a2c333c5c5aa5757e53d9c72eab6ef46f8cbd87e4823de32d9619fc8ee514cb03fb6351f8d61d8270f5d
7
- data.tar.gz: e67b9f685e1d4da518846dcac25fb5bfeea283efbc97e1a3b07f7059e6971f66f8fe7cb6ac62940d49882f7da148af5594a25fa61154569597fcd7eea8a48428
6
+ metadata.gz: 0cdcaef0259445a1ba5067fbc5fd7e3f97cbf8f1ee01c5b7b346ce379e3cbe11447be47893e5b7d39cebd0feacc8d108df2fe7aede2cff8410de3831b8300bd6
7
+ data.tar.gz: 19d66a165c4d2cebdc19dcc35f2c8dcf72f964b5a5a5bd15fdf195106290d495e728608bd69658cb4e4820c9b87243c1fe56b95aa8d10cdb5e6b06d087baf06d
data/README.md CHANGED
@@ -6,6 +6,44 @@ authlete-ruby-gem
6
6
  Ruby library for [Authlete Web APIs](https://docs.authlete.com/).
7
7
 
8
8
 
9
+ # REST Client Logging Configuration
10
+
11
+ The library provides control over `rest-client` logging behavior through `Authlete::LoggingLevel`:
12
+
13
+ - `DEFAULT` - Respects the logger set in `RestClient.log` (default behavior)
14
+ - `SENSITIVE` - Logs all information but redacts sensitive data (tokens, credentials)
15
+ - `NONE` - Disables all logging, useful for handling sensitive PII data
16
+
17
+ Example configuration:
18
+
19
+ ```ruby
20
+ # Default behavior (uses RestClient.log as is)
21
+ config = {
22
+ host: 'https://api.authlete.com',
23
+ service_api_key: 'YOUR_KEY',
24
+ service_api_secret: 'YOUR_SECRET',
25
+ rest_client_logging_level: Authlete::LoggingLevel::DEFAULT
26
+ }
27
+
28
+ # Redact sensitive data
29
+ config = {
30
+ host: 'https://api.authlete.com',
31
+ service_api_key: 'YOUR_KEY',
32
+ service_api_secret: 'YOUR_SECRET',
33
+ rest_client_logging_level: Authlete::LoggingLevel::SENSITIVE
34
+ }
35
+
36
+ # Disable all RestClient logging
37
+ config = {
38
+ host: 'https://api.authlete.com',
39
+ service_api_key: 'YOUR_KEY',
40
+ service_api_secret: 'YOUR_SECRET',
41
+ rest_client_logging_level: Authlete::LoggingLevel::NONE
42
+ }
43
+
44
+ api_client = Authlete::Api.new(config)
45
+ ```
46
+
9
47
  # License
10
48
 
11
49
  Apache License, Version 2.0
data/lib/authlete/api.rb CHANGED
@@ -40,6 +40,23 @@ module Authlete
40
40
  @service_api_key = config[:service_api_key]
41
41
  @service_api_secret = config[:service_api_secret]
42
42
  @extra_headers = nil
43
+
44
+ configure_logging(config[:rest_client_logging_level])
45
+ end
46
+
47
+ private
48
+
49
+ def configure_logging(level)
50
+ return unless RestClient.log
51
+
52
+ case level
53
+ when LoggingLevel::SENSITIVE
54
+ RestClient.log = Authlete::SensitiveLogger.new(RestClient.log)
55
+ when LoggingLevel::NONE
56
+ RestClient.log = Authlete::NullLogger.new
57
+ when LoggingLevel::DEFAULT, nil
58
+ # Keep original logger (default behavior)
59
+ end
43
60
  end
44
61
 
45
62
  def call_api(method, path, content_type, payload, user, password)
@@ -0,0 +1,94 @@
1
+ module Authlete
2
+ module LoggingLevel
3
+ DEFAULT = :default # Original logging behavior
4
+ SENSITIVE = :sensitive # Redact sensitive data
5
+ NONE = :none # No logging
6
+ end
7
+
8
+ class NullLogger
9
+ def <<(msg)
10
+ # NOOP
11
+ end
12
+ end
13
+
14
+ class SensitiveLogger
15
+ SENSITIVE_FIELDS = [
16
+ # OAuth/OIDC related
17
+ 'client_secret',
18
+ 'access_token',
19
+ 'refresh_token',
20
+ 'authorization_code',
21
+ 'id_token',
22
+ 'code',
23
+ # Device flow
24
+ 'user_code',
25
+ 'client_notification_token',
26
+
27
+ # Authlete Credentials
28
+ 'service_api_key',
29
+ 'service_api_secret',
30
+ 'service_owner_api_key',
31
+ 'service_owner_api_secret',
32
+ 'sns_credentials',
33
+ 'developer_sns_credentials',
34
+ 'ticket',
35
+ 'subject',
36
+
37
+ # Authentication & Authorization
38
+ 'password',
39
+ 'token',
40
+ 'authorization',
41
+ 'client_certificate',
42
+ 'client_certificate_path',
43
+
44
+ # JWT/Crypto/Certificate related
45
+ 'jwks',
46
+ 'federation_jwks',
47
+ 'client_secret_expires_at',
48
+ 'trusted_root_certificates',
49
+ 'encryption_key_id',
50
+ 'signature_key_id',
51
+ 'access_token_signature_key_id',
52
+ 'refresh_token_signature_key_id',
53
+ 'id_token_signature_key_id'
54
+ ].freeze
55
+
56
+ SENSITIVE_PATTERNS = SENSITIVE_FIELDS.flat_map do |field|
57
+ [
58
+ # JSON format
59
+ /("#{field}"\s*:\s*)"[^"]*"/,
60
+ # URL-encoded format
61
+ /#{field}=([^&\s]+)/
62
+ ]
63
+ end.freeze
64
+
65
+ REDACTION_MARK = '***** REDACTED *****'
66
+
67
+ def initialize(original_logger)
68
+ @original_logger = original_logger
69
+ end
70
+
71
+ def <<(msg)
72
+ redacted_msg = redact_sensitive_data(msg)
73
+ @original_logger << redacted_msg
74
+ end
75
+
76
+ private
77
+
78
+ def redact_sensitive_data(msg)
79
+ return msg unless msg.is_a?(String)
80
+
81
+ redacted = msg.dup
82
+ SENSITIVE_PATTERNS.each do |pattern|
83
+ if pattern.to_s.include?('"')
84
+ # JSON format
85
+ redacted.gsub!(pattern, "\\1#{REDACTION_MARK.inspect}")
86
+ else
87
+ # URL-encoded format
88
+ redacted.gsub!(pattern) { "#{$~[0].split('=')[0]}=#{REDACTION_MARK}" }
89
+ end
90
+ end
91
+ redacted
92
+ end
93
+ end
94
+ end
@@ -16,5 +16,5 @@
16
16
 
17
17
 
18
18
  module Authlete
19
- VERSION = "1.39.0"
19
+ VERSION = "1.40.0"
20
20
  end
data/lib/authlete.rb CHANGED
@@ -24,6 +24,9 @@ module Authlete
24
24
  autoload :Exception, 'authlete/exception'
25
25
  autoload :ParamInitializer, 'authlete/model/param-initializer'
26
26
  autoload :Utility, 'authlete/utility'
27
+ autoload :LoggingLevel, 'authlete/logging'
28
+ autoload :NullLogger, 'authlete/logging'
29
+ autoload :SensitiveLogger, 'authlete/logging'
27
30
 
28
31
  module Model
29
32
  autoload :Base, 'authlete/model/base'
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authlete
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.39.0
4
+ version: 1.40.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takahiko Kawasaki
8
8
  - Hideki Ikeda
9
9
  - Seth Wright
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2025-01-07 00:00:00.000000000 Z
13
+ date: 2025-02-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client
@@ -72,6 +72,7 @@ files:
72
72
  - lib/authlete/api.rb
73
73
  - lib/authlete/authentication-server.rb
74
74
  - lib/authlete/exception.rb
75
+ - lib/authlete/logging.rb
75
76
  - lib/authlete/model/base.rb
76
77
  - lib/authlete/model/client-extension.rb
77
78
  - lib/authlete/model/client.rb
@@ -168,7 +169,7 @@ homepage: https://www.authlete.com/
168
169
  licenses:
169
170
  - Apache License, Version 2.0
170
171
  metadata: {}
171
- post_install_message:
172
+ post_install_message:
172
173
  rdoc_options: []
173
174
  require_paths:
174
175
  - lib
@@ -183,8 +184,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
183
184
  - !ruby/object:Gem::Version
184
185
  version: '0'
185
186
  requirements: []
186
- rubygems_version: 3.0.3.1
187
- signing_key:
187
+ rubygems_version: 3.4.10
188
+ signing_key:
188
189
  specification_version: 4
189
190
  summary: A library for Authlete Web APIs
190
191
  test_files: []