authentication-zero 2.11.2 → 2.12.2
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 +1 -1
- data/authentication-zero-api.md +1 -16
- data/lib/authentication_zero/version.rb +1 -1
- data/lib/generators/authentication/USAGE +1 -1
- data/lib/generators/authentication/authentication_generator.rb +6 -6
- 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 +9 -7
- 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 +8 -5
- data/lib/generators/authentication/templates/controllers/api/sessions/sudos_controller.rb.tt +1 -1
- data/lib/generators/authentication/templates/controllers/api/sessions_controller.rb.tt +6 -6
- 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 +2 -2
- 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/{identity_mailer → user_mailer}/email_verify_confirmation.html.erb.tt +2 -2
- data/lib/generators/authentication/templates/erb/{identity_mailer → user_mailer}/email_verify_confirmation.text.erb.tt +2 -2
- 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 +3 -3
- data/lib/generators/authentication/templates/models/{model.rb.tt → user.rb.tt} +2 -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/mailers/identity_mailer.rb.tt +0 -19
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 057a4b87d7c1e0266740e9ab1e2191dd453d87d5f16281b69913d19ef4d80902
         | 
| 4 | 
            +
              data.tar.gz: f723896e9f01e4fcb8279851bd11603e9f5a2bd1faa3422fca95cd2dbaf617c4
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 23cf78206952d20cb762de004e8fee4e1493a9f4e276fc0f8dfc8f778b4af379fd490ad7650c1d54d31f9da878e293dc9876543e0aa3258518d57a08da84b2d0
         | 
| 7 | 
            +
              data.tar.gz: 19a96cdec26dbad3aa959190c281497d2f6d0a2161d35691a61547d075818de3642b0b44f3035eed81382bea3f0aa928cc39c1fae3b427728d4273a666f68985
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    
    
        data/authentication-zero-api.md
    CHANGED
    
    | @@ -21,7 +21,6 @@ curl -H "Authorization: Bearer $ACCESS_TOKEN" \ | |
| 21 21 | 
             
            - [Get your sessions](#get-your-sessions)
         | 
| 22 22 | 
             
            - [Get a session](#get-a-session)
         | 
| 23 23 | 
             
            - [Destroy a session](#destroy-a-session)
         | 
| 24 | 
            -
            - [Execute sudo](#execute-sudo)
         | 
| 25 24 | 
             
            - [Update your password](#update-your-password)
         | 
| 26 25 | 
             
            - [Update your email](#update-your-email)
         | 
| 27 26 | 
             
            - [Send verification email](#send-verification-email)
         | 
| @@ -115,21 +114,6 @@ This endpoint will return `201 Created` with the current JSON representation of | |
| 115 114 |  | 
| 116 115 | 
             
            Returns `204 No Content` if successful.
         | 
| 117 116 |  | 
| 118 | 
            -
             | 
| 119 | 
            -
            ### Execute sudo
         | 
| 120 | 
            -
             | 
| 121 | 
            -
            * `POST /sessions/sudo` will grant temporary access to sensitive information.
         | 
| 122 | 
            -
             | 
| 123 | 
            -
            ###### Example JSON Request
         | 
| 124 | 
            -
             | 
| 125 | 
            -
            ``` json
         | 
| 126 | 
            -
            {
         | 
| 127 | 
            -
              "password": "Secret1*2*3*4*5*6",
         | 
| 128 | 
            -
            }
         | 
| 129 | 
            -
            ```
         | 
| 130 | 
            -
             | 
| 131 | 
            -
            Returns `204 No Content` if successful.
         | 
| 132 | 
            -
             | 
| 133 117 | 
             
            ## Password
         | 
| 134 118 |  | 
| 135 119 | 
             
            ### Update your password
         | 
| @@ -158,6 +142,7 @@ This endpoint will return 200 OK with the current JSON representation of the use | |
| 158 142 |  | 
| 159 143 | 
             
            ``` json
         | 
| 160 144 | 
             
            {
         | 
| 145 | 
            +
              "current_password": "Secret1*2*3*4*5*6",  
         | 
| 161 146 | 
             
              "email": "new_email@hey.com"
         | 
| 162 147 | 
             
            }
         | 
| 163 148 | 
             
            ```
         | 
| @@ -1,6 +1,6 @@ | |
| 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 6 | 
             
              class_option :api,              type: :boolean, desc: "Generates API authentication"
         | 
| @@ -54,13 +54,13 @@ class AuthenticationGenerator < Rails::Generators::NamedBase | |
| 54 54 | 
             
              end
         | 
| 55 55 |  | 
| 56 56 | 
             
              def create_migrations
         | 
| 57 | 
            -
                migration_template "migrations/ | 
| 57 | 
            +
                migration_template "migrations/create_users_migration.rb", "#{db_migrate_path}/create_users.rb"
         | 
| 58 58 | 
             
                migration_template "migrations/create_sessions_migration.rb", "#{db_migrate_path}/create_sessions.rb"
         | 
| 59 59 | 
             
                migration_template "migrations/create_events_migration.rb", "#{db_migrate_path}/create_events.rb" if options.trackable?
         | 
| 60 60 | 
             
              end
         | 
| 61 61 |  | 
| 62 62 | 
             
              def create_models
         | 
| 63 | 
            -
                template "models/ | 
| 63 | 
            +
                template "models/user.rb", "app/models/user.rb"
         | 
| 64 64 | 
             
                template "models/session.rb", "app/models/session.rb"
         | 
| 65 65 | 
             
                template "models/current.rb", "app/models/current.rb"
         | 
| 66 66 | 
             
                template "models/locking.rb", "app/models/locking.rb" if options.lockable?
         | 
| @@ -68,7 +68,7 @@ class AuthenticationGenerator < Rails::Generators::NamedBase | |
| 68 68 | 
             
              end
         | 
| 69 69 |  | 
| 70 70 | 
             
              def create_fixture_file
         | 
| 71 | 
            -
                template "test_unit/ | 
| 71 | 
            +
                template "test_unit/users.yml", "test/fixtures/users.yml"
         | 
| 72 72 | 
             
              end
         | 
| 73 73 |  | 
| 74 74 | 
             
              def create_controllers
         | 
| @@ -86,10 +86,10 @@ class AuthenticationGenerator < Rails::Generators::NamedBase | |
| 86 86 |  | 
| 87 87 | 
             
              def create_views
         | 
| 88 88 | 
             
                if options.api?
         | 
| 89 | 
            -
                  directory "erb/ | 
| 89 | 
            +
                  directory "erb/user_mailer", "app/views/user_mailer"
         | 
| 90 90 | 
             
                  directory "erb/session_mailer", "app/views/session_mailer"
         | 
| 91 91 | 
             
                else
         | 
| 92 | 
            -
                  directory "erb/ | 
| 92 | 
            +
                  directory "erb/user_mailer", "app/views/user_mailer"
         | 
| 93 93 | 
             
                  directory "erb/session_mailer", "app/views/session_mailer"
         | 
| 94 94 |  | 
| 95 95 | 
             
                  directory "erb/identity", "app/views/identity"
         | 
| @@ -1,26 +1,28 @@ | |
| 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  | 
| 15 | 
            +
                def set_user
         | 
| 16 16 | 
             
                <%- if code_verifiable? -%>
         | 
| 17 | 
            -
                   | 
| 17 | 
            +
                  verified_user = User.find_by(email: params[:email])
         | 
| 18 18 |  | 
| 19 | 
            -
                   | 
| 19 | 
            +
                  if verified_user && verified_user.verification_code.value == params[:token]
         | 
| 20 | 
            +
                    @user = verified_user
         | 
| 21 | 
            +
                  else
         | 
| 20 22 | 
             
                    render json: { error: "That email verification code is invalid" }, status: :bad_request
         | 
| 21 23 | 
             
                  end
         | 
| 22 24 | 
             
                <%- else -%>
         | 
| 23 | 
            -
                   | 
| 25 | 
            +
                  @user = User.where(email: params[:email]).find_signed!(params[:token], purpose: params[:email])
         | 
| 24 26 | 
             
                rescue
         | 
| 25 27 | 
             
                  render json: { error: "That email verification link is invalid" }, status: :bad_request
         | 
| 26 28 | 
             
                <%- 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,20 @@ 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 | 
            -
                   | 
| 7 | 
            +
                if @user.save
         | 
| 8 | 
            +
                  session = @user.sessions.create!
         | 
| 9 | 
            +
                  response.set_header "X-Session-Token", session.signed_id
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  render json: @user, status: :created
         | 
| 9 12 | 
             
                else
         | 
| 10 | 
            -
                  render json:  | 
| 13 | 
            +
                  render json: @user.errors, status: :unprocessable_entity
         | 
| 11 14 | 
             
                end
         | 
| 12 15 | 
             
              end
         | 
| 13 16 |  | 
| 14 17 | 
             
              private
         | 
| 15 | 
            -
                def  | 
| 18 | 
            +
                def user_params
         | 
| 16 19 | 
             
                  params.permit(:email, :password, :password_confirmation)
         | 
| 17 20 | 
             
                end
         | 
| 18 21 | 
             
            end
         | 
    
        data/lib/generators/authentication/templates/controllers/api/sessions/sudos_controller.rb.tt
    CHANGED
    
    | @@ -2,7 +2,7 @@ class Sessions::SudosController < ApplicationController | |
| 2 2 | 
             
              def create
         | 
| 3 3 | 
             
                session = Current.session
         | 
| 4 4 |  | 
| 5 | 
            -
                if session | 
| 5 | 
            +
                if session.user.authenticate(params[:password])
         | 
| 6 6 | 
             
                  session.sudo.mark
         | 
| 7 7 | 
             
                else
         | 
| 8 8 | 
             
                  render json: { error: "The password you entered is incorrect" }, status: :bad_request
         | 
| @@ -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,11 +12,11 @@ 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 =  | 
| 19 | 
            -
                  response.set_header | 
| 17 | 
            +
                if user && user.authenticate(params[:password])
         | 
| 18 | 
            +
                  @session = user.sessions.create!
         | 
| 19 | 
            +
                  response.set_header "X-Session-Token", @session.signed_id
         | 
| 20 20 |  | 
| 21 21 | 
             
                  render json: @session, status: :created
         | 
| 22 22 | 
             
                else
         | 
| @@ -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,9 +6,9 @@ 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 13 | 
             
                  session.sudo.mark; redirect_to(params[:proceed_to_url])
         | 
| 14 14 | 
             
                else
         | 
| @@ -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
         |