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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +1 -0
- data/LICENSE +28 -0
- data/README.md +415 -0
- data/lib/strongroom/client.rb +207 -0
- data/lib/strongroom/errors.rb +21 -0
- data/lib/strongroom/net_http_transport.rb +207 -0
- data/lib/strongroom/rails/account.rb +43 -0
- data/lib/strongroom/rails/authentication.rb +114 -0
- data/lib/strongroom/rails/railtie.rb +39 -0
- data/lib/strongroom/rails/registry.rb +66 -0
- data/lib/strongroom/rails/resolver.rb +78 -0
- data/lib/strongroom/rails/version.rb +7 -0
- data/lib/strongroom/rails/warden_strategy.rb +27 -0
- data/lib/strongroom/rails.rb +10 -0
- data/lib/strongroom/session.rb +24 -0
- data/lib/strongroom/token.rb +53 -0
- data/lib/strongroom.rb +8 -0
- metadata +233 -0
|
@@ -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: []
|