securial 0.5.0 → 0.7.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 +4 -4
- data/README.md +17 -26
- data/app/controllers/concerns/securial/identity.rb +4 -12
- data/app/controllers/securial/sessions_controller.rb +20 -8
- data/app/controllers/securial/status_controller.rb +1 -1
- data/app/models/concerns/securial/password_resettable.rb +15 -0
- data/app/models/securial/role.rb +1 -1
- data/app/models/securial/session.rb +2 -2
- data/app/models/securial/user.rb +3 -3
- data/app/views/securial/users/_securial_user.json.jbuilder +2 -0
- data/config/routes.rb +0 -1
- data/db/migrate/20250517155521_create_securial_users.rb +10 -7
- data/lib/generators/securial/install/templates/securial_initializer.erb +44 -14
- data/lib/generators/securial/install/views_generator.rb +25 -0
- data/lib/securial/auth/auth_encoder.rb +53 -0
- data/lib/securial/auth/errors.rb +15 -0
- data/lib/securial/auth/session_creator.rb +21 -0
- data/lib/securial/auth.rb +10 -0
- data/lib/securial/config/configuration.rb +50 -30
- data/lib/securial/config/errors.rb +2 -1
- data/lib/securial/config/validation.rb +96 -26
- data/lib/securial/config.rb +10 -0
- data/lib/securial/engine.rb +50 -35
- data/lib/securial/helpers/normalizing_helper.rb +11 -9
- data/lib/securial/helpers/regex_helper.rb +12 -10
- data/lib/securial/helpers.rb +9 -0
- data/lib/securial/inspectors/route_inspector.rb +11 -11
- data/lib/securial/inspectors.rb +8 -0
- data/lib/securial/key_transformer.rb +32 -0
- data/lib/securial/logger/broadcaster.rb +48 -0
- data/lib/securial/logger/builder.rb +60 -0
- data/lib/securial/logger/colors.rb +14 -0
- data/lib/securial/logger.rb +4 -67
- data/lib/securial/middlewares/request_logger_tag.rb +19 -0
- data/lib/securial/middlewares/transform_request_keys.rb +33 -0
- data/lib/securial/middlewares/transform_response_keys.rb +52 -0
- data/lib/securial/middlewares.rb +10 -0
- data/lib/securial/security/request_rate_limiter.rb +68 -0
- data/lib/securial/security.rb +8 -0
- data/lib/securial/version.rb +1 -1
- data/lib/securial/version_checker.rb +31 -0
- data/lib/securial.rb +12 -1
- metadata +38 -153
- data/db/migrate/20250524210207_add_password_reset_fields_to_securial_users.rb +0 -6
- data/lib/securial/config/_index.rb +0 -3
- data/lib/securial/helpers/_index.rb +0 -2
- data/lib/securial/inspectors/_index.rb +0 -1
- data/lib/securial/middleware/request_logger_tag.rb +0 -18
- data/lib/securial/sessions/_index.rb +0 -2
- data/lib/securial/sessions/errors.rb +0 -15
- data/lib/securial/sessions/session_encoder.rb +0 -56
@@ -1 +0,0 @@
|
|
1
|
-
require_relative "route_inspector"
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Securial
|
2
|
-
module Middleware
|
3
|
-
class RequestLoggerTag
|
4
|
-
def initialize(app)
|
5
|
-
@app = app
|
6
|
-
end
|
7
|
-
|
8
|
-
def call(env)
|
9
|
-
request = ActionDispatch::Request.new(env)
|
10
|
-
request_id = request.request_id || SecureRandom.uuid
|
11
|
-
|
12
|
-
Securial::ENGINE_LOGGER.tagged("Securial", "RequestID:#{request_id}") do
|
13
|
-
@app.call(env)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module Securial
|
2
|
-
module Sessions
|
3
|
-
module Errors
|
4
|
-
class BaseSessionError < StandardError
|
5
|
-
def backtrace; []; end
|
6
|
-
end
|
7
|
-
|
8
|
-
class SessionEncodeError < BaseSessionError; end
|
9
|
-
class SessionDecodeError < BaseSessionError; end
|
10
|
-
|
11
|
-
class SessionRevokedError < BaseSessionError; end
|
12
|
-
class SessionExpiredError < BaseSessionError; end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
module Securial
|
2
|
-
module Sessions
|
3
|
-
module SessionEncoder
|
4
|
-
class << self
|
5
|
-
def encode(session)
|
6
|
-
return nil unless session && session.class == Securial::Session
|
7
|
-
|
8
|
-
base_payload = {
|
9
|
-
jti: session.id,
|
10
|
-
exp: expiry_duration.from_now.to_i,
|
11
|
-
sub: "session-access-token",
|
12
|
-
refresh_count: session.refresh_count,
|
13
|
-
}
|
14
|
-
|
15
|
-
session_payload = {
|
16
|
-
ip: session.ip_address,
|
17
|
-
agent: session.user_agent,
|
18
|
-
}
|
19
|
-
|
20
|
-
payload = base_payload.merge(session_payload)
|
21
|
-
begin
|
22
|
-
JWT.encode(payload, secret, algorithm, { kid: "hmac" })
|
23
|
-
rescue JWT::EncodeError => e
|
24
|
-
raise Errors::SessionEncodeError, "Failed to encode session: #{e.message}"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def decode(token)
|
29
|
-
begin
|
30
|
-
decoded = JWT.decode(token, secret, true, { algorithm: algorithm, verify_jti: true, iss: "securial" })
|
31
|
-
rescue JWT::DecodeError => e
|
32
|
-
raise Securial::Sessions::Errors::SessionDecodeError, "Failed to decode session token: #{e.message}"
|
33
|
-
end
|
34
|
-
decoded.first
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def secret
|
40
|
-
# Config::Validation.validate_session_secret!(Securial.configuration)
|
41
|
-
Securial.configuration.session_secret
|
42
|
-
end
|
43
|
-
|
44
|
-
def algorithm
|
45
|
-
# Config::Validation.validate_session_algorithm!(Securial.configuration)
|
46
|
-
Securial.configuration.session_algorithm.to_s.upcase
|
47
|
-
end
|
48
|
-
|
49
|
-
def expiry_duration
|
50
|
-
# Config::Validation.validate_session_expiry_duration!(Securial.configuration)
|
51
|
-
Securial.configuration.session_expiration_duration
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|