authentication-zero 2.16.29 → 2.16.30
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +1 -1
- data/README.md +18 -3
- data/lib/authentication_zero/version.rb +1 -1
- data/lib/generators/authentication/authentication_generator.rb +19 -5
- data/lib/generators/authentication/templates/controllers/html/sessions_controller.rb.tt +0 -1
- data/lib/generators/authentication/templates/lib/account_middleware.rb +30 -0
- data/lib/generators/authentication/templates/migrations/create_accounts_migration.rb.tt +5 -0
- data/lib/generators/authentication/templates/models/account.rb.tt +2 -0
- data/lib/generators/authentication/templates/models/concerns/account_scoped.rb +11 -0
- data/lib/generators/authentication/templates/models/current.rb.tt +3 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d24c61ab47e57ff3f4e61f6871063cc0eddd0bae159bad0a6033c13b6d11d27
|
4
|
+
data.tar.gz: 5603c75ec12c501b2e4de8165c79fa98011a1509ad9728911a71a2ea5f1ed823
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef99f6854ac55716a68f6439c14f33d9ad073c87374a2aa5434377d0fdefda107e6311692362c00e0ca9cb6a9b6b304f10a0ffd33b2373b27af0e3a1d32d8584
|
7
|
+
data.tar.gz: d0d7a47777f70acb660bf9c8865967d6eda63147f764ab15abd3e0f41d119a31ed51553fe2ce132a56c7b3abf0221e82d7f22b4814d54214aae90db332fc71ea
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -45,8 +45,8 @@ Since Authentication Zero generates this code into your application instead of b
|
|
45
45
|
- Social login with omni auth (--omniauthable)
|
46
46
|
- Passwordless authentication (--passwordless)
|
47
47
|
- Send invitations (--invitable)
|
48
|
-
- "Sign-in as" button
|
49
|
-
|
48
|
+
- "Sign-in as" button (--masqueradable)
|
49
|
+
- Multi-tentant application (--tenantable)
|
50
50
|
|
51
51
|
## Generated code
|
52
52
|
|
@@ -59,7 +59,22 @@ Since Authentication Zero generates this code into your application instead of b
|
|
59
59
|
- [log filtering](https://guides.rubyonrails.org/action_controller_overview.html#log-filtering): Parameters 'token' and 'password' are marked [FILTERED] in the log.
|
60
60
|
- [functional tests](https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers): In Rails, testing the various actions of a controller is a form of writing functional tests.
|
61
61
|
- [system testing](https://guides.rubyonrails.org/testing.html#system-testing): System tests allow you to test user interactions with your application, running tests in either a real or a headless browser.
|
62
|
-
|
62
|
+
|
63
|
+
### Sudoable
|
64
|
+
|
65
|
+
Use `before_action :require_sudo` in controllers with sensitive information, it will ask for your password on the first access or after 30 minutes.
|
66
|
+
|
67
|
+
### Tenantable
|
68
|
+
|
69
|
+
Some artifacts are generated in the application, which makes it possible to implement row-level multitenancy applications. You should follow some steps to make it work.
|
70
|
+
|
71
|
+
- Add `account_id` to each scoped table, ex. `rails g migration projects account:references`.
|
72
|
+
- Add `include AccountScoped` to scoped models. It set up the relationship with the account and default scope using the current account.
|
73
|
+
- The `Current.account` is set according to the url ex: `http://mywebsite.com/1234/projects`.
|
74
|
+
- You should customize the sign-in flow yourself, it means:
|
75
|
+
- Add the `account_id` column and scope your user model.
|
76
|
+
- Assign the account when the user is created.
|
77
|
+
- After sign-in redirect to the correct url, including the `account_id`.
|
63
78
|
|
64
79
|
## Development
|
65
80
|
|
@@ -15,6 +15,7 @@ class AuthenticationGenerator < Rails::Generators::Base
|
|
15
15
|
class_option :webauthn, type: :boolean, desc: "Add two factor authentication using a hardware security key"
|
16
16
|
class_option :invitable, type: :boolean, desc: "Add sending invitations"
|
17
17
|
class_option :masqueradable, type: :boolean, desc: "Add sign-in as button functionallity"
|
18
|
+
class_option :tenantable, type: :boolean, desc: "Add artifacts to implement a row-level tenant app"
|
18
19
|
|
19
20
|
source_root File.expand_path("templates", __dir__)
|
20
21
|
|
@@ -53,15 +54,25 @@ class AuthenticationGenerator < Rails::Generators::Base
|
|
53
54
|
application "config.action_mailer.default_url_options = { host: \"localhost\", port: 3000 }", env: "development"
|
54
55
|
application "config.action_mailer.default_url_options = { host: \"localhost\", port: 3000 }", env: "test"
|
55
56
|
environment ratelimit_block, env: "production" if options.ratelimit?
|
57
|
+
|
58
|
+
if options.tenantable?
|
59
|
+
prepend_to_file "config/application.rb", "require_relative \"../lib/account_middleware\"\n"
|
60
|
+
application "config.middleware.use AccountMiddleware"
|
61
|
+
end
|
56
62
|
end
|
57
63
|
|
58
64
|
def create_configuration_files
|
59
|
-
copy_file "config/redis/shared.yml"
|
60
|
-
copy_file "config/initializers/omniauth.rb"
|
61
|
-
copy_file "config/initializers/webauthn.rb"
|
65
|
+
copy_file "config/redis/shared.yml" if redis?
|
66
|
+
copy_file "config/initializers/omniauth.rb" if omniauthable?
|
67
|
+
copy_file "config/initializers/webauthn.rb" if webauthn?
|
68
|
+
end
|
69
|
+
|
70
|
+
def create_lib_files
|
71
|
+
copy_file "lib/account_middleware.rb" if options.tenantable?
|
62
72
|
end
|
63
73
|
|
64
74
|
def create_migrations
|
75
|
+
migration_template "migrations/create_accounts_migration.rb", "#{db_migrate_path}/create_accounts_migration.rb" if options.tenantable?
|
65
76
|
migration_template "migrations/create_users_migration.rb", "#{db_migrate_path}/create_users.rb"
|
66
77
|
migration_template "migrations/create_sessions_migration.rb", "#{db_migrate_path}/create_sessions.rb"
|
67
78
|
migration_template "migrations/create_password_reset_tokens_migration.rb", "#{db_migrate_path}/create_password_reset_tokens.rb"
|
@@ -73,6 +84,9 @@ class AuthenticationGenerator < Rails::Generators::Base
|
|
73
84
|
end
|
74
85
|
|
75
86
|
def create_models
|
87
|
+
copy_file "models/concerns/account_scoped.rb", "app/models/concerns/account_scoped.rb" if options.tenantable?
|
88
|
+
|
89
|
+
template "models/account.rb", "app/models/account.rb" if options.tenantable?
|
76
90
|
template "models/current.rb", "app/models/current.rb"
|
77
91
|
template "models/email_verification_token.rb", "app/models/email_verification_token.rb"
|
78
92
|
template "models/event.rb", "app/models/event.rb" if options.trackable?
|
@@ -218,8 +232,8 @@ class AuthenticationGenerator < Rails::Generators::Base
|
|
218
232
|
directory "test_unit/controllers/#{format}", "test/controllers"
|
219
233
|
directory "test_unit/mailers/", "test/mailers"
|
220
234
|
directory "test_unit/system", "test/system" unless options.api?
|
221
|
-
template
|
222
|
-
template
|
235
|
+
template "test_unit/test_helper.rb", "test/test_helper.rb", force: true
|
236
|
+
template "test_unit/application_system_test_case.rb", "test/application_system_test_case.rb", force: true unless options.api?
|
223
237
|
end
|
224
238
|
|
225
239
|
private
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class AccountMiddleware
|
2
|
+
def initialize(app)
|
3
|
+
@app = app
|
4
|
+
end
|
5
|
+
|
6
|
+
def call(env)
|
7
|
+
request = ActionDispatch::Request.new(env)
|
8
|
+
|
9
|
+
_, account_id, request_path = request.path.split("/", 3)
|
10
|
+
|
11
|
+
if is_number?(account_id)
|
12
|
+
set_current_account(account_id)
|
13
|
+
|
14
|
+
request.script_name = "/#{account_id}"
|
15
|
+
request.path_info = "/#{request_path}"
|
16
|
+
@app.call(request.env)
|
17
|
+
else
|
18
|
+
@app.call(request.env)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
def is_number?(value)
|
24
|
+
Integer(value, exception: false)
|
25
|
+
end
|
26
|
+
|
27
|
+
def set_current_account(account_id)
|
28
|
+
Current.account = Account.find(account_id)
|
29
|
+
end
|
30
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: authentication-zero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.16.
|
4
|
+
version: 2.16.30
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nixon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -95,7 +95,9 @@ files:
|
|
95
95
|
- lib/generators/authentication/templates/erb/user_mailer/password_reset.html.erb.tt
|
96
96
|
- lib/generators/authentication/templates/erb/user_mailer/passwordless.html.erb.tt
|
97
97
|
- lib/generators/authentication/templates/javascript/controllers/application.js
|
98
|
+
- lib/generators/authentication/templates/lib/account_middleware.rb
|
98
99
|
- lib/generators/authentication/templates/mailers/user_mailer.rb.tt
|
100
|
+
- lib/generators/authentication/templates/migrations/create_accounts_migration.rb.tt
|
99
101
|
- lib/generators/authentication/templates/migrations/create_email_verification_tokens_migration.rb.tt
|
100
102
|
- lib/generators/authentication/templates/migrations/create_events_migration.rb.tt
|
101
103
|
- lib/generators/authentication/templates/migrations/create_password_reset_tokens_migration.rb.tt
|
@@ -104,6 +106,8 @@ files:
|
|
104
106
|
- lib/generators/authentication/templates/migrations/create_sessions_migration.rb.tt
|
105
107
|
- lib/generators/authentication/templates/migrations/create_sign_in_tokens_migration.rb.tt
|
106
108
|
- lib/generators/authentication/templates/migrations/create_users_migration.rb.tt
|
109
|
+
- lib/generators/authentication/templates/models/account.rb.tt
|
110
|
+
- lib/generators/authentication/templates/models/concerns/account_scoped.rb
|
107
111
|
- lib/generators/authentication/templates/models/current.rb.tt
|
108
112
|
- lib/generators/authentication/templates/models/email_verification_token.rb.tt
|
109
113
|
- lib/generators/authentication/templates/models/event.rb.tt
|