authentication-zero 2.16.31 → 2.16.33

Sign up to get free protection for your applications and to get access to all the features.
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: