authentication-zero 2.11.0 → 2.12.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/CHANGELOG.md +4 -0
- data/Gemfile.lock +1 -1
- data/README.md +3 -1
- data/lib/authentication_zero/version.rb +1 -1
- data/lib/generators/authentication/USAGE +1 -1
- data/lib/generators/authentication/authentication_generator.rb +20 -15
- data/lib/generators/authentication/templates/controllers/api/authentications/events_controller.rb.tt +1 -1
- data/lib/generators/authentication/templates/controllers/api/identity/email_verifications_controller.rb.tt +16 -6
- data/lib/generators/authentication/templates/controllers/api/identity/emails_controller.rb.tt +15 -8
- data/lib/generators/authentication/templates/controllers/api/identity/password_resets_controller.rb.tt +9 -9
- data/lib/generators/authentication/templates/controllers/api/passwords_controller.rb.tt +8 -8
- data/lib/generators/authentication/templates/controllers/api/registrations_controller.rb.tt +5 -5
- data/lib/generators/authentication/templates/controllers/api/sessions/sudos_controller.rb.tt +2 -2
- data/lib/generators/authentication/templates/controllers/api/sessions_controller.rb.tt +5 -5
- data/lib/generators/authentication/templates/controllers/html/authentications/events_controller.rb.tt +1 -1
- data/lib/generators/authentication/templates/controllers/html/identity/email_verifications_controller.rb.tt +5 -5
- data/lib/generators/authentication/templates/controllers/html/identity/emails_controller.rb.tt +13 -6
- data/lib/generators/authentication/templates/controllers/html/identity/password_resets_controller.rb.tt +7 -7
- data/lib/generators/authentication/templates/controllers/html/passwords_controller.rb.tt +6 -6
- data/lib/generators/authentication/templates/controllers/html/registrations_controller.rb.tt +5 -5
- data/lib/generators/authentication/templates/controllers/html/sessions/omniauth_controller.rb.tt +4 -4
- data/lib/generators/authentication/templates/controllers/html/sessions/sudos_controller.rb.tt +3 -3
- data/lib/generators/authentication/templates/controllers/html/sessions_controller.rb.tt +9 -9
- data/lib/generators/authentication/templates/controllers/html/two_factor_authentication/challenges_controller.rb.tt +5 -5
- data/lib/generators/authentication/templates/controllers/html/two_factor_authentication/totps_controller.rb.tt +13 -6
- data/lib/generators/authentication/templates/erb/authentications/events/{index.html.erb → index.html.erb.tt} +8 -8
- data/lib/generators/authentication/templates/erb/identity/emails/edit.html.erb.tt +6 -4
- data/lib/generators/authentication/templates/erb/identity/password_resets/edit.html.erb.tt +3 -3
- data/lib/generators/authentication/templates/erb/passwords/edit.html.erb.tt +3 -3
- data/lib/generators/authentication/templates/erb/registrations/new.html.erb.tt +3 -3
- data/lib/generators/authentication/templates/erb/session_mailer/signed_in_notification.html.erb.tt +1 -1
- data/lib/generators/authentication/templates/erb/session_mailer/signed_in_notification.text.erb.tt +1 -1
- data/lib/generators/authentication/templates/erb/sessions/new.html.erb.tt +3 -2
- data/lib/generators/authentication/templates/erb/two_factor_authentication/totps/new.html.erb.tt +2 -0
- data/lib/generators/authentication/templates/erb/user_mailer/email_verify_confirmation.html.erb.tt +15 -0
- data/lib/generators/authentication/templates/erb/user_mailer/email_verify_confirmation.text.erb.tt +13 -0
- data/lib/generators/authentication/templates/erb/{identity_mailer → user_mailer}/password_reset_provision.html.erb.tt +1 -1
- data/lib/generators/authentication/templates/erb/{identity_mailer → user_mailer}/password_reset_provision.text.erb.tt +1 -1
- data/lib/generators/authentication/templates/mailers/session_mailer.rb.tt +1 -1
- data/lib/generators/authentication/templates/mailers/user_mailer.rb.tt +19 -0
- data/lib/generators/authentication/templates/migrations/create_events_migration.rb.tt +1 -1
- data/lib/generators/authentication/templates/migrations/create_sessions_migration.rb.tt +1 -1
- data/lib/generators/authentication/templates/migrations/{create_table_migration.rb.tt → create_users_migration.rb.tt} +3 -3
- data/lib/generators/authentication/templates/models/current.rb.tt +2 -2
- data/lib/generators/authentication/templates/models/event.rb.tt +1 -1
- data/lib/generators/authentication/templates/models/session.rb.tt +5 -5
- data/lib/generators/authentication/templates/models/{model.rb.tt → user.rb.tt} +5 -2
- data/lib/generators/authentication/templates/test_unit/application_system_test_case.rb.tt +3 -3
- data/lib/generators/authentication/templates/test_unit/controllers/api/identity/email_verifications_controller_test.rb.tt +9 -9
- data/lib/generators/authentication/templates/test_unit/controllers/api/identity/emails_controller_test.rb.tt +1 -1
- data/lib/generators/authentication/templates/test_unit/controllers/api/identity/password_resets_controller_test.rb.tt +7 -7
- data/lib/generators/authentication/templates/test_unit/controllers/api/passwords_controller_test.rb.tt +1 -1
- data/lib/generators/authentication/templates/test_unit/controllers/api/registrations_controller_test.rb.tt +1 -1
- data/lib/generators/authentication/templates/test_unit/controllers/api/sessions_controller_test.rb.tt +6 -6
- data/lib/generators/authentication/templates/test_unit/controllers/html/identity/email_verifications_controller_test.rb.tt +9 -9
- data/lib/generators/authentication/templates/test_unit/controllers/html/identity/emails_controller_test.rb.tt +1 -1
- data/lib/generators/authentication/templates/test_unit/controllers/html/identity/password_resets_controller_test.rb.tt +7 -7
- data/lib/generators/authentication/templates/test_unit/controllers/html/passwords_controller_test.rb.tt +1 -1
- data/lib/generators/authentication/templates/test_unit/controllers/html/registrations_controller_test.rb.tt +1 -1
- data/lib/generators/authentication/templates/test_unit/controllers/html/sessions_controller_test.rb.tt +8 -8
- data/lib/generators/authentication/templates/test_unit/system/identity/emails_test.rb.tt +2 -2
- data/lib/generators/authentication/templates/test_unit/system/identity/password_resets_test.rb.tt +3 -3
- data/lib/generators/authentication/templates/test_unit/system/passwords_test.rb.tt +1 -1
- data/lib/generators/authentication/templates/test_unit/system/sessions_test.rb.tt +4 -4
- data/lib/generators/authentication/templates/test_unit/test_helper.rb.tt +4 -4
- data/lib/generators/authentication/templates/test_unit/{fixtures.yml.tt → users.yml.tt} +0 -0
- metadata +11 -11
- data/lib/generators/authentication/templates/erb/identity_mailer/email_verify_confirmation.html.erb.tt +0 -11
- data/lib/generators/authentication/templates/erb/identity_mailer/email_verify_confirmation.text.erb.tt +0 -9
- data/lib/generators/authentication/templates/mailers/identity_mailer.rb.tt +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65673b94c25fddcc0a7bdd31d9dd4a15062dd863b464e712b248b2d4dc2b280e
|
4
|
+
data.tar.gz: b3012f74b8981d7f2189bd67c08a098412b48c50b763ec509c45ea19c8e1c4f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd34f0996158fad54a8514e7ff897db876898e99a00e5ad04181be8747e4886dc27be9b0e2b4b1f965427df05b3ab899920dcf8ffb310c4cb16701d91f28781d
|
7
|
+
data.tar.gz: c2ada3dffc843ad15589db3ba23be0dc80c87a110b53d6d24965957d3a736fc8258074da308ffb2bf08de0d59f4b772a4edb639f8bad107be4f98513006ecf22
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -13,6 +13,8 @@ The purpose of authentication zero is to generate a pre-built authentication sys
|
|
13
13
|
- Authentication by token (--api)
|
14
14
|
- Two factor authentication (--two-factor)
|
15
15
|
- Social Login with OmniAuth (--omniauthable)
|
16
|
+
- Verify email using a link with token
|
17
|
+
- Verify email using a six random digits code for api (--code-verifiable)
|
16
18
|
- Ask password before sensitive data changes, aka: sudo (--sudoable)
|
17
19
|
- Reset the user password and send reset instructions
|
18
20
|
- Reset the user password only from verified emails
|
@@ -98,7 +100,7 @@ config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
|
|
98
100
|
## Usage
|
99
101
|
|
100
102
|
```
|
101
|
-
rails generate authentication
|
103
|
+
rails generate authentication
|
102
104
|
```
|
103
105
|
|
104
106
|
Then run `bundle install` again!
|
@@ -1,16 +1,17 @@
|
|
1
1
|
require "rails/generators/active_record"
|
2
2
|
|
3
|
-
class AuthenticationGenerator < Rails::Generators::
|
3
|
+
class AuthenticationGenerator < Rails::Generators::Base
|
4
4
|
include ActiveRecord::Generators::Migration
|
5
5
|
|
6
|
-
class_option :api,
|
7
|
-
class_option :pwned,
|
8
|
-
class_option :
|
9
|
-
class_option :
|
10
|
-
class_option :
|
11
|
-
class_option :
|
12
|
-
class_option :
|
13
|
-
class_option :
|
6
|
+
class_option :api, type: :boolean, desc: "Generates API authentication"
|
7
|
+
class_option :pwned, type: :boolean, desc: "Add pwned password validation"
|
8
|
+
class_option :code_verifiable, type: :boolean, desc: "Add email verification using a code for api"
|
9
|
+
class_option :sudoable, type: :boolean, desc: "Add password request before sensitive data changes"
|
10
|
+
class_option :lockable, type: :boolean, desc: "Add password reset locking"
|
11
|
+
class_option :ratelimit, type: :boolean, desc: "Add request rate limiting"
|
12
|
+
class_option :omniauthable, type: :boolean, desc: "Add social login support"
|
13
|
+
class_option :trackable, type: :boolean, desc: "Add activity log support"
|
14
|
+
class_option :two_factor, type: :boolean, desc: "Add two factor authentication"
|
14
15
|
|
15
16
|
source_root File.expand_path("templates", __dir__)
|
16
17
|
|
@@ -53,13 +54,13 @@ class AuthenticationGenerator < Rails::Generators::NamedBase
|
|
53
54
|
end
|
54
55
|
|
55
56
|
def create_migrations
|
56
|
-
migration_template "migrations/
|
57
|
+
migration_template "migrations/create_users_migration.rb", "#{db_migrate_path}/create_users.rb"
|
57
58
|
migration_template "migrations/create_sessions_migration.rb", "#{db_migrate_path}/create_sessions.rb"
|
58
59
|
migration_template "migrations/create_events_migration.rb", "#{db_migrate_path}/create_events.rb" if options.trackable?
|
59
60
|
end
|
60
61
|
|
61
62
|
def create_models
|
62
|
-
template "models/
|
63
|
+
template "models/user.rb", "app/models/user.rb"
|
63
64
|
template "models/session.rb", "app/models/session.rb"
|
64
65
|
template "models/current.rb", "app/models/current.rb"
|
65
66
|
template "models/locking.rb", "app/models/locking.rb" if options.lockable?
|
@@ -67,7 +68,7 @@ class AuthenticationGenerator < Rails::Generators::NamedBase
|
|
67
68
|
end
|
68
69
|
|
69
70
|
def create_fixture_file
|
70
|
-
template "test_unit/
|
71
|
+
template "test_unit/users.yml", "test/fixtures/users.yml"
|
71
72
|
end
|
72
73
|
|
73
74
|
def create_controllers
|
@@ -85,10 +86,10 @@ class AuthenticationGenerator < Rails::Generators::NamedBase
|
|
85
86
|
|
86
87
|
def create_views
|
87
88
|
if options.api?
|
88
|
-
directory "erb/
|
89
|
+
directory "erb/user_mailer", "app/views/user_mailer"
|
89
90
|
directory "erb/session_mailer", "app/views/session_mailer"
|
90
91
|
else
|
91
|
-
directory "erb/
|
92
|
+
directory "erb/user_mailer", "app/views/user_mailer"
|
92
93
|
directory "erb/session_mailer", "app/views/session_mailer"
|
93
94
|
|
94
95
|
directory "erb/identity", "app/views/identity"
|
@@ -157,7 +158,11 @@ class AuthenticationGenerator < Rails::Generators::NamedBase
|
|
157
158
|
options.two_factor? && !options.api?
|
158
159
|
end
|
159
160
|
|
161
|
+
def code_verifiable?
|
162
|
+
options.code_verifiable? && options.api?
|
163
|
+
end
|
164
|
+
|
160
165
|
def redis?
|
161
|
-
options.lockable? || options.sudoable?
|
166
|
+
options.lockable? || options.sudoable? || code_verifiable?
|
162
167
|
end
|
163
168
|
end
|
@@ -1,20 +1,30 @@
|
|
1
1
|
class Identity::EmailVerificationsController < ApplicationController
|
2
2
|
skip_before_action :authenticate, only: :edit
|
3
3
|
|
4
|
-
before_action :
|
4
|
+
before_action :set_user, only: :edit
|
5
5
|
|
6
6
|
def edit
|
7
|
-
|
7
|
+
@user.update! verified: true
|
8
8
|
end
|
9
9
|
|
10
10
|
def create
|
11
|
-
|
11
|
+
UserMailer.with(user: Current.user).email_verify_confirmation.deliver_later
|
12
12
|
end
|
13
13
|
|
14
14
|
private
|
15
|
-
def
|
16
|
-
|
15
|
+
def set_user
|
16
|
+
<%- if code_verifiable? -%>
|
17
|
+
verified_user = User.find_by(email: params[:email])
|
18
|
+
|
19
|
+
if verified_user && verified_user.verification_code.value == params[:token]
|
20
|
+
@user = verified_user
|
21
|
+
else
|
22
|
+
render json: { error: "That email verification code is invalid" }, status: :bad_request
|
23
|
+
end
|
24
|
+
<%- else -%>
|
25
|
+
@user = User.where(email: params[:email]).find_signed!(params[:token], purpose: params[:email])
|
17
26
|
rescue
|
18
27
|
render json: { error: "That email verification link is invalid" }, status: :bad_request
|
19
|
-
end
|
28
|
+
<%- end -%>
|
29
|
+
end
|
20
30
|
end
|
data/lib/generators/authentication/templates/controllers/api/identity/emails_controller.rb.tt
CHANGED
@@ -1,22 +1,29 @@
|
|
1
1
|
class Identity::EmailsController < ApplicationController
|
2
|
-
|
2
|
+
<%- if options.sudoable? -%>
|
3
|
+
before_action :require_sudo
|
4
|
+
<%- end -%>
|
5
|
+
before_action :set_user
|
3
6
|
|
4
7
|
def update
|
5
|
-
|
8
|
+
<%- unless options.sudoable? -%>
|
9
|
+
if !@user.authenticate(params[:current_password])
|
6
10
|
render json: { error: "The password you entered is incorrect" }, status: :bad_request
|
7
|
-
elsif
|
8
|
-
|
11
|
+
elsif @user.update(user_params)
|
12
|
+
<%- else -%>
|
13
|
+
if @user.update(user_params)
|
14
|
+
<%- end -%>
|
15
|
+
render json: @user
|
9
16
|
else
|
10
|
-
render json:
|
17
|
+
render json: @user.errors, status: :unprocessable_entity
|
11
18
|
end
|
12
19
|
end
|
13
20
|
|
14
21
|
private
|
15
|
-
def
|
16
|
-
|
22
|
+
def set_user
|
23
|
+
@user = Current.user
|
17
24
|
end
|
18
25
|
|
19
|
-
def
|
26
|
+
def user_params
|
20
27
|
params.permit(:email)
|
21
28
|
end
|
22
29
|
end
|
@@ -4,32 +4,32 @@ class Identity::PasswordResetsController < ApplicationController
|
|
4
4
|
<%- if options.lockable? -%>
|
5
5
|
before_action :require_locking, only: :create
|
6
6
|
<%- end -%>
|
7
|
-
before_action :
|
7
|
+
before_action :set_user, only: :update
|
8
8
|
|
9
9
|
def create
|
10
|
-
if
|
11
|
-
|
10
|
+
if @user = User.find_by(email: params[:email], verified: true)
|
11
|
+
UserMailer.with(user: @user).password_reset_provision.deliver_later
|
12
12
|
else
|
13
13
|
render json: { error: "You can't reset your password until you verify your email" }, status: :not_found
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
def update
|
18
|
-
if
|
19
|
-
render json:
|
18
|
+
if @user.update(user_params)
|
19
|
+
render json: @user
|
20
20
|
else
|
21
|
-
render json:
|
21
|
+
render json: @user.errors, status: :unprocessable_entity
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
26
|
-
def
|
27
|
-
|
26
|
+
def set_user
|
27
|
+
@user = User.find_signed!(params[:token], purpose: :password_reset)
|
28
28
|
rescue
|
29
29
|
render json: { error: "That password reset link is invalid" }, status: :bad_request
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
32
|
+
def user_params
|
33
33
|
params.permit(:password, :password_confirmation)
|
34
34
|
end
|
35
35
|
<%- if options.lockable? %>
|
@@ -1,22 +1,22 @@
|
|
1
1
|
class PasswordsController < ApplicationController
|
2
|
-
before_action :
|
2
|
+
before_action :set_user
|
3
3
|
|
4
4
|
def update
|
5
|
-
if
|
5
|
+
if !@user.authenticate(params[:current_password])
|
6
6
|
render json: { error: "The current password you entered is incorrect" }, status: :bad_request
|
7
|
-
elsif
|
8
|
-
render json:
|
7
|
+
elsif @user.update(user_params)
|
8
|
+
render json: @user
|
9
9
|
else
|
10
|
-
render json:
|
10
|
+
render json: @user.errors, status: :unprocessable_entity
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
private
|
15
|
-
def
|
16
|
-
|
15
|
+
def set_user
|
16
|
+
@user = Current.user
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
19
|
+
def user_params
|
20
20
|
params.permit(:password, :password_confirmation)
|
21
21
|
end
|
22
22
|
end
|
@@ -2,17 +2,17 @@ class RegistrationsController < ApplicationController
|
|
2
2
|
skip_before_action :authenticate
|
3
3
|
|
4
4
|
def create
|
5
|
-
|
5
|
+
@user = User.new(user_params)
|
6
6
|
|
7
|
-
if
|
8
|
-
render json:
|
7
|
+
if @user.save
|
8
|
+
render json: @user, status: :created
|
9
9
|
else
|
10
|
-
render json:
|
10
|
+
render json: @user.errors, status: :unprocessable_entity
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
private
|
15
|
-
def
|
15
|
+
def user_params
|
16
16
|
params.permit(:email, :password, :password_confirmation)
|
17
17
|
end
|
18
18
|
end
|
data/lib/generators/authentication/templates/controllers/api/sessions/sudos_controller.rb.tt
CHANGED
@@ -2,8 +2,8 @@ class Sessions::SudosController < ApplicationController
|
|
2
2
|
def create
|
3
3
|
session = Current.session
|
4
4
|
|
5
|
-
if session
|
6
|
-
session.sudo.mark
|
5
|
+
if session.user.authenticate(params[:password])
|
6
|
+
session.sudo.mark
|
7
7
|
else
|
8
8
|
render json: { error: "The password you entered is incorrect" }, status: :bad_request
|
9
9
|
end
|
@@ -4,7 +4,7 @@ class SessionsController < ApplicationController
|
|
4
4
|
before_action :set_session, only: %i[ show destroy ]
|
5
5
|
|
6
6
|
def index
|
7
|
-
render json: Current
|
7
|
+
render json: Current.user.sessions.order(created_at: :desc)
|
8
8
|
end
|
9
9
|
|
10
10
|
def show
|
@@ -12,10 +12,10 @@ class SessionsController < ApplicationController
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def create
|
15
|
-
|
15
|
+
user = User.find_by(email: params[:email])
|
16
16
|
|
17
|
-
if
|
18
|
-
@session =
|
17
|
+
if user && user.authenticate(params[:password])
|
18
|
+
@session = user.sessions.create!
|
19
19
|
response.set_header("X-Session-Token", @session.signed_id)
|
20
20
|
|
21
21
|
render json: @session, status: :created
|
@@ -30,6 +30,6 @@ class SessionsController < ApplicationController
|
|
30
30
|
|
31
31
|
private
|
32
32
|
def set_session
|
33
|
-
@session = Current
|
33
|
+
@session = Current.user.sessions.find(params[:id])
|
34
34
|
end
|
35
35
|
end
|
@@ -1,21 +1,21 @@
|
|
1
1
|
class Identity::EmailVerificationsController < ApplicationController
|
2
2
|
skip_before_action :authenticate, only: :edit
|
3
3
|
|
4
|
-
before_action :
|
4
|
+
before_action :set_user, only: :edit
|
5
5
|
|
6
6
|
def edit
|
7
|
-
|
7
|
+
@user.update! verified: true
|
8
8
|
redirect_to root_path, notice: "Thank you for verifying your email address"
|
9
9
|
end
|
10
10
|
|
11
11
|
def create
|
12
|
-
|
12
|
+
UserMailer.with(user: Current.user).email_verify_confirmation.deliver_later
|
13
13
|
redirect_to root_path, notice: "We sent a verification email to your email address"
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
17
|
-
def
|
18
|
-
|
17
|
+
def set_user
|
18
|
+
@user = User.where(email: params[:email]).find_signed!(params[:token], purpose: params[:email])
|
19
19
|
rescue
|
20
20
|
redirect_to edit_identity_email_path, alert: "That email verification link is invalid"
|
21
21
|
end
|
data/lib/generators/authentication/templates/controllers/html/identity/emails_controller.rb.tt
CHANGED
@@ -1,13 +1,20 @@
|
|
1
1
|
class Identity::EmailsController < ApplicationController
|
2
|
-
|
2
|
+
<%- if options.sudoable? -%>
|
3
|
+
before_action :require_sudo
|
4
|
+
<%- end -%>
|
5
|
+
before_action :set_user
|
3
6
|
|
4
7
|
def edit
|
5
8
|
end
|
6
9
|
|
7
10
|
def update
|
8
|
-
|
11
|
+
<%- unless options.sudoable? -%>
|
12
|
+
if !@user.authenticate(params[:current_password])
|
9
13
|
redirect_to edit_identity_email_path, alert: "The password you entered is incorrect"
|
10
|
-
elsif
|
14
|
+
elsif @user.update(user_params)
|
15
|
+
<%- else -%>
|
16
|
+
if @user.update(user_params)
|
17
|
+
<%- end -%>
|
11
18
|
redirect_to root_path, notice: "Your email has been changed"
|
12
19
|
else
|
13
20
|
render :edit, status: :unprocessable_entity
|
@@ -15,11 +22,11 @@ class Identity::EmailsController < ApplicationController
|
|
15
22
|
end
|
16
23
|
|
17
24
|
private
|
18
|
-
def
|
19
|
-
|
25
|
+
def set_user
|
26
|
+
@user = Current.user
|
20
27
|
end
|
21
28
|
|
22
|
-
def
|
29
|
+
def user_params
|
23
30
|
params.permit(:email)
|
24
31
|
end
|
25
32
|
end
|
@@ -4,7 +4,7 @@ class Identity::PasswordResetsController < ApplicationController
|
|
4
4
|
<%- if options.lockable? -%>
|
5
5
|
before_action :require_locking, only: :create
|
6
6
|
<%- end -%>
|
7
|
-
before_action :
|
7
|
+
before_action :set_user, only: %i[ edit update ]
|
8
8
|
|
9
9
|
def new
|
10
10
|
end
|
@@ -13,8 +13,8 @@ class Identity::PasswordResetsController < ApplicationController
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def create
|
16
|
-
if
|
17
|
-
|
16
|
+
if @user = User.find_by(email: params[:email], verified: true)
|
17
|
+
UserMailer.with(user: @user).password_reset_provision.deliver_later
|
18
18
|
redirect_to sign_in_path, notice: "Check your email for reset instructions"
|
19
19
|
else
|
20
20
|
redirect_to new_identity_password_reset_path, alert: "You can't reset your password until you verify your email"
|
@@ -22,7 +22,7 @@ class Identity::PasswordResetsController < ApplicationController
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def update
|
25
|
-
if
|
25
|
+
if @user.update(user_params)
|
26
26
|
redirect_to sign_in_path, notice: "Your password was reset successfully. Please sign in"
|
27
27
|
else
|
28
28
|
render :edit, status: :unprocessable_entity
|
@@ -30,13 +30,13 @@ class Identity::PasswordResetsController < ApplicationController
|
|
30
30
|
end
|
31
31
|
|
32
32
|
private
|
33
|
-
def
|
34
|
-
|
33
|
+
def set_user
|
34
|
+
@user = User.find_signed!(params[:token], purpose: :password_reset)
|
35
35
|
rescue
|
36
36
|
redirect_to new_identity_password_reset_path, alert: "That password reset link is invalid"
|
37
37
|
end
|
38
38
|
|
39
|
-
def
|
39
|
+
def user_params
|
40
40
|
params.permit(:password, :password_confirmation)
|
41
41
|
end
|
42
42
|
<%- if options.lockable? %>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
class PasswordsController < ApplicationController
|
2
|
-
before_action :
|
2
|
+
before_action :set_user
|
3
3
|
|
4
4
|
def edit
|
5
5
|
end
|
6
6
|
|
7
7
|
def update
|
8
|
-
if
|
8
|
+
if !@user.authenticate(params[:current_password])
|
9
9
|
redirect_to edit_password_path, alert: "The current password you entered is incorrect"
|
10
|
-
elsif
|
10
|
+
elsif @user.update(user_params)
|
11
11
|
redirect_to root_path, notice: "Your password has been changed"
|
12
12
|
else
|
13
13
|
render :edit, status: :unprocessable_entity
|
@@ -15,11 +15,11 @@ class PasswordsController < ApplicationController
|
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
18
|
-
def
|
19
|
-
|
18
|
+
def set_user
|
19
|
+
@user = Current.user
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
22
|
+
def user_params
|
23
23
|
params.permit(:password, :password_confirmation)
|
24
24
|
end
|
25
25
|
end
|
data/lib/generators/authentication/templates/controllers/html/registrations_controller.rb.tt
CHANGED
@@ -2,14 +2,14 @@ class RegistrationsController < ApplicationController
|
|
2
2
|
skip_before_action :authenticate
|
3
3
|
|
4
4
|
def new
|
5
|
-
|
5
|
+
@user = User.new
|
6
6
|
end
|
7
7
|
|
8
8
|
def create
|
9
|
-
|
9
|
+
@user = User.new(user_params)
|
10
10
|
|
11
|
-
if
|
12
|
-
session =
|
11
|
+
if @user.save
|
12
|
+
session = @user.sessions.create!
|
13
13
|
cookies.signed.permanent[:session_token] = { value: session.id, httponly: true }
|
14
14
|
|
15
15
|
redirect_to root_path, notice: "Welcome! You have signed up successfully"
|
@@ -19,7 +19,7 @@ class RegistrationsController < ApplicationController
|
|
19
19
|
end
|
20
20
|
|
21
21
|
private
|
22
|
-
def
|
22
|
+
def user_params
|
23
23
|
params.permit(:email, :password, :password_confirmation)
|
24
24
|
end
|
25
25
|
end
|
data/lib/generators/authentication/templates/controllers/html/sessions/omniauth_controller.rb.tt
CHANGED
@@ -3,10 +3,10 @@ class Sessions::OmniauthController < ApplicationController
|
|
3
3
|
skip_before_action :authenticate
|
4
4
|
|
5
5
|
def create
|
6
|
-
|
6
|
+
@user = User.where(omniauth_params).first_or_initialize(user_params)
|
7
7
|
|
8
|
-
if
|
9
|
-
session =
|
8
|
+
if @user.save
|
9
|
+
session = @user.sessions.create!
|
10
10
|
cookies.signed.permanent[:session_token] = { value: session.id, httponly: true }
|
11
11
|
|
12
12
|
redirect_to root_path, notice: "Signed in successfully"
|
@@ -24,7 +24,7 @@ class Sessions::OmniauthController < ApplicationController
|
|
24
24
|
{ provider: omniauth.provider, uid: omniauth.uid }
|
25
25
|
end
|
26
26
|
|
27
|
-
def
|
27
|
+
def user_params
|
28
28
|
{ email: omniauth.info.email, password: SecureRandom::base58, verified: true }
|
29
29
|
end
|
30
30
|
|
data/lib/generators/authentication/templates/controllers/html/sessions/sudos_controller.rb.tt
CHANGED
@@ -6,11 +6,11 @@ class Sessions::SudosController < ApplicationController
|
|
6
6
|
session = Current.session
|
7
7
|
|
8
8
|
<%- if omniauthable? -%>
|
9
|
-
if session
|
9
|
+
if session.user.authenticate(params[:password]) || session.user.provider
|
10
10
|
<%- else -%>
|
11
|
-
if session
|
11
|
+
if session.user.authenticate(params[:password])
|
12
12
|
<%- end -%>
|
13
|
-
session.sudo.mark
|
13
|
+
session.sudo.mark; redirect_to(params[:proceed_to_url])
|
14
14
|
else
|
15
15
|
redirect_to new_sessions_sudo_path(proceed_to_url: params[:proceed_to_url]), alert: "The password you entered is incorrect"
|
16
16
|
end
|
@@ -4,30 +4,30 @@ class SessionsController < ApplicationController
|
|
4
4
|
before_action :set_session, only: :destroy
|
5
5
|
|
6
6
|
def index
|
7
|
-
@sessions = Current
|
7
|
+
@sessions = Current.user.sessions.order(created_at: :desc)
|
8
8
|
end
|
9
9
|
|
10
10
|
def new
|
11
|
-
|
11
|
+
@user = User.new
|
12
12
|
end
|
13
13
|
|
14
14
|
def create
|
15
|
-
|
15
|
+
user = User.find_by(email: params[:email])
|
16
16
|
|
17
|
-
if
|
17
|
+
if user && user.authenticate(params[:password])
|
18
18
|
<%- if two_factor? -%>
|
19
|
-
if
|
20
|
-
signed_id =
|
19
|
+
if user.otp_secret
|
20
|
+
signed_id = user.signed_id(purpose: :authentication_challenge, expires_in: 20.minutes)
|
21
21
|
|
22
22
|
redirect_to new_two_factor_authentication_challenge_path(token: signed_id)
|
23
23
|
else
|
24
|
-
@session =
|
24
|
+
@session = user.sessions.create!
|
25
25
|
cookies.signed.permanent[:session_token] = { value: @session.id, httponly: true }
|
26
26
|
|
27
27
|
redirect_to root_path, notice: "Signed in successfully"
|
28
28
|
end
|
29
29
|
<%- else -%>
|
30
|
-
@session =
|
30
|
+
@session = user.sessions.create!
|
31
31
|
cookies.signed.permanent[:session_token] = { value: @session.id, httponly: true }
|
32
32
|
|
33
33
|
redirect_to root_path, notice: "Signed in successfully"
|
@@ -43,6 +43,6 @@ class SessionsController < ApplicationController
|
|
43
43
|
|
44
44
|
private
|
45
45
|
def set_session
|
46
|
-
@session = Current
|
46
|
+
@session = Current.user.sessions.find(params[:id])
|
47
47
|
end
|
48
48
|
end
|