authentication-zero 2.16.31 → 2.16.33

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8bff3de0a9b6c8fb09557b580d1f7bc3b9be99f71aadeb4e84d080be2ae022da
4
- data.tar.gz: f014555758b4bc5d8c5c4f3b7a7eeb3aef9790ef5d0726b56d20ed59e7c2a32c
3
+ metadata.gz: e0192b708d0a77022c0ebcca72d6a67cddf4037e5412b78692b14871d8055dc3
4
+ data.tar.gz: beadfc9974865abbc3a64783d863e7ecffd9ed61d8134cb3db219ef9ab73b4a9
5
5
  SHA512:
6
- metadata.gz: d48574ced8a36ac0e2ddb342176558b084f5bf892cf2cce8d8d96ee7183d59850bd170154c76cd6b1092a52bf6184b85353b592c9c395e5139a3536ac5e38468
7
- data.tar.gz: 83079c90bdee50d97ffb2f9c89dad298491363568784792ca1012683ccca5f4f3203e0eb424a92f61c8c18ffc7783bc252f5c93338fa931fbefc2015682bc323
6
+ metadata.gz: c1b8a91979fa37f3486241f6ff40b726809bc196433bc67d3cb509b4adfc2afaf73afc4037a931237d6d0757d9f05a9b7a0e32e82a99d89baedd2ffb808d8b74
7
+ data.tar.gz: 5c542b08d8a748b7b041849eb3bda327439ec9c07dd53d4eb62bafb4caf727f480b2a9c2e4001b6b26e7bb58d1a18e6deea3a2a7770b1d5f44cbd36ccf4b8913
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- authentication-zero (2.16.31)
4
+ authentication-zero (2.16.33)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -68,16 +68,13 @@ Use `before_action :require_sudo` in controllers with sensitive information, it
68
68
 
69
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
70
 
71
- - Add `account_id` to each scoped table using `rails g migration add_account_to_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 authentication flow yourself, it means:
75
- - Add `account_id` to your users table using `rails g migration add_account_to_users account:references`
76
- - Add `include AccountScoped` to your user model
77
- - Use `Session.joins(:user).find_by_id` on `ApplicationController#authenticate`
78
- - Use `redirect_to "/#{user.account_id}"` after sign-in.
79
- - Override `Current#user=` to also set the account using `super; self.account = user.account`
80
- - etc...
71
+ - Add `account_id` to each scoped table using `rails g migration add_account_to_projects account:references`.
72
+ - Add `include AccountScoped` to scoped models. It set up the account relationship and default scope using the current account.
73
+
74
+ #### Set Current.account through the URL. `http://myapp.com/:account_id`
75
+
76
+ - Add `require_relative "../lib/account_middleware"` to `config/application.rb`.
77
+ - Add `config.middleware.use AccountMiddleware` to your application class.
81
78
 
82
79
  ## Development
83
80
 
@@ -1,3 +1,3 @@
1
1
  module AuthenticationZero
2
- VERSION = "2.16.31"
2
+ VERSION = "2.16.33"
3
3
  end
@@ -54,11 +54,6 @@ class AuthenticationGenerator < Rails::Generators::Base
54
54
  application "config.action_mailer.default_url_options = { host: \"localhost\", port: 3000 }", env: "development"
55
55
  application "config.action_mailer.default_url_options = { host: \"localhost\", port: 3000 }", env: "test"
56
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
62
57
  end
63
58
 
64
59
  def create_configuration_files
@@ -8,9 +8,9 @@ class AccountMiddleware
8
8
 
9
9
  _, account_id, request_path = request.path.split("/", 3)
10
10
 
11
- if is_number?(account_id)
11
+ if identifier?(account_id)
12
12
  set_current_account(account_id)
13
-
13
+
14
14
  request.script_name = "/#{account_id}"
15
15
  request.path_info = "/#{request_path}"
16
16
  @app.call(request.env)
@@ -20,11 +20,11 @@ class AccountMiddleware
20
20
  end
21
21
 
22
22
  private
23
- def is_number?(value)
24
- Integer(value, exception: false)
23
+ def identifier?(value)
24
+ Integer(value, exception: false) != nil
25
25
  end
26
26
 
27
27
  def set_current_account(account_id)
28
- Current.account = Account.find(account_id)
28
+ Current.account = Account.find_by_id(account_id)
29
29
  end
30
30
  end
@@ -16,6 +16,9 @@ class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Mi
16
16
  t.string :provider
17
17
  t.string :uid
18
18
  <%- end -%>
19
+ <%- if options.tenantable? %>
20
+ t.references :account, null: false, foreign_key: true
21
+ <%- end -%>
19
22
 
20
23
  t.timestamps
21
24
  end
@@ -1,2 +1,3 @@
1
1
  class Account < ApplicationRecord
2
+ has_one :account, dependent: :destroy
2
3
  end
@@ -8,4 +8,9 @@ class Current < ActiveSupport::CurrentAttributes
8
8
  def session=(session)
9
9
  super; self.user = session.user
10
10
  end
11
+ <%- if options.tenantable? %>
12
+ def user=(user)
13
+ super; self.account = user.account
14
+ end
15
+ <%- end -%>
11
16
  end
@@ -1,5 +1,8 @@
1
1
  class User < ApplicationRecord
2
2
  has_secure_password
3
+ <%- if options.tenantable? %>
4
+ belongs_to :account
5
+ <%- end -%>
3
6
 
4
7
  has_many :email_verification_tokens, dependent: :destroy
5
8
  has_many :password_reset_tokens, dependent: :destroy
@@ -31,15 +34,20 @@ class User < ApplicationRecord
31
34
  self.verified = false
32
35
  end
33
36
  <%- if two_factor? %>
34
- before_create do
37
+ before_validation on: :create do
35
38
  self.otp_secret = ROTP::Base32.random
36
39
  end
37
40
  <%- end -%>
38
41
  <%- if webauthn? %>
39
- before_create do
42
+ before_validation on: :create do
40
43
  self.webauthn_id = WebAuthn.generate_user_id
41
44
  end
42
45
  <%- end -%>
46
+ <%- if options.tenantable? %>
47
+ before_validation on: :create do
48
+ self.account = Account.new
49
+ end
50
+ <%- end -%>
43
51
 
44
52
  after_update if: :password_digest_previously_changed? do
45
53
  sessions.where.not(id: Current.session).delete_all
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.31
4
+ version: 2.16.33
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nixon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-01 00:00:00.000000000 Z
11
+ date: 2023-06-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: