strongroom-rails 0.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.
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "base64"
4
+
5
+ module Strongroom
6
+ class Token
7
+ def initialize(value)
8
+ unless value.is_a?(String) && value.bytesize == 47 && value.match?(/\Asr1_[A-Za-z0-9_-]{43}\z/)
9
+ raise Unauthorized, "invalid session credential", cause: nil
10
+ end
11
+ encoded = value.delete_prefix("sr1_")
12
+ decoded = Base64.urlsafe_decode64(encoded)
13
+ unless decoded.bytesize == 32 && Base64.urlsafe_encode64(decoded, padding: false) == encoded
14
+ raise Unauthorized, "invalid session credential", cause: nil
15
+ end
16
+ @wire = value.dup.freeze
17
+ freeze
18
+ rescue ArgumentError
19
+ raise Unauthorized, "invalid session credential", cause: nil
20
+ end
21
+
22
+ def reveal = @wire
23
+ def inspect = "#<Strongroom::Token [FILTERED]>"
24
+ alias to_s inspect
25
+ def as_json(*) = "[FILTERED]"
26
+ def pretty_print(printer) = printer.text(inspect)
27
+
28
+ def encode_with(coder)
29
+ coder.map = {"wire" => "[FILTERED]"}
30
+ end
31
+
32
+ def init_with(_coder)
33
+ raise TypeError, "session tokens must not be deserialized"
34
+ end
35
+
36
+ def _dump(_depth)
37
+ raise TypeError, "session tokens must not be serialized"
38
+ end
39
+
40
+ def self.coerce(value)
41
+ value.is_a?(self) ? value : new(value)
42
+ end
43
+
44
+ def self.from_authorization(value)
45
+ return nil unless value.is_a?(String) && value.bytesize <= 128
46
+ match = /\A[ \t]*([A-Za-z]+) ([A-Za-z0-9_-]+)[ \t]*\z/.match(value)
47
+ return nil unless match && match[1].casecmp?("bearer")
48
+ new(match[2])
49
+ rescue Unauthorized, ArgumentError
50
+ nil
51
+ end
52
+ end
53
+ end
data/lib/strongroom.rb ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "strongroom/rails/version"
4
+ require_relative "strongroom/errors"
5
+ require_relative "strongroom/token"
6
+ require_relative "strongroom/session"
7
+ require_relative "strongroom/net_http_transport"
8
+ require_relative "strongroom/client"
metadata ADDED
@@ -0,0 +1,233 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: strongroom-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Seuros
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: actionpack
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '8.1'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '9'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '8.1'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '9'
32
+ - !ruby/object:Gem::Dependency
33
+ name: railties
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '8.1'
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: '9'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '8.1'
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '9'
52
+ - !ruby/object:Gem::Dependency
53
+ name: base64
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0.2'
59
+ type: :runtime
60
+ prerelease: false
61
+ version_requirements: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0.2'
66
+ - !ruby/object:Gem::Dependency
67
+ name: json
68
+ requirement: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '2.7'
73
+ type: :runtime
74
+ prerelease: false
75
+ version_requirements: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '2.7'
80
+ - !ruby/object:Gem::Dependency
81
+ name: net-http
82
+ requirement: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0.4'
87
+ type: :runtime
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0.4'
94
+ - !ruby/object:Gem::Dependency
95
+ name: minitest
96
+ requirement: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '6.0'
101
+ type: :development
102
+ prerelease: false
103
+ version_requirements: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '6.0'
108
+ - !ruby/object:Gem::Dependency
109
+ name: padded_cell
110
+ requirement: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: 0.2.0
115
+ type: :development
116
+ prerelease: false
117
+ version_requirements: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: 0.2.0
122
+ - !ruby/object:Gem::Dependency
123
+ name: pg
124
+ requirement: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: '1.6'
129
+ type: :development
130
+ prerelease: false
131
+ version_requirements: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: '1.6'
136
+ - !ruby/object:Gem::Dependency
137
+ name: rack-test
138
+ requirement: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: '2.1'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '2.1'
150
+ - !ruby/object:Gem::Dependency
151
+ name: rake
152
+ requirement: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - "~>"
155
+ - !ruby/object:Gem::Version
156
+ version: '13.0'
157
+ type: :development
158
+ prerelease: false
159
+ version_requirements: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - "~>"
162
+ - !ruby/object:Gem::Version
163
+ version: '13.0'
164
+ - !ruby/object:Gem::Dependency
165
+ name: warden
166
+ requirement: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - "~>"
169
+ - !ruby/object:Gem::Version
170
+ version: '1.2'
171
+ type: :development
172
+ prerelease: false
173
+ version_requirements: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - "~>"
176
+ - !ruby/object:Gem::Version
177
+ version: '1.2'
178
+ description: 'Rails adapter for strongroomd, a Postgres-first authentication kernel
179
+ that acts as the application''s security coprocessor: Rails never sees password
180
+ hashes or session secrets. Ships a strict HTTP client, encrypted-cookie login, rotation
181
+ and logout helpers for ActionController::Base and ActionController::API, a request-level
182
+ resolver and an optional Warden strategy. The daemon ships separately, as the strongroomd
183
+ gem or crate; this gem only speaks to it over HTTP.'
184
+ email:
185
+ - terminale@gmail.com
186
+ executables: []
187
+ extensions: []
188
+ extra_rdoc_files: []
189
+ files:
190
+ - CHANGELOG.md
191
+ - LICENSE
192
+ - README.md
193
+ - lib/strongroom.rb
194
+ - lib/strongroom/client.rb
195
+ - lib/strongroom/errors.rb
196
+ - lib/strongroom/net_http_transport.rb
197
+ - lib/strongroom/rails.rb
198
+ - lib/strongroom/rails/account.rb
199
+ - lib/strongroom/rails/authentication.rb
200
+ - lib/strongroom/rails/railtie.rb
201
+ - lib/strongroom/rails/registry.rb
202
+ - lib/strongroom/rails/resolver.rb
203
+ - lib/strongroom/rails/version.rb
204
+ - lib/strongroom/rails/warden_strategy.rb
205
+ - lib/strongroom/session.rb
206
+ - lib/strongroom/token.rb
207
+ homepage: https://github.com/seuros/strongroom
208
+ licenses:
209
+ - BSD-3-Clause
210
+ metadata:
211
+ homepage_uri: https://github.com/seuros/strongroom
212
+ source_code_uri: https://github.com/seuros/strongroom/tree/master/gems/strongroom-rails
213
+ changelog_uri: https://github.com/seuros/strongroom/blob/master/gems/strongroom-rails/CHANGELOG.md
214
+ bug_tracker_uri: https://github.com/seuros/strongroom/issues
215
+ rubygems_mfa_required: 'true'
216
+ rdoc_options: []
217
+ require_paths:
218
+ - lib
219
+ required_ruby_version: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - ">="
222
+ - !ruby/object:Gem::Version
223
+ version: '4.0'
224
+ required_rubygems_version: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: '0'
229
+ requirements: []
230
+ rubygems_version: 4.0.20
231
+ specification_version: 4
232
+ summary: Explicit Rails login/session adapter for the Strongroom kernel
233
+ test_files: []