rodauth 1.23.0 → 2.4.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 +184 -0
- data/MIT-LICENSE +1 -1
- data/README.rdoc +221 -79
- data/doc/account_expiration.rdoc +12 -26
- data/doc/active_sessions.rdoc +49 -0
- data/doc/audit_logging.rdoc +44 -0
- data/doc/base.rdoc +76 -128
- data/doc/change_login.rdoc +7 -14
- data/doc/change_password.rdoc +9 -13
- data/doc/change_password_notify.rdoc +2 -2
- data/doc/close_account.rdoc +9 -16
- data/doc/confirm_password.rdoc +12 -5
- data/doc/create_account.rdoc +11 -22
- data/doc/disallow_password_reuse.rdoc +6 -13
- data/doc/email_auth.rdoc +15 -14
- data/doc/email_base.rdoc +5 -15
- data/doc/guides/admin_activation.rdoc +46 -0
- data/doc/guides/already_authenticated.rdoc +10 -0
- data/doc/guides/alternative_login.rdoc +46 -0
- data/doc/guides/create_account_programmatically.rdoc +38 -0
- data/doc/guides/delay_password.rdoc +25 -0
- data/doc/guides/email_only.rdoc +16 -0
- data/doc/guides/i18n.rdoc +26 -0
- data/doc/{internals.rdoc → guides/internals.rdoc} +0 -0
- data/doc/guides/links.rdoc +12 -0
- data/doc/guides/login_return.rdoc +37 -0
- data/doc/guides/password_column.rdoc +25 -0
- data/doc/guides/password_confirmation.rdoc +37 -0
- data/doc/guides/password_requirements.rdoc +30 -0
- data/doc/guides/paths.rdoc +36 -0
- data/doc/guides/query_params.rdoc +9 -0
- data/doc/guides/redirects.rdoc +17 -0
- data/doc/guides/registration_field.rdoc +68 -0
- data/doc/guides/require_mfa.rdoc +30 -0
- data/doc/guides/reset_password_autologin.rdoc +21 -0
- data/doc/guides/status_column.rdoc +28 -0
- data/doc/guides/totp_or_recovery.rdoc +16 -0
- data/doc/http_basic_auth.rdoc +10 -1
- data/doc/jwt.rdoc +22 -22
- data/doc/jwt_cors.rdoc +2 -3
- data/doc/jwt_refresh.rdoc +23 -8
- data/doc/lockout.rdoc +17 -15
- data/doc/login.rdoc +17 -2
- data/doc/login_password_requirements_base.rdoc +18 -37
- data/doc/logout.rdoc +2 -2
- data/doc/otp.rdoc +25 -19
- data/doc/password_complexity.rdoc +10 -26
- data/doc/password_expiration.rdoc +11 -25
- data/doc/password_grace_period.rdoc +16 -2
- data/doc/password_pepper.rdoc +44 -0
- data/doc/recovery_codes.rdoc +18 -12
- data/doc/release_notes/2.0.0.txt +361 -0
- data/doc/release_notes/2.1.0.txt +31 -0
- data/doc/release_notes/2.2.0.txt +39 -0
- data/doc/release_notes/2.3.0.txt +37 -0
- data/doc/release_notes/2.4.0.txt +22 -0
- data/doc/remember.rdoc +40 -64
- data/doc/reset_password.rdoc +12 -9
- data/doc/session_expiration.rdoc +1 -0
- data/doc/single_session.rdoc +16 -25
- data/doc/sms_codes.rdoc +24 -14
- data/doc/two_factor_base.rdoc +60 -22
- data/doc/verify_account.rdoc +14 -12
- data/doc/verify_account_grace_period.rdoc +6 -2
- data/doc/verify_login_change.rdoc +9 -8
- data/doc/webauthn.rdoc +115 -0
- data/doc/webauthn_login.rdoc +15 -0
- data/doc/webauthn_verify_account.rdoc +9 -0
- data/javascript/webauthn_auth.js +45 -0
- data/javascript/webauthn_setup.js +35 -0
- data/lib/roda/plugins/rodauth.rb +1 -1
- data/lib/rodauth.rb +33 -28
- data/lib/rodauth/features/account_expiration.rb +5 -5
- data/lib/rodauth/features/active_sessions.rb +158 -0
- data/lib/rodauth/features/audit_logging.rb +98 -0
- data/lib/rodauth/features/base.rb +152 -49
- data/lib/rodauth/features/change_password_notify.rb +1 -1
- data/lib/rodauth/features/close_account.rb +8 -6
- data/lib/rodauth/features/confirm_password.rb +40 -2
- data/lib/rodauth/features/create_account.rb +8 -13
- data/lib/rodauth/features/disallow_common_passwords.rb +1 -1
- data/lib/rodauth/features/disallow_password_reuse.rb +5 -3
- data/lib/rodauth/features/email_auth.rb +30 -28
- data/lib/rodauth/features/email_base.rb +3 -3
- data/lib/rodauth/features/http_basic_auth.rb +55 -35
- data/lib/rodauth/features/jwt.rb +63 -16
- data/lib/rodauth/features/jwt_cors.rb +15 -15
- data/lib/rodauth/features/jwt_refresh.rb +42 -13
- data/lib/rodauth/features/lockout.rb +11 -13
- data/lib/rodauth/features/login.rb +58 -13
- data/lib/rodauth/features/login_password_requirements_base.rb +13 -8
- data/lib/rodauth/features/otp.rb +76 -82
- data/lib/rodauth/features/password_complexity.rb +8 -13
- data/lib/rodauth/features/password_expiration.rb +1 -1
- data/lib/rodauth/features/password_grace_period.rb +17 -10
- data/lib/rodauth/features/password_pepper.rb +45 -0
- data/lib/rodauth/features/recovery_codes.rb +47 -51
- data/lib/rodauth/features/remember.rb +13 -27
- data/lib/rodauth/features/reset_password.rb +25 -25
- data/lib/rodauth/features/session_expiration.rb +7 -10
- data/lib/rodauth/features/single_session.rb +8 -6
- data/lib/rodauth/features/sms_codes.rb +58 -68
- data/lib/rodauth/features/two_factor_base.rb +134 -30
- data/lib/rodauth/features/verify_account.rb +28 -20
- data/lib/rodauth/features/verify_account_grace_period.rb +18 -9
- data/lib/rodauth/features/verify_login_change.rb +11 -10
- data/lib/rodauth/features/webauthn.rb +505 -0
- data/lib/rodauth/features/webauthn_login.rb +70 -0
- data/lib/rodauth/features/webauthn_verify_account.rb +46 -0
- data/lib/rodauth/migrations.rb +16 -5
- data/lib/rodauth/version.rb +2 -2
- data/templates/button.str +1 -3
- data/templates/change-login.str +1 -2
- data/templates/change-password.str +3 -5
- data/templates/close-account.str +2 -2
- data/templates/confirm-password.str +1 -1
- data/templates/create-account.str +1 -1
- data/templates/email-auth-request-form.str +1 -2
- data/templates/email-auth.str +1 -1
- data/templates/global-logout-field.str +6 -0
- data/templates/login-confirm-field.str +2 -4
- data/templates/login-display.str +3 -2
- data/templates/login-field.str +2 -4
- data/templates/login-form-footer.str +6 -0
- data/templates/login-form.str +7 -0
- data/templates/login.str +1 -9
- data/templates/logout.str +1 -1
- data/templates/multi-phase-login.str +3 -0
- data/templates/otp-auth-code-field.str +5 -3
- data/templates/otp-auth.str +1 -1
- data/templates/otp-disable.str +1 -1
- data/templates/otp-setup.str +3 -3
- data/templates/password-confirm-field.str +2 -4
- data/templates/password-field.str +2 -4
- data/templates/recovery-auth.str +3 -6
- data/templates/recovery-codes.str +1 -1
- data/templates/remember.str +15 -20
- data/templates/reset-password-request.str +2 -2
- data/templates/reset-password.str +1 -2
- data/templates/sms-auth.str +1 -1
- data/templates/sms-code-field.str +5 -3
- data/templates/sms-confirm.str +1 -2
- data/templates/sms-disable.str +1 -2
- data/templates/sms-request.str +1 -1
- data/templates/sms-setup.str +6 -4
- data/templates/two-factor-auth.str +5 -0
- data/templates/two-factor-disable.str +6 -0
- data/templates/two-factor-manage.str +16 -0
- data/templates/unlock-account-request.str +2 -2
- data/templates/unlock-account.str +1 -1
- data/templates/verify-account-resend.str +1 -1
- data/templates/verify-account.str +1 -2
- data/templates/verify-login-change.str +1 -1
- data/templates/webauthn-auth.str +11 -0
- data/templates/webauthn-remove.str +14 -0
- data/templates/webauthn-setup.str +12 -0
- metadata +96 -13
- data/doc/verify_change_login.rdoc +0 -11
- data/lib/rodauth/features/verify_change_login.rb +0 -20
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
<form action="#{rodauth.reset_password_request_path}" method="post" class="rodauth
|
|
1
|
+
<form action="#{rodauth.reset_password_request_path}" method="post" class="rodauth" role="form" id="reset-password-request-form">
|
|
2
2
|
#{rodauth.reset_password_request_additional_form_tags}
|
|
3
3
|
#{rodauth.csrf_tag(rodauth.reset_password_request_path)}
|
|
4
4
|
#{rodauth.reset_password_explanatory_text}
|
|
5
|
-
#{rodauth.param_or_nil(rodauth.login_param) ? rodauth.login_hidden_field : rodauth.render('login-field')}
|
|
5
|
+
#{rodauth.param_or_nil(rodauth.login_param) && !rodauth.field_error(rodauth.login_param) ? rodauth.login_hidden_field : rodauth.render('login-field')}
|
|
6
6
|
#{rodauth.button(rodauth.reset_password_request_button)}
|
|
7
7
|
</form>
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
<form method="post" class="rodauth
|
|
1
|
+
<form method="post" class="rodauth" role="form" id="reset-password-form">
|
|
2
2
|
#{rodauth.reset_password_additional_form_tags}
|
|
3
3
|
#{rodauth.csrf_tag}
|
|
4
4
|
#{rodauth.render('password-field')}
|
|
5
5
|
#{rodauth.render('password-confirm-field') if rodauth.require_password_confirmation?}
|
|
6
6
|
#{rodauth.button(rodauth.reset_password_button)}
|
|
7
7
|
</form>
|
|
8
|
-
|
data/templates/sms-auth.str
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
<div class="form-group">
|
|
2
|
-
<label
|
|
3
|
-
<div class="
|
|
4
|
-
|
|
2
|
+
<label for="sms-code">#{rodauth.sms_code_label}#{rodauth.input_field_label_suffix}</label>
|
|
3
|
+
<div class="row">
|
|
4
|
+
<div class="col-sm-3">
|
|
5
|
+
#{rodauth.input_field_string(rodauth.sms_code_param, 'sms-code', :value => '', :autocomplete=>'one-time-code', :inputmode=>'numeric')}
|
|
6
|
+
</div>
|
|
5
7
|
</div>
|
|
6
8
|
</div>
|
data/templates/sms-confirm.str
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
<form method="post" class="rodauth
|
|
1
|
+
<form method="post" class="rodauth" role="form" id="sms-confirm-form">
|
|
2
2
|
#{rodauth.sms_confirm_additional_form_tags}
|
|
3
3
|
#{rodauth.csrf_tag}
|
|
4
4
|
#{rodauth.render('sms-code-field')}
|
|
5
5
|
#{rodauth.button(rodauth.sms_confirm_button)}
|
|
6
6
|
</form>
|
|
7
|
-
|
data/templates/sms-disable.str
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
<form method="post" class="rodauth
|
|
1
|
+
<form method="post" class="rodauth" role="form" id="sms-disable-form">
|
|
2
2
|
#{rodauth.sms_disable_additional_form_tags}
|
|
3
3
|
#{rodauth.csrf_tag}
|
|
4
4
|
#{rodauth.render('password-field') if rodauth.two_factor_modifications_require_password?}
|
|
5
5
|
#{rodauth.button(rodauth.sms_disable_button)}
|
|
6
6
|
</form>
|
|
7
|
-
|
data/templates/sms-request.str
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<form method="post" class="rodauth
|
|
1
|
+
<form method="post" class="rodauth" role="form" id="sms-request-form">
|
|
2
2
|
#{rodauth.sms_request_additional_form_tags}
|
|
3
3
|
#{rodauth.csrf_tag}
|
|
4
4
|
#{rodauth.button(rodauth.sms_request_button)}
|
data/templates/sms-setup.str
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
<form method="post" class="rodauth
|
|
1
|
+
<form method="post" class="rodauth" role="form" id="sms-setup-form">
|
|
2
2
|
#{rodauth.sms_setup_additional_form_tags}
|
|
3
3
|
#{rodauth.csrf_tag}
|
|
4
4
|
#{rodauth.render('password-field') if rodauth.two_factor_modifications_require_password?}
|
|
5
5
|
<div class="form-group">
|
|
6
|
-
<label
|
|
7
|
-
<div class="
|
|
8
|
-
|
|
6
|
+
<label for="sms-phone">#{rodauth.sms_phone_label}#{rodauth.input_field_label_suffix}</label>
|
|
7
|
+
<div class="row">
|
|
8
|
+
<div class="col-sm-3">
|
|
9
|
+
#{rodauth.input_field_string(rodauth.sms_phone_param, 'sms-phone', :type=>rodauth.sms_phone_input_type, :autocomplete=>'tel')}
|
|
10
|
+
</div>
|
|
9
11
|
</div>
|
|
10
12
|
</div>
|
|
11
13
|
#{rodauth.button(rodauth.sms_setup_button)}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<form method="post" class="rodauth" role="form" id="multifactor-disable-form">
|
|
2
|
+
#{rodauth.two_factor_disable_additional_form_tags}
|
|
3
|
+
#{rodauth.csrf_tag}
|
|
4
|
+
#{rodauth.render('password-field') if rodauth.two_factor_modifications_require_password?}
|
|
5
|
+
#{rodauth.button(rodauth.two_factor_disable_button)}
|
|
6
|
+
</form>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#{rodauth.two_factor_setup_heading unless rodauth.two_factor_setup_links.empty?}
|
|
2
|
+
|
|
3
|
+
<ul class="rodauth-links rodauth-multifactor-setup-links">
|
|
4
|
+
#{rodauth.two_factor_setup_links.sort.map do |_, link, text|
|
|
5
|
+
"<li><a href=\"#{h link}\">#{h text}</a></li>"
|
|
6
|
+
end.join("\n")}
|
|
7
|
+
</ul>
|
|
8
|
+
|
|
9
|
+
#{rodauth.two_factor_remove_heading unless rodauth.two_factor_remove_links.empty?}
|
|
10
|
+
|
|
11
|
+
<ul class="rodauth-links rodauth-multifactor-remove-links">
|
|
12
|
+
#{rodauth.two_factor_remove_links.sort.map do |_, link, text|
|
|
13
|
+
"<li><a href=\"#{h link}\">#{h text}</a></li>"
|
|
14
|
+
end.join("\n")}
|
|
15
|
+
#{"<li><a href=\"#{h rodauth.two_factor_disable_path}\">#{rodauth.two_factor_disable_link_text}</a></li>" if rodauth.two_factor_remove_links.length > 1}
|
|
16
|
+
</ul>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
<form action="#{rodauth.unlock_account_request_path}" method="post" class="rodauth
|
|
1
|
+
<form action="#{rodauth.unlock_account_request_path}" method="post" class="rodauth" role="form" id="unlock-account-request-form">
|
|
2
2
|
#{rodauth.unlock_account_request_additional_form_tags}
|
|
3
3
|
#{rodauth.csrf_tag(rodauth.unlock_account_request_path)}
|
|
4
4
|
#{rodauth.login_hidden_field}
|
|
5
5
|
#{rodauth.unlock_account_request_explanatory_text}
|
|
6
|
-
|
|
6
|
+
#{rodauth.button(rodauth.unlock_account_request_button)}
|
|
7
7
|
</form>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<form method="post" class="rodauth
|
|
1
|
+
<form method="post" class="rodauth" role="form" id="unlock-account-form">
|
|
2
2
|
#{rodauth.unlock_account_additional_form_tags}
|
|
3
3
|
#{rodauth.csrf_tag}
|
|
4
4
|
#{rodauth.unlock_account_explanatory_text}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<form action="#{rodauth.verify_account_resend_path}" method="post" class="rodauth
|
|
1
|
+
<form action="#{rodauth.verify_account_resend_path}" method="post" class="rodauth" role="form" id="verify-account-resend-form">
|
|
2
2
|
#{rodauth.verify_account_resend_additional_form_tags}
|
|
3
3
|
#{rodauth.csrf_tag(rodauth.verify_account_resend_path)}
|
|
4
4
|
#{rodauth.verify_account_resend_explanatory_text}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
<form method="post" class="rodauth
|
|
1
|
+
<form method="post" class="rodauth" role="form" id="verify-account-form">
|
|
2
2
|
#{rodauth.verify_account_additional_form_tags}
|
|
3
3
|
#{rodauth.csrf_tag}
|
|
4
4
|
#{rodauth.render('password-field') if rodauth.verify_account_set_password?}
|
|
5
5
|
#{rodauth.render('password-confirm-field') if rodauth.verify_account_set_password? && rodauth.require_password_confirmation?}
|
|
6
6
|
#{rodauth.button(rodauth.verify_account_button)}
|
|
7
7
|
</form>
|
|
8
|
-
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<form method="post" class="rodauth
|
|
1
|
+
<form method="post" class="rodauth" role="form" id="verify-login-change-form">
|
|
2
2
|
#{rodauth.verify_login_change_additional_form_tags}
|
|
3
3
|
#{rodauth.csrf_tag}
|
|
4
4
|
#{rodauth.button(rodauth.verify_login_change_button)}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<form method="post" action="#{rodauth.webauthn_auth_form_path}" class="rodauth" role="form" id="webauthn-auth-form" data-credential-options="#{h((cred = rodauth.webauth_credential_options_for_get).as_json.to_json)}">
|
|
2
|
+
#{rodauth.webauthn_auth_additional_form_tags}
|
|
3
|
+
#{rodauth.csrf_tag(rodauth.webauthn_auth_form_path)}
|
|
4
|
+
<input type="hidden" name="#{rodauth.webauthn_auth_challenge_param}" value="#{cred.challenge}" />
|
|
5
|
+
<input type="hidden" name="#{rodauth.webauthn_auth_challenge_hmac_param}" value="#{rodauth.compute_hmac(cred.challenge)}" />
|
|
6
|
+
<input class="rodauth_hidden" aria-hidden="true" type="text" name="#{rodauth.webauthn_auth_param}" id="webauthn-auth" value="" />
|
|
7
|
+
<div id="webauthn-auth-button">
|
|
8
|
+
#{rodauth.button(rodauth.webauthn_auth_button)}
|
|
9
|
+
</div>
|
|
10
|
+
</form>
|
|
11
|
+
<script src="#{rodauth.webauthn_js_host}#{rodauth.webauthn_auth_js_path}"></script>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<form method="post" class="rodauth" role="form" id="webauthn-remove-form">
|
|
2
|
+
#{rodauth.webauthn_remove_additional_form_tags}
|
|
3
|
+
#{rodauth.csrf_tag}
|
|
4
|
+
#{rodauth.render('password-field') if rodauth.two_factor_modifications_require_password?}
|
|
5
|
+
<fieldset class="form-group">
|
|
6
|
+
#{(usage = rodauth.account_webauthn_usage; last_id = usage.keys.last; usage;).map do |id, last_use|
|
|
7
|
+
input = rodauth.input_field_string(rodauth.webauthn_remove_param, "webauthn-remove-#{h id}", :type=>'radio', :class=>"form-check-input", :skip_error_message=>true, :value=>id, :required=>false)
|
|
8
|
+
label = "<label class=\"rodauth-webauthn-id form-check-label\" for=\"webauthn-remove-#{h id}\">Last Use: #{last_use}</label>"
|
|
9
|
+
error = rodauth.formatted_field_error(rodauth.webauthn_remove_param) if id == last_id
|
|
10
|
+
"<div class=\"form-check radio\">#{input}#{label}#{error}</div>"
|
|
11
|
+
end.join("\n")}
|
|
12
|
+
</fieldset>
|
|
13
|
+
#{rodauth.button(rodauth.webauthn_remove_button)}
|
|
14
|
+
</form>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<form method="post" class="rodauth" role="form" id="webauthn-setup-form" data-credential-options="#{h((cred = rodauth.new_webauthn_credential).as_json.to_json)}">
|
|
2
|
+
#{rodauth.webauthn_setup_additional_form_tags}
|
|
3
|
+
#{rodauth.csrf_tag}
|
|
4
|
+
<input type="hidden" name="#{rodauth.webauthn_setup_challenge_param}" value="#{cred.challenge}" />
|
|
5
|
+
<input type="hidden" name="#{rodauth.webauthn_setup_challenge_hmac_param}" value="#{rodauth.compute_hmac(cred.challenge)}" />
|
|
6
|
+
<input class="rodauth_hidden" aria-hidden="true" type="text" name="#{rodauth.webauthn_setup_param}" id="webauthn-setup" value="" />
|
|
7
|
+
#{rodauth.render('password-field') if rodauth.two_factor_modifications_require_password?}
|
|
8
|
+
<div id="webauthn-setup-button">
|
|
9
|
+
#{rodauth.button(rodauth.webauthn_setup_button)}
|
|
10
|
+
</div>
|
|
11
|
+
</form>
|
|
12
|
+
<script src="#{rodauth.webauthn_js_host}#{rodauth.webauthn_setup_js_path}"></script>
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rodauth
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jeremy Evans
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-09-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: sequel
|
|
@@ -136,6 +136,20 @@ dependencies:
|
|
|
136
136
|
- - ">="
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
138
|
version: '0'
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: webauthn
|
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
|
142
|
+
requirements:
|
|
143
|
+
- - ">"
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: '2'
|
|
146
|
+
type: :development
|
|
147
|
+
prerelease: false
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - ">"
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '2'
|
|
139
153
|
- !ruby/object:Gem::Dependency
|
|
140
154
|
name: minitest
|
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -193,9 +207,9 @@ dependencies:
|
|
|
193
207
|
- !ruby/object:Gem::Version
|
|
194
208
|
version: 2.1.0
|
|
195
209
|
description: |
|
|
196
|
-
Rodauth is
|
|
197
|
-
rack applications. It's built using Roda and Sequel,
|
|
198
|
-
be used as middleware in front of web applications that use
|
|
210
|
+
Rodauth is Ruby's most advanced authentication framework, designed
|
|
211
|
+
to work in all rack applications. It's built using Roda and Sequel,
|
|
212
|
+
but it can be used as middleware in front of web applications that use
|
|
199
213
|
other web frameworks and database libraries.
|
|
200
214
|
|
|
201
215
|
Rodauth aims to provide strong security for password storage by
|
|
@@ -203,6 +217,19 @@ description: |
|
|
|
203
217
|
MySQL, and Microsoft SQL Server. Configuration is done via
|
|
204
218
|
a DSL that makes it easy to override any part of the authentication
|
|
205
219
|
process.
|
|
220
|
+
|
|
221
|
+
Rodauth supports typical authentication features: such as login and
|
|
222
|
+
logout, changing logins and passwords, and creating, verifying,
|
|
223
|
+
unlocking, and resetting passwords for accounts. Rodauth also
|
|
224
|
+
supports many advanced authentication features:
|
|
225
|
+
|
|
226
|
+
* Secure password storage using security definer database functions
|
|
227
|
+
* Multiple primary multifactor authentication methods (WebAuthn and
|
|
228
|
+
TOTP), as well as backup multifactor authentication methods (SMS
|
|
229
|
+
and recovery codes).
|
|
230
|
+
* Passwordless authentication using email links and WebAuthn
|
|
231
|
+
authenticators.
|
|
232
|
+
* Both standard HTML form and JSON API support for all features.
|
|
206
233
|
email: code@jeremyevans.net
|
|
207
234
|
executables: []
|
|
208
235
|
extensions: []
|
|
@@ -220,7 +247,6 @@ extra_rdoc_files:
|
|
|
220
247
|
- doc/http_basic_auth.rdoc
|
|
221
248
|
- doc/create_account.rdoc
|
|
222
249
|
- doc/email_base.rdoc
|
|
223
|
-
- doc/internals.rdoc
|
|
224
250
|
- doc/disallow_common_passwords.rdoc
|
|
225
251
|
- doc/disallow_password_reuse.rdoc
|
|
226
252
|
- doc/password_complexity.rdoc
|
|
@@ -230,7 +256,7 @@ extra_rdoc_files:
|
|
|
230
256
|
- doc/logout.rdoc
|
|
231
257
|
- doc/otp.rdoc
|
|
232
258
|
- doc/login_password_requirements_base.rdoc
|
|
233
|
-
- doc/
|
|
259
|
+
- doc/jwt_cors.rdoc
|
|
234
260
|
- doc/password_expiration.rdoc
|
|
235
261
|
- doc/password_grace_period.rdoc
|
|
236
262
|
- doc/recovery_codes.rdoc
|
|
@@ -246,7 +272,12 @@ extra_rdoc_files:
|
|
|
246
272
|
- doc/jwt_refresh.rdoc
|
|
247
273
|
- doc/verify_account_grace_period.rdoc
|
|
248
274
|
- doc/verify_login_change.rdoc
|
|
249
|
-
- doc/
|
|
275
|
+
- doc/webauthn.rdoc
|
|
276
|
+
- doc/webauthn_login.rdoc
|
|
277
|
+
- doc/webauthn_verify_account.rdoc
|
|
278
|
+
- doc/active_sessions.rdoc
|
|
279
|
+
- doc/audit_logging.rdoc
|
|
280
|
+
- doc/password_pepper.rdoc
|
|
250
281
|
- doc/release_notes/1.17.0.txt
|
|
251
282
|
- doc/release_notes/1.0.0.txt
|
|
252
283
|
- doc/release_notes/1.1.0.txt
|
|
@@ -271,12 +302,19 @@ extra_rdoc_files:
|
|
|
271
302
|
- doc/release_notes/1.21.0.txt
|
|
272
303
|
- doc/release_notes/1.22.0.txt
|
|
273
304
|
- doc/release_notes/1.23.0.txt
|
|
305
|
+
- doc/release_notes/2.0.0.txt
|
|
306
|
+
- doc/release_notes/2.1.0.txt
|
|
307
|
+
- doc/release_notes/2.2.0.txt
|
|
308
|
+
- doc/release_notes/2.3.0.txt
|
|
309
|
+
- doc/release_notes/2.4.0.txt
|
|
274
310
|
files:
|
|
275
311
|
- CHANGELOG
|
|
276
312
|
- MIT-LICENSE
|
|
277
313
|
- README.rdoc
|
|
278
314
|
- dict/top-10_000-passwords.txt
|
|
279
315
|
- doc/account_expiration.rdoc
|
|
316
|
+
- doc/active_sessions.rdoc
|
|
317
|
+
- doc/audit_logging.rdoc
|
|
280
318
|
- doc/base.rdoc
|
|
281
319
|
- doc/change_login.rdoc
|
|
282
320
|
- doc/change_password.rdoc
|
|
@@ -288,8 +326,28 @@ files:
|
|
|
288
326
|
- doc/disallow_password_reuse.rdoc
|
|
289
327
|
- doc/email_auth.rdoc
|
|
290
328
|
- doc/email_base.rdoc
|
|
329
|
+
- doc/guides/admin_activation.rdoc
|
|
330
|
+
- doc/guides/already_authenticated.rdoc
|
|
331
|
+
- doc/guides/alternative_login.rdoc
|
|
332
|
+
- doc/guides/create_account_programmatically.rdoc
|
|
333
|
+
- doc/guides/delay_password.rdoc
|
|
334
|
+
- doc/guides/email_only.rdoc
|
|
335
|
+
- doc/guides/i18n.rdoc
|
|
336
|
+
- doc/guides/internals.rdoc
|
|
337
|
+
- doc/guides/links.rdoc
|
|
338
|
+
- doc/guides/login_return.rdoc
|
|
339
|
+
- doc/guides/password_column.rdoc
|
|
340
|
+
- doc/guides/password_confirmation.rdoc
|
|
341
|
+
- doc/guides/password_requirements.rdoc
|
|
342
|
+
- doc/guides/paths.rdoc
|
|
343
|
+
- doc/guides/query_params.rdoc
|
|
344
|
+
- doc/guides/redirects.rdoc
|
|
345
|
+
- doc/guides/registration_field.rdoc
|
|
346
|
+
- doc/guides/require_mfa.rdoc
|
|
347
|
+
- doc/guides/reset_password_autologin.rdoc
|
|
348
|
+
- doc/guides/status_column.rdoc
|
|
349
|
+
- doc/guides/totp_or_recovery.rdoc
|
|
291
350
|
- doc/http_basic_auth.rdoc
|
|
292
|
-
- doc/internals.rdoc
|
|
293
351
|
- doc/jwt.rdoc
|
|
294
352
|
- doc/jwt_cors.rdoc
|
|
295
353
|
- doc/jwt_refresh.rdoc
|
|
@@ -301,6 +359,7 @@ files:
|
|
|
301
359
|
- doc/password_complexity.rdoc
|
|
302
360
|
- doc/password_expiration.rdoc
|
|
303
361
|
- doc/password_grace_period.rdoc
|
|
362
|
+
- doc/password_pepper.rdoc
|
|
304
363
|
- doc/recovery_codes.rdoc
|
|
305
364
|
- doc/release_notes/1.0.0.txt
|
|
306
365
|
- doc/release_notes/1.1.0.txt
|
|
@@ -326,6 +385,11 @@ files:
|
|
|
326
385
|
- doc/release_notes/1.7.0.txt
|
|
327
386
|
- doc/release_notes/1.8.0.txt
|
|
328
387
|
- doc/release_notes/1.9.0.txt
|
|
388
|
+
- doc/release_notes/2.0.0.txt
|
|
389
|
+
- doc/release_notes/2.1.0.txt
|
|
390
|
+
- doc/release_notes/2.2.0.txt
|
|
391
|
+
- doc/release_notes/2.3.0.txt
|
|
392
|
+
- doc/release_notes/2.4.0.txt
|
|
329
393
|
- doc/remember.rdoc
|
|
330
394
|
- doc/reset_password.rdoc
|
|
331
395
|
- doc/session_expiration.rdoc
|
|
@@ -335,11 +399,17 @@ files:
|
|
|
335
399
|
- doc/update_password_hash.rdoc
|
|
336
400
|
- doc/verify_account.rdoc
|
|
337
401
|
- doc/verify_account_grace_period.rdoc
|
|
338
|
-
- doc/verify_change_login.rdoc
|
|
339
402
|
- doc/verify_login_change.rdoc
|
|
403
|
+
- doc/webauthn.rdoc
|
|
404
|
+
- doc/webauthn_login.rdoc
|
|
405
|
+
- doc/webauthn_verify_account.rdoc
|
|
406
|
+
- javascript/webauthn_auth.js
|
|
407
|
+
- javascript/webauthn_setup.js
|
|
340
408
|
- lib/roda/plugins/rodauth.rb
|
|
341
409
|
- lib/rodauth.rb
|
|
342
410
|
- lib/rodauth/features/account_expiration.rb
|
|
411
|
+
- lib/rodauth/features/active_sessions.rb
|
|
412
|
+
- lib/rodauth/features/audit_logging.rb
|
|
343
413
|
- lib/rodauth/features/base.rb
|
|
344
414
|
- lib/rodauth/features/change_login.rb
|
|
345
415
|
- lib/rodauth/features/change_password.rb
|
|
@@ -363,6 +433,7 @@ files:
|
|
|
363
433
|
- lib/rodauth/features/password_complexity.rb
|
|
364
434
|
- lib/rodauth/features/password_expiration.rb
|
|
365
435
|
- lib/rodauth/features/password_grace_period.rb
|
|
436
|
+
- lib/rodauth/features/password_pepper.rb
|
|
366
437
|
- lib/rodauth/features/recovery_codes.rb
|
|
367
438
|
- lib/rodauth/features/remember.rb
|
|
368
439
|
- lib/rodauth/features/reset_password.rb
|
|
@@ -373,8 +444,10 @@ files:
|
|
|
373
444
|
- lib/rodauth/features/update_password_hash.rb
|
|
374
445
|
- lib/rodauth/features/verify_account.rb
|
|
375
446
|
- lib/rodauth/features/verify_account_grace_period.rb
|
|
376
|
-
- lib/rodauth/features/verify_change_login.rb
|
|
377
447
|
- lib/rodauth/features/verify_login_change.rb
|
|
448
|
+
- lib/rodauth/features/webauthn.rb
|
|
449
|
+
- lib/rodauth/features/webauthn_login.rb
|
|
450
|
+
- lib/rodauth/features/webauthn_verify_account.rb
|
|
378
451
|
- lib/rodauth/migrations.rb
|
|
379
452
|
- lib/rodauth/version.rb
|
|
380
453
|
- templates/add-recovery-codes.str
|
|
@@ -387,11 +460,15 @@ files:
|
|
|
387
460
|
- templates/email-auth-email.str
|
|
388
461
|
- templates/email-auth-request-form.str
|
|
389
462
|
- templates/email-auth.str
|
|
463
|
+
- templates/global-logout-field.str
|
|
390
464
|
- templates/login-confirm-field.str
|
|
391
465
|
- templates/login-display.str
|
|
392
466
|
- templates/login-field.str
|
|
467
|
+
- templates/login-form-footer.str
|
|
468
|
+
- templates/login-form.str
|
|
393
469
|
- templates/login.str
|
|
394
470
|
- templates/logout.str
|
|
471
|
+
- templates/multi-phase-login.str
|
|
395
472
|
- templates/otp-auth-code-field.str
|
|
396
473
|
- templates/otp-auth.str
|
|
397
474
|
- templates/otp-disable.str
|
|
@@ -411,6 +488,9 @@ files:
|
|
|
411
488
|
- templates/sms-disable.str
|
|
412
489
|
- templates/sms-request.str
|
|
413
490
|
- templates/sms-setup.str
|
|
491
|
+
- templates/two-factor-auth.str
|
|
492
|
+
- templates/two-factor-disable.str
|
|
493
|
+
- templates/two-factor-manage.str
|
|
414
494
|
- templates/unlock-account-email.str
|
|
415
495
|
- templates/unlock-account-request.str
|
|
416
496
|
- templates/unlock-account.str
|
|
@@ -419,6 +499,9 @@ files:
|
|
|
419
499
|
- templates/verify-account.str
|
|
420
500
|
- templates/verify-login-change-email.str
|
|
421
501
|
- templates/verify-login-change.str
|
|
502
|
+
- templates/webauthn-auth.str
|
|
503
|
+
- templates/webauthn-remove.str
|
|
504
|
+
- templates/webauthn-setup.str
|
|
422
505
|
homepage: https://github.com/jeremyevans/rodauth
|
|
423
506
|
licenses:
|
|
424
507
|
- MIT
|
|
@@ -434,7 +517,7 @@ rdoc_options:
|
|
|
434
517
|
- "--line-numbers"
|
|
435
518
|
- "--inline-source"
|
|
436
519
|
- "--title"
|
|
437
|
-
- 'Rodauth:
|
|
520
|
+
- 'Rodauth: Ruby''s Most Advanced Authentication Framework'
|
|
438
521
|
- "--main"
|
|
439
522
|
- README.rdoc
|
|
440
523
|
require_paths:
|
|
@@ -443,7 +526,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
443
526
|
requirements:
|
|
444
527
|
- - ">="
|
|
445
528
|
- !ruby/object:Gem::Version
|
|
446
|
-
version: 1.
|
|
529
|
+
version: 1.9.2
|
|
447
530
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
448
531
|
requirements:
|
|
449
532
|
- - ">="
|