authproto 0.3.0.beta1

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.
Files changed (115) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +1 -0
  3. data/.rubocop.yml +31 -0
  4. data/.tm_properties +1 -0
  5. data/.yardopts +4 -0
  6. data/CHANGELOG.md +52 -0
  7. data/MIT-LICENSE.txt +21 -0
  8. data/README.md +304 -0
  9. data/Rakefile +8 -0
  10. data/SECURITY.md +16 -0
  11. data/examples/confidential_client/.gitignore +5 -0
  12. data/examples/confidential_client/Gemfile +14 -0
  13. data/examples/confidential_client/Gemfile.lock +88 -0
  14. data/examples/confidential_client/README.md +226 -0
  15. data/examples/confidential_client/app.rb +290 -0
  16. data/examples/confidential_client/config/client-metadata.example.json +25 -0
  17. data/examples/confidential_client/config.ru +4 -0
  18. data/examples/confidential_client/public/styles.css +70 -0
  19. data/examples/confidential_client/screenshots/screenshot-1-sign-in.png +0 -0
  20. data/examples/confidential_client/screenshots/screenshot-2-success.png +0 -0
  21. data/examples/confidential_client/scripts/generate_keys.rb +15 -0
  22. data/examples/confidential_client/views/authorized.erb +46 -0
  23. data/examples/confidential_client/views/index.erb +44 -0
  24. data/examples/confidential_client/views/layout.erb +11 -0
  25. data/examples/minisky_console/.gitignore +2 -0
  26. data/examples/minisky_console/Gemfile +12 -0
  27. data/examples/minisky_console/Gemfile.lock +131 -0
  28. data/examples/minisky_console/README.md +112 -0
  29. data/examples/minisky_console/app.rb +50 -0
  30. data/examples/minisky_console/bin/console +6 -0
  31. data/examples/minisky_console/config.ru +5 -0
  32. data/examples/minisky_console/localhost.rb +53 -0
  33. data/examples/minisky_console/production.rb +32 -0
  34. data/lib/authproto/client.rb +583 -0
  35. data/lib/authproto/client_metadata.rb +478 -0
  36. data/lib/authproto/configuration.rb +139 -0
  37. data/lib/authproto/dpop/client.rb +161 -0
  38. data/lib/authproto/dpop/key_manager.rb +223 -0
  39. data/lib/authproto/dpop/nonce_manager.rb +145 -0
  40. data/lib/authproto/dpop/proof_generator.rb +124 -0
  41. data/lib/authproto/dpop/stored_nonce.rb +37 -0
  42. data/lib/authproto/encryption.rb +250 -0
  43. data/lib/authproto/errors.rb +75 -0
  44. data/lib/authproto/http_client.rb +320 -0
  45. data/lib/authproto/insecure_http_client.rb +24 -0
  46. data/lib/authproto/localhost_server.rb +274 -0
  47. data/lib/authproto/minisky.rb +273 -0
  48. data/lib/authproto/par/client.rb +240 -0
  49. data/lib/authproto/par/client_assertion.rb +69 -0
  50. data/lib/authproto/par/request.rb +243 -0
  51. data/lib/authproto/par/response.rb +43 -0
  52. data/lib/authproto/par.rb +48 -0
  53. data/lib/authproto/pkce.rb +125 -0
  54. data/lib/authproto/serialization/base.rb +258 -0
  55. data/lib/authproto/serialization/dpop_key.rb +38 -0
  56. data/lib/authproto/serialization/session.rb +88 -0
  57. data/lib/authproto/serialization/stored_nonce.rb +46 -0
  58. data/lib/authproto/serialization/token_set.rb +54 -0
  59. data/lib/authproto/server_metadata/authorization_server.rb +267 -0
  60. data/lib/authproto/server_metadata/origin_url.rb +71 -0
  61. data/lib/authproto/server_metadata/resource_server.rb +98 -0
  62. data/lib/authproto/server_metadata.rb +28 -0
  63. data/lib/authproto/state/session.rb +168 -0
  64. data/lib/authproto/state/session_manager.rb +162 -0
  65. data/lib/authproto/state/token_set.rb +101 -0
  66. data/lib/authproto/state.rb +61 -0
  67. data/lib/authproto/storage/interface.rb +121 -0
  68. data/lib/authproto/storage/key_builder.rb +76 -0
  69. data/lib/authproto/storage/memory.rb +222 -0
  70. data/lib/authproto/storage/redis.rb +156 -0
  71. data/lib/authproto/storage/sqlite.rb +281 -0
  72. data/lib/authproto/token/refresh.rb +414 -0
  73. data/lib/authproto/version.rb +8 -0
  74. data/lib/authproto.rb +18 -0
  75. data/sig/authproto/client.rbs +43 -0
  76. data/sig/authproto/client_metadata.rbs +113 -0
  77. data/sig/authproto/dependencies.rbs +19 -0
  78. data/sig/authproto/dpop/client.rbs +23 -0
  79. data/sig/authproto/dpop/key_manager.rbs +26 -0
  80. data/sig/authproto/dpop/nonce_manager.rbs +23 -0
  81. data/sig/authproto/dpop/proof_generator.rbs +40 -0
  82. data/sig/authproto/dpop/stored_nonce.rbs +10 -0
  83. data/sig/authproto/encryption.rbs +42 -0
  84. data/sig/authproto/http_client.rbs +45 -0
  85. data/sig/authproto/insecure_http_client.rbs +8 -0
  86. data/sig/authproto/localhost_server.rbs +30 -0
  87. data/sig/authproto/minisky_oauth.rbs +22 -0
  88. data/sig/authproto/par/client.rbs +25 -0
  89. data/sig/authproto/par/client_assertion.rbs +10 -0
  90. data/sig/authproto/par/request.rbs +73 -0
  91. data/sig/authproto/par/response.rbs +17 -0
  92. data/sig/authproto/par.rbs +7 -0
  93. data/sig/authproto/pkce.rbs +24 -0
  94. data/sig/authproto/serialization/base.rbs +36 -0
  95. data/sig/authproto/serialization/dpop_key.rbs +14 -0
  96. data/sig/authproto/serialization/session.rbs +19 -0
  97. data/sig/authproto/serialization/stored_nonce.rbs +14 -0
  98. data/sig/authproto/serialization/token_set.rbs +14 -0
  99. data/sig/authproto/server_metadata/authorization_server.rbs +71 -0
  100. data/sig/authproto/server_metadata/origin_url.rbs +21 -0
  101. data/sig/authproto/server_metadata/resource_server.rbs +27 -0
  102. data/sig/authproto/state/session.rbs +28 -0
  103. data/sig/authproto/state/session_manager.rbs +15 -0
  104. data/sig/authproto/state/token_set.rbs +40 -0
  105. data/sig/authproto/state.rbs +6 -0
  106. data/sig/authproto/storage/interface.rbs +20 -0
  107. data/sig/authproto/storage/key_builder.rbs +16 -0
  108. data/sig/authproto/storage/memory.rbs +22 -0
  109. data/sig/authproto/storage/redis.rbs +19 -0
  110. data/sig/authproto/storage/redis_client.rbs +11 -0
  111. data/sig/authproto/storage/sqlite.rbs +26 -0
  112. data/sig/authproto/token/refresh.rbs +47 -0
  113. data/sig/authproto/version.rbs +3 -0
  114. data/sig/authproto.rbs +54 -0
  115. metadata +200 -0
@@ -0,0 +1,40 @@
1
+ module AuthProto
2
+ module State
3
+ class TokenSet
4
+ @access_token: String
5
+ @refresh_token: String?
6
+ @token_type: String
7
+ @scope: String
8
+ @sub: String
9
+ @expires_at: Time
10
+
11
+ attr_reader access_token: String
12
+ attr_reader refresh_token: String?
13
+ attr_reader token_type: String
14
+ attr_reader scope: String
15
+ attr_reader expires_at: Time
16
+ attr_reader sub: String
17
+
18
+ def initialize: (
19
+ access_token: String,
20
+ token_type: String,
21
+ expires_in: Integer,
22
+ scope: String,
23
+ sub: String,
24
+ ?refresh_token: String?
25
+ ) -> void
26
+
27
+ def renewable?: () -> bool
28
+
29
+ def expired?: (?Numeric buffer) -> bool
30
+
31
+ private
32
+
33
+ def validate_token_type: (String type) -> void
34
+
35
+ def validate_required: (String name, String? value) -> void
36
+
37
+ def validate_expires_in: (Integer expires_in) -> void
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,6 @@
1
+ module AuthProto
2
+ module State
3
+ class SessionError < AuthProto::Error
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,20 @@
1
+ module AuthProto
2
+ module Storage
3
+ class StorageError < AuthProto::Error
4
+ end
5
+ class LockError < StorageError
6
+ end
7
+
8
+ class Interface
9
+ def set: (String key, untyped value, ?ttl: Integer?) -> bool
10
+ def get: (String key) -> untyped
11
+ def delete: (String key) -> bool
12
+ def exists?: (String key) -> bool
13
+ def with_lock: [T] (String key, ?ttl: Integer) { () -> T } -> T
14
+
15
+ # Protected in Ruby; RBS exposes protected methods as public.
16
+ def validate_key: (String key) -> void
17
+ def validate_ttl: (Integer? ttl) -> void
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ module AuthProto
2
+ module Storage
3
+ class KeyBuilder
4
+ NAMESPACE_SEPARATOR: String
5
+ NAMESPACE_PREFIX: String
6
+ def self.session_key: (String id) -> String
7
+ def self.state_key: (String token) -> String
8
+ def self.nonce_key: (String server_url) -> String
9
+ def self.dpop_key: (String client_id) -> String
10
+ def self.lock_key: (String namespace, String id) -> String
11
+
12
+ private
13
+ private def self.build_key: (*String parts) -> String
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,22 @@
1
+ module AuthProto
2
+ module Storage
3
+ class Memory < Interface
4
+ def initialize: () -> void
5
+ def set: (String key, untyped value, ?ttl: Integer?) -> true
6
+ def get: (String key) -> untyped
7
+ def delete: (String key) -> true
8
+ def exists?: (String key) -> bool
9
+ def with_lock: [T] (String key, ?ttl: Integer) { () -> T } -> T
10
+ def clear: () -> void
11
+
12
+ private
13
+ def acquire_lock: (String key, ttl: Integer) -> bool
14
+ def release_lock: (String key) -> true
15
+ def expired?: (String key) -> bool
16
+ def lock_expired?: (String lock_key) -> bool
17
+ def set_expiration: (String key, Integer ttl) -> Integer
18
+ def cleanup_expired: () -> void
19
+ def start_cleanup_thread: () -> Thread
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ module AuthProto
2
+ module Storage
3
+ class Redis < Interface
4
+ class RedisError < StorageError
5
+ end
6
+
7
+ def initialize: (?redis_client: _RedisClient?) -> void
8
+ def set: (String key, untyped value, ?ttl: Integer?) -> true
9
+ def get: (String key) -> String?
10
+ def delete: (String key) -> bool
11
+ def exists?: (String key) -> bool
12
+ def with_lock: [T] (String key, ?ttl: Integer) { () -> T } -> T
13
+
14
+ private
15
+ def acquire_lock: (String key, ttl: Integer) -> String?
16
+ def release_lock: (String key) -> bool
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ module AuthProto
2
+ module Storage
3
+ # Only the Redis client operations required by the optional adapter.
4
+ interface _RedisClient
5
+ def set: (String key, untyped value, ?ex: Integer?, ?nx: bool) -> String?
6
+ def get: (String key) -> String?
7
+ def del: (*String keys) -> Integer
8
+ def exists?: (String key) -> bool
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,26 @@
1
+ module AuthProto
2
+ module Storage
3
+ class SQLite < Interface
4
+ class SQLiteError < StorageError
5
+ end
6
+
7
+ DEFAULT_BUSY_TIMEOUT: Integer
8
+
9
+ def initialize: (path: String, ?busy_timeout: Integer) -> void
10
+ def set: (String key, String | Numeric | nil value, ?ttl: Integer?) -> true
11
+ def get: (String key) -> (String | Numeric | nil)
12
+ def delete: (String key) -> bool
13
+ def exists?: (String key) -> bool
14
+ def with_lock: [T] (String key, ?ttl: Integer) { () -> T } -> T
15
+ def close: () -> void
16
+
17
+ private
18
+ def configure_database: () -> void
19
+ def create_schema: () -> void
20
+ def acquire_lock: (String key, ttl: Integer) -> String?
21
+ def release_lock: (String key, String owner) -> bool
22
+ def delete_expired_value: (String key, Float now) -> void
23
+ def current_time: () -> Float
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,47 @@
1
+ module AuthProto
2
+ module Token
3
+ class Error < AuthProto::Error
4
+ attr_reader token_type: String
5
+ attr_reader error_code: String
6
+ attr_reader retry_possible: bool
7
+ def initialize: (String message, token_type: String, error_code: String, ?retry_possible: bool) -> void
8
+ end
9
+ class ExpiredTokenError < Error
10
+ def initialize: (token_type: String) -> void
11
+ end
12
+ class InvalidTokenError < Error
13
+ def initialize: (token_type: String) -> void
14
+ end
15
+ class RefreshError < Error
16
+ def initialize: (String message, ?retry_possible: bool) -> void
17
+ end
18
+
19
+ class Refresh
20
+ include MonitorMixin
21
+ MAX_RETRIES: Integer
22
+ BASE_DELAY: Integer
23
+ MAX_DELAY: Integer
24
+ attr_reader session: State::Session
25
+ attr_reader dpop_client: DPoP::Client
26
+ attr_reader auth_server: ServerMetadata::AuthorizationServer
27
+ attr_reader client_metadata: ClientMetadata
28
+
29
+ def initialize: (session: State::Session, dpop_client: DPoP::Client, auth_server: ServerMetadata::AuthorizationServer, client_metadata: ClientMetadata) -> void
30
+ def perform: () -> State::TokenSet
31
+
32
+ private
33
+ def with_retries: [T] () { () -> T } -> T
34
+ def calculate_delay: () -> Float
35
+ def request_token_refresh: () -> State::TokenSet
36
+ def make_token_request: (State::Session session) -> http_response
37
+ def requires_dpop_nonce?: (http_response response) -> bool
38
+ def extract_dpop_nonce: (http_response response) -> String
39
+ def add_client_authentication: (Hash[Symbol, untyped] body) -> void
40
+ def handle_refresh_response: (http_response response) -> State::TokenSet
41
+ def process_successful_response: (http_response response) -> State::TokenSet
42
+ def handle_400_response: (http_response response) -> bot
43
+ def handle_rate_limit_response: (http_response response) -> bot
44
+ def validate_refresh_response: (json_object data) -> void
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,3 @@
1
+ module AuthProto
2
+ VERSION: String
3
+ end
data/sig/authproto.rbs ADDED
@@ -0,0 +1,54 @@
1
+ interface _HTTPClient
2
+ def get: (String url, ?Hash[String, String] headers, ?follow_redirects: bool) -> AuthProto::http_response
3
+ def post: (String url, ?body: AuthProto::http_body, ?headers: Hash[String, String]) -> AuthProto::http_response
4
+ end
5
+
6
+ module AuthProto
7
+ type json_object = Hash[String, untyped]
8
+ type http_body = String | Hash[untyped, untyped] | nil
9
+ type http_response = { status: Integer, headers: Hash[String, String], body: String? }
10
+ type token_info = { access_token: String, token_type: String, expires_in: Integer, refresh_token: String?, scope: String }
11
+ type refreshed_tokens = { access_token: String, token_type: String, expires_in: Integer, refresh_token: String?, scope: String, session_id: String }
12
+ type callback_result = { access_token: String, token_type: String, expires_in: Integer, refresh_token: String?, scope: String, session_id: String, did: String }
13
+ type authorization_result = { url: String, session_id: String }
14
+
15
+ class Error < StandardError
16
+ end
17
+
18
+ class OAuthError < Error
19
+ attr_reader error_code: String
20
+ def initialize: (String message, String error_code) -> void
21
+ end
22
+
23
+ class InvalidClientMetadata < OAuthError
24
+ def initialize: (String message) -> void
25
+ end
26
+
27
+ class InvalidAuthorizationServer < OAuthError
28
+ def initialize: (String message) -> void
29
+ end
30
+
31
+ class ConfigurationError < Error
32
+ end
33
+
34
+ class Configuration
35
+ attr_accessor default_token_lifetime: Integer
36
+ attr_accessor dpop_nonce_lifetime: Integer
37
+ attr_accessor encryption: untyped
38
+ attr_accessor http_client: _HTTPClient?
39
+ attr_accessor logger: Logger
40
+ attr_accessor storage: Storage::Interface
41
+ def initialize: () -> void
42
+ def validate: () -> true
43
+
44
+ private
45
+ def validate_storage: () -> void
46
+ def validate_http_client: () -> void
47
+ end
48
+
49
+ attr_writer self.configuration: Configuration
50
+ def self.configuration: () -> Configuration
51
+ def self.configure: () { (Configuration) -> untyped } -> Configuration
52
+ def self.storage: () -> Storage::Interface
53
+ def self.reset_configuration: () -> Configuration
54
+ end
metadata ADDED
@@ -0,0 +1,200 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: authproto
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0.beta1
5
+ platform: ruby
6
+ authors:
7
+ - Josh Huckabee
8
+ - Kuba Suder
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 1980-01-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jose
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: jwt
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: didkit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.5.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.5.0
55
+ description: A Ruby library for implementing AT Protocol OAuth flows, including DPoP,
56
+ PAR, and dynamic client registration. Supports both client and server-side implementations
57
+ with comprehensive security features.
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".rspec"
63
+ - ".rubocop.yml"
64
+ - ".tm_properties"
65
+ - ".yardopts"
66
+ - CHANGELOG.md
67
+ - MIT-LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - SECURITY.md
71
+ - examples/confidential_client/.gitignore
72
+ - examples/confidential_client/Gemfile
73
+ - examples/confidential_client/Gemfile.lock
74
+ - examples/confidential_client/README.md
75
+ - examples/confidential_client/app.rb
76
+ - examples/confidential_client/config.ru
77
+ - examples/confidential_client/config/client-metadata.example.json
78
+ - examples/confidential_client/public/styles.css
79
+ - examples/confidential_client/screenshots/screenshot-1-sign-in.png
80
+ - examples/confidential_client/screenshots/screenshot-2-success.png
81
+ - examples/confidential_client/scripts/generate_keys.rb
82
+ - examples/confidential_client/views/authorized.erb
83
+ - examples/confidential_client/views/index.erb
84
+ - examples/confidential_client/views/layout.erb
85
+ - examples/minisky_console/.gitignore
86
+ - examples/minisky_console/Gemfile
87
+ - examples/minisky_console/Gemfile.lock
88
+ - examples/minisky_console/README.md
89
+ - examples/minisky_console/app.rb
90
+ - examples/minisky_console/bin/console
91
+ - examples/minisky_console/config.ru
92
+ - examples/minisky_console/localhost.rb
93
+ - examples/minisky_console/production.rb
94
+ - lib/authproto.rb
95
+ - lib/authproto/client.rb
96
+ - lib/authproto/client_metadata.rb
97
+ - lib/authproto/configuration.rb
98
+ - lib/authproto/dpop/client.rb
99
+ - lib/authproto/dpop/key_manager.rb
100
+ - lib/authproto/dpop/nonce_manager.rb
101
+ - lib/authproto/dpop/proof_generator.rb
102
+ - lib/authproto/dpop/stored_nonce.rb
103
+ - lib/authproto/encryption.rb
104
+ - lib/authproto/errors.rb
105
+ - lib/authproto/http_client.rb
106
+ - lib/authproto/insecure_http_client.rb
107
+ - lib/authproto/localhost_server.rb
108
+ - lib/authproto/minisky.rb
109
+ - lib/authproto/par.rb
110
+ - lib/authproto/par/client.rb
111
+ - lib/authproto/par/client_assertion.rb
112
+ - lib/authproto/par/request.rb
113
+ - lib/authproto/par/response.rb
114
+ - lib/authproto/pkce.rb
115
+ - lib/authproto/serialization/base.rb
116
+ - lib/authproto/serialization/dpop_key.rb
117
+ - lib/authproto/serialization/session.rb
118
+ - lib/authproto/serialization/stored_nonce.rb
119
+ - lib/authproto/serialization/token_set.rb
120
+ - lib/authproto/server_metadata.rb
121
+ - lib/authproto/server_metadata/authorization_server.rb
122
+ - lib/authproto/server_metadata/origin_url.rb
123
+ - lib/authproto/server_metadata/resource_server.rb
124
+ - lib/authproto/state.rb
125
+ - lib/authproto/state/session.rb
126
+ - lib/authproto/state/session_manager.rb
127
+ - lib/authproto/state/token_set.rb
128
+ - lib/authproto/storage/interface.rb
129
+ - lib/authproto/storage/key_builder.rb
130
+ - lib/authproto/storage/memory.rb
131
+ - lib/authproto/storage/redis.rb
132
+ - lib/authproto/storage/sqlite.rb
133
+ - lib/authproto/token/refresh.rb
134
+ - lib/authproto/version.rb
135
+ - sig/authproto.rbs
136
+ - sig/authproto/client.rbs
137
+ - sig/authproto/client_metadata.rbs
138
+ - sig/authproto/dependencies.rbs
139
+ - sig/authproto/dpop/client.rbs
140
+ - sig/authproto/dpop/key_manager.rbs
141
+ - sig/authproto/dpop/nonce_manager.rbs
142
+ - sig/authproto/dpop/proof_generator.rbs
143
+ - sig/authproto/dpop/stored_nonce.rbs
144
+ - sig/authproto/encryption.rbs
145
+ - sig/authproto/http_client.rbs
146
+ - sig/authproto/insecure_http_client.rbs
147
+ - sig/authproto/localhost_server.rbs
148
+ - sig/authproto/minisky_oauth.rbs
149
+ - sig/authproto/par.rbs
150
+ - sig/authproto/par/client.rbs
151
+ - sig/authproto/par/client_assertion.rbs
152
+ - sig/authproto/par/request.rbs
153
+ - sig/authproto/par/response.rbs
154
+ - sig/authproto/pkce.rbs
155
+ - sig/authproto/serialization/base.rbs
156
+ - sig/authproto/serialization/dpop_key.rbs
157
+ - sig/authproto/serialization/session.rbs
158
+ - sig/authproto/serialization/stored_nonce.rbs
159
+ - sig/authproto/serialization/token_set.rbs
160
+ - sig/authproto/server_metadata/authorization_server.rbs
161
+ - sig/authproto/server_metadata/origin_url.rbs
162
+ - sig/authproto/server_metadata/resource_server.rbs
163
+ - sig/authproto/state.rbs
164
+ - sig/authproto/state/session.rbs
165
+ - sig/authproto/state/session_manager.rbs
166
+ - sig/authproto/state/token_set.rbs
167
+ - sig/authproto/storage/interface.rbs
168
+ - sig/authproto/storage/key_builder.rbs
169
+ - sig/authproto/storage/memory.rbs
170
+ - sig/authproto/storage/redis.rbs
171
+ - sig/authproto/storage/redis_client.rbs
172
+ - sig/authproto/storage/sqlite.rbs
173
+ - sig/authproto/token/refresh.rbs
174
+ - sig/authproto/version.rbs
175
+ homepage: https://github.com/mackuba/authproto
176
+ licenses:
177
+ - MIT
178
+ metadata:
179
+ homepage_uri: https://github.com/mackuba/authproto
180
+ source_code_uri: https://github.com/mackuba/authproto
181
+ changelog_uri: https://github.com/mackuba/authproto/blob/main/CHANGELOG.md
182
+ rubygems_mfa_required: 'true'
183
+ rdoc_options: []
184
+ require_paths:
185
+ - lib
186
+ required_ruby_version: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: '3.3'
191
+ required_rubygems_version: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ requirements: []
197
+ rubygems_version: 4.0.23
198
+ specification_version: 4
199
+ summary: Ruby implementation of the AT Protocol OAuth specification
200
+ test_files: []