rodauth 1.23.0 → 2.0.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 +132 -0
- data/MIT-LICENSE +1 -1
- data/README.rdoc +207 -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 +74 -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/http_basic_auth.rdoc +10 -1
- data/doc/jwt.rdoc +22 -22
- data/doc/jwt_cors.rdoc +2 -3
- data/doc/jwt_refresh.rdoc +12 -8
- data/doc/lockout.rdoc +17 -15
- data/doc/login.rdoc +10 -2
- data/doc/login_password_requirements_base.rdoc +15 -37
- data/doc/logout.rdoc +2 -2
- data/doc/otp.rdoc +24 -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/recovery_codes.rdoc +18 -12
- data/doc/release_notes/2.0.0.txt +361 -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 +29 -24
- data/lib/rodauth/features/account_expiration.rb +5 -5
- data/lib/rodauth/features/active_sessions.rb +160 -0
- data/lib/rodauth/features/audit_logging.rb +96 -0
- data/lib/rodauth/features/base.rb +131 -47
- data/lib/rodauth/features/change_password_notify.rb +1 -1
- data/lib/rodauth/features/confirm_password.rb +40 -2
- data/lib/rodauth/features/create_account.rb +7 -13
- data/lib/rodauth/features/disallow_common_passwords.rb +1 -1
- data/lib/rodauth/features/disallow_password_reuse.rb +1 -1
- data/lib/rodauth/features/email_auth.rb +29 -27
- data/lib/rodauth/features/email_base.rb +3 -3
- data/lib/rodauth/features/http_basic_auth.rb +44 -37
- data/lib/rodauth/features/jwt.rb +51 -8
- data/lib/rodauth/features/jwt_refresh.rb +3 -3
- data/lib/rodauth/features/lockout.rb +11 -13
- data/lib/rodauth/features/login.rb +48 -8
- data/lib/rodauth/features/login_password_requirements_base.rb +4 -4
- data/lib/rodauth/features/otp.rb +71 -81
- data/lib/rodauth/features/password_complexity.rb +4 -11
- data/lib/rodauth/features/password_expiration.rb +1 -1
- data/lib/rodauth/features/password_grace_period.rb +17 -10
- data/lib/rodauth/features/recovery_codes.rb +47 -51
- data/lib/rodauth/features/remember.rb +11 -27
- data/lib/rodauth/features/reset_password.rb +25 -25
- data/lib/rodauth/features/session_expiration.rb +6 -4
- data/lib/rodauth/features/single_session.rb +7 -5
- data/lib/rodauth/features/sms_codes.rb +58 -67
- data/lib/rodauth/features/two_factor_base.rb +132 -28
- data/lib/rodauth/features/verify_account.rb +23 -20
- data/lib/rodauth/features/verify_account_grace_period.rb +19 -8
- data/lib/rodauth/features/verify_login_change.rb +11 -10
- data/lib/rodauth/features/webauthn.rb +507 -0
- data/lib/rodauth/features/webauthn_login.rb +70 -0
- data/lib/rodauth/features/webauthn_verify_account.rb +46 -0
- 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 +64 -11
- data/doc/verify_change_login.rdoc +0 -11
- data/lib/rodauth/features/verify_change_login.rb +0 -20
|
@@ -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.0.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-05-06 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: []
|
|
@@ -230,7 +257,7 @@ extra_rdoc_files:
|
|
|
230
257
|
- doc/logout.rdoc
|
|
231
258
|
- doc/otp.rdoc
|
|
232
259
|
- doc/login_password_requirements_base.rdoc
|
|
233
|
-
- doc/
|
|
260
|
+
- doc/jwt_cors.rdoc
|
|
234
261
|
- doc/password_expiration.rdoc
|
|
235
262
|
- doc/password_grace_period.rdoc
|
|
236
263
|
- doc/recovery_codes.rdoc
|
|
@@ -246,7 +273,11 @@ extra_rdoc_files:
|
|
|
246
273
|
- doc/jwt_refresh.rdoc
|
|
247
274
|
- doc/verify_account_grace_period.rdoc
|
|
248
275
|
- doc/verify_login_change.rdoc
|
|
249
|
-
- doc/
|
|
276
|
+
- doc/webauthn.rdoc
|
|
277
|
+
- doc/webauthn_login.rdoc
|
|
278
|
+
- doc/webauthn_verify_account.rdoc
|
|
279
|
+
- doc/active_sessions.rdoc
|
|
280
|
+
- doc/audit_logging.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,15 @@ 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
|
|
274
306
|
files:
|
|
275
307
|
- CHANGELOG
|
|
276
308
|
- MIT-LICENSE
|
|
277
309
|
- README.rdoc
|
|
278
310
|
- dict/top-10_000-passwords.txt
|
|
279
311
|
- doc/account_expiration.rdoc
|
|
312
|
+
- doc/active_sessions.rdoc
|
|
313
|
+
- doc/audit_logging.rdoc
|
|
280
314
|
- doc/base.rdoc
|
|
281
315
|
- doc/change_login.rdoc
|
|
282
316
|
- doc/change_password.rdoc
|
|
@@ -326,6 +360,7 @@ files:
|
|
|
326
360
|
- doc/release_notes/1.7.0.txt
|
|
327
361
|
- doc/release_notes/1.8.0.txt
|
|
328
362
|
- doc/release_notes/1.9.0.txt
|
|
363
|
+
- doc/release_notes/2.0.0.txt
|
|
329
364
|
- doc/remember.rdoc
|
|
330
365
|
- doc/reset_password.rdoc
|
|
331
366
|
- doc/session_expiration.rdoc
|
|
@@ -335,11 +370,17 @@ files:
|
|
|
335
370
|
- doc/update_password_hash.rdoc
|
|
336
371
|
- doc/verify_account.rdoc
|
|
337
372
|
- doc/verify_account_grace_period.rdoc
|
|
338
|
-
- doc/verify_change_login.rdoc
|
|
339
373
|
- doc/verify_login_change.rdoc
|
|
374
|
+
- doc/webauthn.rdoc
|
|
375
|
+
- doc/webauthn_login.rdoc
|
|
376
|
+
- doc/webauthn_verify_account.rdoc
|
|
377
|
+
- javascript/webauthn_auth.js
|
|
378
|
+
- javascript/webauthn_setup.js
|
|
340
379
|
- lib/roda/plugins/rodauth.rb
|
|
341
380
|
- lib/rodauth.rb
|
|
342
381
|
- lib/rodauth/features/account_expiration.rb
|
|
382
|
+
- lib/rodauth/features/active_sessions.rb
|
|
383
|
+
- lib/rodauth/features/audit_logging.rb
|
|
343
384
|
- lib/rodauth/features/base.rb
|
|
344
385
|
- lib/rodauth/features/change_login.rb
|
|
345
386
|
- lib/rodauth/features/change_password.rb
|
|
@@ -373,8 +414,10 @@ files:
|
|
|
373
414
|
- lib/rodauth/features/update_password_hash.rb
|
|
374
415
|
- lib/rodauth/features/verify_account.rb
|
|
375
416
|
- lib/rodauth/features/verify_account_grace_period.rb
|
|
376
|
-
- lib/rodauth/features/verify_change_login.rb
|
|
377
417
|
- lib/rodauth/features/verify_login_change.rb
|
|
418
|
+
- lib/rodauth/features/webauthn.rb
|
|
419
|
+
- lib/rodauth/features/webauthn_login.rb
|
|
420
|
+
- lib/rodauth/features/webauthn_verify_account.rb
|
|
378
421
|
- lib/rodauth/migrations.rb
|
|
379
422
|
- lib/rodauth/version.rb
|
|
380
423
|
- templates/add-recovery-codes.str
|
|
@@ -387,11 +430,15 @@ files:
|
|
|
387
430
|
- templates/email-auth-email.str
|
|
388
431
|
- templates/email-auth-request-form.str
|
|
389
432
|
- templates/email-auth.str
|
|
433
|
+
- templates/global-logout-field.str
|
|
390
434
|
- templates/login-confirm-field.str
|
|
391
435
|
- templates/login-display.str
|
|
392
436
|
- templates/login-field.str
|
|
437
|
+
- templates/login-form-footer.str
|
|
438
|
+
- templates/login-form.str
|
|
393
439
|
- templates/login.str
|
|
394
440
|
- templates/logout.str
|
|
441
|
+
- templates/multi-phase-login.str
|
|
395
442
|
- templates/otp-auth-code-field.str
|
|
396
443
|
- templates/otp-auth.str
|
|
397
444
|
- templates/otp-disable.str
|
|
@@ -411,6 +458,9 @@ files:
|
|
|
411
458
|
- templates/sms-disable.str
|
|
412
459
|
- templates/sms-request.str
|
|
413
460
|
- templates/sms-setup.str
|
|
461
|
+
- templates/two-factor-auth.str
|
|
462
|
+
- templates/two-factor-disable.str
|
|
463
|
+
- templates/two-factor-manage.str
|
|
414
464
|
- templates/unlock-account-email.str
|
|
415
465
|
- templates/unlock-account-request.str
|
|
416
466
|
- templates/unlock-account.str
|
|
@@ -419,6 +469,9 @@ files:
|
|
|
419
469
|
- templates/verify-account.str
|
|
420
470
|
- templates/verify-login-change-email.str
|
|
421
471
|
- templates/verify-login-change.str
|
|
472
|
+
- templates/webauthn-auth.str
|
|
473
|
+
- templates/webauthn-remove.str
|
|
474
|
+
- templates/webauthn-setup.str
|
|
422
475
|
homepage: https://github.com/jeremyevans/rodauth
|
|
423
476
|
licenses:
|
|
424
477
|
- MIT
|
|
@@ -434,7 +487,7 @@ rdoc_options:
|
|
|
434
487
|
- "--line-numbers"
|
|
435
488
|
- "--inline-source"
|
|
436
489
|
- "--title"
|
|
437
|
-
- 'Rodauth:
|
|
490
|
+
- 'Rodauth: Ruby''s Most Advanced Authentication Framework'
|
|
438
491
|
- "--main"
|
|
439
492
|
- README.rdoc
|
|
440
493
|
require_paths:
|
|
@@ -443,7 +496,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
443
496
|
requirements:
|
|
444
497
|
- - ">="
|
|
445
498
|
- !ruby/object:Gem::Version
|
|
446
|
-
version: 1.
|
|
499
|
+
version: 1.9.2
|
|
447
500
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
448
501
|
requirements:
|
|
449
502
|
- - ">="
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
= Documentation for Verify Change Login Feature
|
|
2
|
-
|
|
3
|
-
This feature is deprecated, because it is possible for a user to get
|
|
4
|
-
locked out of their account if they use the wrong address on the
|
|
5
|
-
change login page. It is recommended that users switch to using the
|
|
6
|
-
verify login change feature, which doesn't change the login until
|
|
7
|
-
after it has been verified.
|
|
8
|
-
|
|
9
|
-
The verify change login feature implements account reverification after
|
|
10
|
-
change login. Depends on the change login and verify account grace
|
|
11
|
-
period features.
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# frozen-string-literal: true
|
|
2
|
-
|
|
3
|
-
module Rodauth
|
|
4
|
-
Feature.define(:verify_change_login, :VerifyChangeLogin) do
|
|
5
|
-
depends :change_login, :verify_account_grace_period
|
|
6
|
-
|
|
7
|
-
def change_login_notice_flash
|
|
8
|
-
"#{super}. #{verify_account_email_sent_notice_flash}"
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
private
|
|
12
|
-
|
|
13
|
-
def after_change_login
|
|
14
|
-
super
|
|
15
|
-
update_account(account_status_column=>account_unverified_status_value)
|
|
16
|
-
setup_account_verification
|
|
17
|
-
session[unverified_account_session_key] = true
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|