Sha256: c30e65fe7a18fd0401a5ce862fc9a14259cab618684cf6d8645ca3ca6a73e589

Contents?: true

Size: 1.57 KB

Versions: 18

Compression:

Stored size: 1.57 KB

Contents

# frozen-string-literal: true

module Rodauth
  Feature.define(:webauthn_login, :WebauthnLogin) do
    depends :login, :webauthn

    before

    redirect(:webauthn_login_failure){require_login_redirect}

    error_flash "There was an error authenticating via WebAuthn"

    route(:webauthn_login) do |r|
      check_already_logged_in
      before_webauthn_login_route

      r.post do
        catch_error do
          unless account_from_login(param(login_param)) && open_account?
            throw_error_reason(:no_matching_login, no_matching_login_error_status, login_param, no_matching_login_message) 
          end

          webauthn_credential = webauthn_auth_credential_from_form_submission
          before_webauthn_login
          login('webauthn') do
            webauthn_update_session(webauthn_credential.id)
          end
        end

        set_redirect_error_flash webauthn_login_error_flash
        redirect webauthn_login_failure_redirect
      end
    end

    def webauthn_auth_additional_form_tags
      if @webauthn_login
        super.to_s + login_hidden_field
      else
        super
      end
    end

    def webauthn_auth_form_path
      if @webauthn_login
        webauthn_login_path
      else
        super
      end
    end

    def use_multi_phase_login?
      true
    end

    private

    def _multi_phase_login_forms
      forms = super
      if valid_login_entered? && webauthn_setup?
        @webauthn_login = true
        forms << [20, render('webauthn-auth'), nil]
      end
      forms
    end

    def webauthn_account_id
      super || account_id
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
rodauth-2.29.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.28.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.27.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.26.1 lib/rodauth/features/webauthn_login.rb
rodauth-2.26.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.25.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.24.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.23.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.22.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.21.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.20.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.19.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.18.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.17.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.16.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.15.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.14.0 lib/rodauth/features/webauthn_login.rb
rodauth-2.13.0 lib/rodauth/features/webauthn_login.rb