authlete 1.39.0 → 1.40.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: 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: []