rodauth 1.20.0 → 2.1.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 +170 -0
- data/MIT-LICENSE +1 -1
- data/README.rdoc +211 -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 +75 -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 +6 -15
- data/doc/http_basic_auth.rdoc +10 -1
- data/doc/internals.rdoc +1 -1
- data/doc/jwt.rdoc +22 -22
- data/doc/jwt_cors.rdoc +22 -0
- 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/1.21.0.txt +12 -0
- data/doc/release_notes/1.22.0.txt +11 -0
- data/doc/release_notes/1.23.0.txt +32 -0
- data/doc/release_notes/2.0.0.txt +361 -0
- data/doc/release_notes/2.1.0.txt +31 -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 +32 -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 +144 -43
- data/lib/rodauth/features/change_password_notify.rb +2 -2
- 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 +1 -1
- data/lib/rodauth/features/email_auth.rb +30 -29
- data/lib/rodauth/features/email_base.rb +9 -4
- data/lib/rodauth/features/http_basic_auth.rb +55 -35
- data/lib/rodauth/features/jwt.rb +58 -10
- data/lib/rodauth/features/jwt_cors.rb +53 -0
- data/lib/rodauth/features/jwt_refresh.rb +3 -3
- data/lib/rodauth/features/lockout.rb +12 -14
- data/lib/rodauth/features/login.rb +54 -10
- data/lib/rodauth/features/login_password_requirements_base.rb +4 -4
- data/lib/rodauth/features/otp.rb +72 -74
- data/lib/rodauth/features/password_complexity.rb +4 -11
- data/lib/rodauth/features/password_expiration.rb +2 -2
- data/lib/rodauth/features/password_grace_period.rb +17 -10
- data/lib/rodauth/features/recovery_codes.rb +49 -53
- data/lib/rodauth/features/remember.rb +11 -27
- data/lib/rodauth/features/reset_password.rb +26 -26
- 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 +62 -71
- data/lib/rodauth/features/two_factor_base.rb +132 -28
- data/lib/rodauth/features/verify_account.rb +25 -21
- data/lib/rodauth/features/verify_account_grace_period.rb +20 -9
- data/lib/rodauth/features/verify_login_change.rb +12 -11
- 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-email.str +1 -1
- data/templates/email-auth-request-form.str +2 -3
- 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-email.str +1 -1
- data/templates/reset-password-request.str +3 -3
- 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-email.str +1 -1
- data/templates/unlock-account-request.str +4 -4
- data/templates/unlock-account.str +1 -1
- data/templates/verify-account-email.str +1 -1
- data/templates/verify-account-resend.str +3 -3
- data/templates/verify-account.str +1 -2
- data/templates/verify-login-change-email.str +2 -1
- 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 +89 -50
- data/Rakefile +0 -179
- data/doc/verify_change_login.rdoc +0 -11
- data/lib/rodauth/features/verify_change_login.rb +0 -20
- data/spec/account_expiration_spec.rb +0 -225
- data/spec/all.rb +0 -1
- data/spec/change_login_spec.rb +0 -156
- data/spec/change_password_notify_spec.rb +0 -33
- data/spec/change_password_spec.rb +0 -202
- data/spec/close_account_spec.rb +0 -162
- data/spec/confirm_password_spec.rb +0 -70
- data/spec/create_account_spec.rb +0 -127
- data/spec/disallow_common_passwords_spec.rb +0 -93
- data/spec/disallow_password_reuse_spec.rb +0 -179
- data/spec/email_auth_spec.rb +0 -285
- data/spec/http_basic_auth_spec.rb +0 -143
- data/spec/jwt_refresh_spec.rb +0 -256
- data/spec/jwt_spec.rb +0 -235
- data/spec/lockout_spec.rb +0 -250
- data/spec/login_spec.rb +0 -328
- data/spec/migrate/001_tables.rb +0 -184
- data/spec/migrate/002_account_password_hash_column.rb +0 -11
- data/spec/migrate_password/001_tables.rb +0 -73
- data/spec/migrate_travis/001_tables.rb +0 -141
- data/spec/password_complexity_spec.rb +0 -109
- data/spec/password_expiration_spec.rb +0 -244
- data/spec/password_grace_period_spec.rb +0 -93
- data/spec/remember_spec.rb +0 -451
- data/spec/reset_password_spec.rb +0 -229
- data/spec/rodauth_spec.rb +0 -343
- data/spec/session_expiration_spec.rb +0 -58
- data/spec/single_session_spec.rb +0 -127
- data/spec/spec_helper.rb +0 -327
- data/spec/two_factor_spec.rb +0 -1423
- data/spec/update_password_hash_spec.rb +0 -40
- data/spec/verify_account_grace_period_spec.rb +0 -171
- data/spec/verify_account_spec.rb +0 -240
- data/spec/verify_change_login_spec.rb +0 -46
- data/spec/verify_login_change_spec.rb +0 -232
- data/spec/views/layout-other.str +0 -11
- data/spec/views/layout.str +0 -11
- data/spec/views/login.str +0 -21
|
@@ -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,5 +1,5 @@
|
|
|
1
1
|
Someone has requested a that the account with this email be unlocked.
|
|
2
2
|
If you did not request the unlocking of this account, please ignore this
|
|
3
3
|
message. If you requested the unlocking of this account, please go to
|
|
4
|
-
#{rodauth.unlock_account_email_link}
|
|
4
|
+
#{rodauth.unlock_account_email_link}
|
|
5
5
|
to unlock this account.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
<form action="#{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
|
-
#{rodauth.csrf_tag(
|
|
4
|
-
|
|
3
|
+
#{rodauth.csrf_tag(rodauth.unlock_account_request_path)}
|
|
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,7 +1,7 @@
|
|
|
1
|
-
<form action="#{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
|
-
#{rodauth.csrf_tag(
|
|
3
|
+
#{rodauth.csrf_tag(rodauth.verify_account_resend_path)}
|
|
4
4
|
#{rodauth.verify_account_resend_explanatory_text}
|
|
5
|
-
#{
|
|
5
|
+
#{rodauth.param_or_nil(rodauth.login_param) ? rodauth.login_hidden_field : rodauth.render('login-field')}
|
|
6
6
|
#{rodauth.button(rodauth.verify_account_resend_button)}
|
|
7
7
|
</form>
|
|
@@ -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,9 +1,10 @@
|
|
|
1
1
|
Someone with an account has requested their login be changed to this email address:
|
|
2
2
|
|
|
3
3
|
Old Login: #{rodauth.verify_login_change_old_login}
|
|
4
|
+
|
|
4
5
|
New Login: #{rodauth.verify_login_change_new_login}
|
|
5
6
|
|
|
6
7
|
If you did not request this login change, please ignore this message. If you
|
|
7
8
|
requested this login change, please go to
|
|
8
|
-
#{rodauth.verify_login_change_email_link}
|
|
9
|
+
#{rodauth.verify_login_change_email_link}
|
|
9
10
|
to verify the login change.
|
|
@@ -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: 1.
|
|
4
|
+
version: 2.1.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:
|
|
11
|
+
date: 2020-06-09 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
|
|
@@ -150,6 +164,20 @@ dependencies:
|
|
|
150
164
|
- - ">="
|
|
151
165
|
- !ruby/object:Gem::Version
|
|
152
166
|
version: 5.0.0
|
|
167
|
+
- !ruby/object:Gem::Dependency
|
|
168
|
+
name: minitest-global_expectations
|
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
|
170
|
+
requirements:
|
|
171
|
+
- - ">="
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: '0'
|
|
174
|
+
type: :development
|
|
175
|
+
prerelease: false
|
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
+
requirements:
|
|
178
|
+
- - ">="
|
|
179
|
+
- !ruby/object:Gem::Version
|
|
180
|
+
version: '0'
|
|
153
181
|
- !ruby/object:Gem::Dependency
|
|
154
182
|
name: minitest-hooks
|
|
155
183
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -179,9 +207,9 @@ dependencies:
|
|
|
179
207
|
- !ruby/object:Gem::Version
|
|
180
208
|
version: 2.1.0
|
|
181
209
|
description: |
|
|
182
|
-
Rodauth is
|
|
183
|
-
rack applications. It's built using Roda and Sequel,
|
|
184
|
-
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
|
|
185
213
|
other web frameworks and database libraries.
|
|
186
214
|
|
|
187
215
|
Rodauth aims to provide strong security for password storage by
|
|
@@ -189,6 +217,19 @@ description: |
|
|
|
189
217
|
MySQL, and Microsoft SQL Server. Configuration is done via
|
|
190
218
|
a DSL that makes it easy to override any part of the authentication
|
|
191
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.
|
|
192
233
|
email: code@jeremyevans.net
|
|
193
234
|
executables: []
|
|
194
235
|
extensions: []
|
|
@@ -216,7 +257,7 @@ extra_rdoc_files:
|
|
|
216
257
|
- doc/logout.rdoc
|
|
217
258
|
- doc/otp.rdoc
|
|
218
259
|
- doc/login_password_requirements_base.rdoc
|
|
219
|
-
- doc/
|
|
260
|
+
- doc/jwt_cors.rdoc
|
|
220
261
|
- doc/password_expiration.rdoc
|
|
221
262
|
- doc/password_grace_period.rdoc
|
|
222
263
|
- doc/recovery_codes.rdoc
|
|
@@ -232,6 +273,11 @@ extra_rdoc_files:
|
|
|
232
273
|
- doc/jwt_refresh.rdoc
|
|
233
274
|
- doc/verify_account_grace_period.rdoc
|
|
234
275
|
- doc/verify_login_change.rdoc
|
|
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
|
|
235
281
|
- doc/release_notes/1.17.0.txt
|
|
236
282
|
- doc/release_notes/1.0.0.txt
|
|
237
283
|
- doc/release_notes/1.1.0.txt
|
|
@@ -253,13 +299,19 @@ extra_rdoc_files:
|
|
|
253
299
|
- doc/release_notes/1.18.0.txt
|
|
254
300
|
- doc/release_notes/1.19.0.txt
|
|
255
301
|
- doc/release_notes/1.20.0.txt
|
|
302
|
+
- doc/release_notes/1.21.0.txt
|
|
303
|
+
- doc/release_notes/1.22.0.txt
|
|
304
|
+
- doc/release_notes/1.23.0.txt
|
|
305
|
+
- doc/release_notes/2.0.0.txt
|
|
306
|
+
- doc/release_notes/2.1.0.txt
|
|
256
307
|
files:
|
|
257
308
|
- CHANGELOG
|
|
258
309
|
- MIT-LICENSE
|
|
259
310
|
- README.rdoc
|
|
260
|
-
- Rakefile
|
|
261
311
|
- dict/top-10_000-passwords.txt
|
|
262
312
|
- doc/account_expiration.rdoc
|
|
313
|
+
- doc/active_sessions.rdoc
|
|
314
|
+
- doc/audit_logging.rdoc
|
|
263
315
|
- doc/base.rdoc
|
|
264
316
|
- doc/change_login.rdoc
|
|
265
317
|
- doc/change_password.rdoc
|
|
@@ -274,6 +326,7 @@ files:
|
|
|
274
326
|
- doc/http_basic_auth.rdoc
|
|
275
327
|
- doc/internals.rdoc
|
|
276
328
|
- doc/jwt.rdoc
|
|
329
|
+
- doc/jwt_cors.rdoc
|
|
277
330
|
- doc/jwt_refresh.rdoc
|
|
278
331
|
- doc/lockout.rdoc
|
|
279
332
|
- doc/login.rdoc
|
|
@@ -298,6 +351,9 @@ files:
|
|
|
298
351
|
- doc/release_notes/1.19.0.txt
|
|
299
352
|
- doc/release_notes/1.2.0.txt
|
|
300
353
|
- doc/release_notes/1.20.0.txt
|
|
354
|
+
- doc/release_notes/1.21.0.txt
|
|
355
|
+
- doc/release_notes/1.22.0.txt
|
|
356
|
+
- doc/release_notes/1.23.0.txt
|
|
301
357
|
- doc/release_notes/1.3.0.txt
|
|
302
358
|
- doc/release_notes/1.4.0.txt
|
|
303
359
|
- doc/release_notes/1.5.0.txt
|
|
@@ -305,6 +361,8 @@ files:
|
|
|
305
361
|
- doc/release_notes/1.7.0.txt
|
|
306
362
|
- doc/release_notes/1.8.0.txt
|
|
307
363
|
- doc/release_notes/1.9.0.txt
|
|
364
|
+
- doc/release_notes/2.0.0.txt
|
|
365
|
+
- doc/release_notes/2.1.0.txt
|
|
308
366
|
- doc/remember.rdoc
|
|
309
367
|
- doc/reset_password.rdoc
|
|
310
368
|
- doc/session_expiration.rdoc
|
|
@@ -314,11 +372,17 @@ files:
|
|
|
314
372
|
- doc/update_password_hash.rdoc
|
|
315
373
|
- doc/verify_account.rdoc
|
|
316
374
|
- doc/verify_account_grace_period.rdoc
|
|
317
|
-
- doc/verify_change_login.rdoc
|
|
318
375
|
- doc/verify_login_change.rdoc
|
|
376
|
+
- doc/webauthn.rdoc
|
|
377
|
+
- doc/webauthn_login.rdoc
|
|
378
|
+
- doc/webauthn_verify_account.rdoc
|
|
379
|
+
- javascript/webauthn_auth.js
|
|
380
|
+
- javascript/webauthn_setup.js
|
|
319
381
|
- lib/roda/plugins/rodauth.rb
|
|
320
382
|
- lib/rodauth.rb
|
|
321
383
|
- lib/rodauth/features/account_expiration.rb
|
|
384
|
+
- lib/rodauth/features/active_sessions.rb
|
|
385
|
+
- lib/rodauth/features/audit_logging.rb
|
|
322
386
|
- lib/rodauth/features/base.rb
|
|
323
387
|
- lib/rodauth/features/change_login.rb
|
|
324
388
|
- lib/rodauth/features/change_password.rb
|
|
@@ -332,6 +396,7 @@ files:
|
|
|
332
396
|
- lib/rodauth/features/email_base.rb
|
|
333
397
|
- lib/rodauth/features/http_basic_auth.rb
|
|
334
398
|
- lib/rodauth/features/jwt.rb
|
|
399
|
+
- lib/rodauth/features/jwt_cors.rb
|
|
335
400
|
- lib/rodauth/features/jwt_refresh.rb
|
|
336
401
|
- lib/rodauth/features/lockout.rb
|
|
337
402
|
- lib/rodauth/features/login.rb
|
|
@@ -351,48 +416,12 @@ files:
|
|
|
351
416
|
- lib/rodauth/features/update_password_hash.rb
|
|
352
417
|
- lib/rodauth/features/verify_account.rb
|
|
353
418
|
- lib/rodauth/features/verify_account_grace_period.rb
|
|
354
|
-
- lib/rodauth/features/verify_change_login.rb
|
|
355
419
|
- lib/rodauth/features/verify_login_change.rb
|
|
420
|
+
- lib/rodauth/features/webauthn.rb
|
|
421
|
+
- lib/rodauth/features/webauthn_login.rb
|
|
422
|
+
- lib/rodauth/features/webauthn_verify_account.rb
|
|
356
423
|
- lib/rodauth/migrations.rb
|
|
357
424
|
- lib/rodauth/version.rb
|
|
358
|
-
- spec/account_expiration_spec.rb
|
|
359
|
-
- spec/all.rb
|
|
360
|
-
- spec/change_login_spec.rb
|
|
361
|
-
- spec/change_password_notify_spec.rb
|
|
362
|
-
- spec/change_password_spec.rb
|
|
363
|
-
- spec/close_account_spec.rb
|
|
364
|
-
- spec/confirm_password_spec.rb
|
|
365
|
-
- spec/create_account_spec.rb
|
|
366
|
-
- spec/disallow_common_passwords_spec.rb
|
|
367
|
-
- spec/disallow_password_reuse_spec.rb
|
|
368
|
-
- spec/email_auth_spec.rb
|
|
369
|
-
- spec/http_basic_auth_spec.rb
|
|
370
|
-
- spec/jwt_refresh_spec.rb
|
|
371
|
-
- spec/jwt_spec.rb
|
|
372
|
-
- spec/lockout_spec.rb
|
|
373
|
-
- spec/login_spec.rb
|
|
374
|
-
- spec/migrate/001_tables.rb
|
|
375
|
-
- spec/migrate/002_account_password_hash_column.rb
|
|
376
|
-
- spec/migrate_password/001_tables.rb
|
|
377
|
-
- spec/migrate_travis/001_tables.rb
|
|
378
|
-
- spec/password_complexity_spec.rb
|
|
379
|
-
- spec/password_expiration_spec.rb
|
|
380
|
-
- spec/password_grace_period_spec.rb
|
|
381
|
-
- spec/remember_spec.rb
|
|
382
|
-
- spec/reset_password_spec.rb
|
|
383
|
-
- spec/rodauth_spec.rb
|
|
384
|
-
- spec/session_expiration_spec.rb
|
|
385
|
-
- spec/single_session_spec.rb
|
|
386
|
-
- spec/spec_helper.rb
|
|
387
|
-
- spec/two_factor_spec.rb
|
|
388
|
-
- spec/update_password_hash_spec.rb
|
|
389
|
-
- spec/verify_account_grace_period_spec.rb
|
|
390
|
-
- spec/verify_account_spec.rb
|
|
391
|
-
- spec/verify_change_login_spec.rb
|
|
392
|
-
- spec/verify_login_change_spec.rb
|
|
393
|
-
- spec/views/layout-other.str
|
|
394
|
-
- spec/views/layout.str
|
|
395
|
-
- spec/views/login.str
|
|
396
425
|
- templates/add-recovery-codes.str
|
|
397
426
|
- templates/button.str
|
|
398
427
|
- templates/change-login.str
|
|
@@ -403,11 +432,15 @@ files:
|
|
|
403
432
|
- templates/email-auth-email.str
|
|
404
433
|
- templates/email-auth-request-form.str
|
|
405
434
|
- templates/email-auth.str
|
|
435
|
+
- templates/global-logout-field.str
|
|
406
436
|
- templates/login-confirm-field.str
|
|
407
437
|
- templates/login-display.str
|
|
408
438
|
- templates/login-field.str
|
|
439
|
+
- templates/login-form-footer.str
|
|
440
|
+
- templates/login-form.str
|
|
409
441
|
- templates/login.str
|
|
410
442
|
- templates/logout.str
|
|
443
|
+
- templates/multi-phase-login.str
|
|
411
444
|
- templates/otp-auth-code-field.str
|
|
412
445
|
- templates/otp-auth.str
|
|
413
446
|
- templates/otp-disable.str
|
|
@@ -427,6 +460,9 @@ files:
|
|
|
427
460
|
- templates/sms-disable.str
|
|
428
461
|
- templates/sms-request.str
|
|
429
462
|
- templates/sms-setup.str
|
|
463
|
+
- templates/two-factor-auth.str
|
|
464
|
+
- templates/two-factor-disable.str
|
|
465
|
+
- templates/two-factor-manage.str
|
|
430
466
|
- templates/unlock-account-email.str
|
|
431
467
|
- templates/unlock-account-request.str
|
|
432
468
|
- templates/unlock-account.str
|
|
@@ -435,6 +471,9 @@ files:
|
|
|
435
471
|
- templates/verify-account.str
|
|
436
472
|
- templates/verify-login-change-email.str
|
|
437
473
|
- templates/verify-login-change.str
|
|
474
|
+
- templates/webauthn-auth.str
|
|
475
|
+
- templates/webauthn-remove.str
|
|
476
|
+
- templates/webauthn-setup.str
|
|
438
477
|
homepage: https://github.com/jeremyevans/rodauth
|
|
439
478
|
licenses:
|
|
440
479
|
- MIT
|
|
@@ -450,7 +489,7 @@ rdoc_options:
|
|
|
450
489
|
- "--line-numbers"
|
|
451
490
|
- "--inline-source"
|
|
452
491
|
- "--title"
|
|
453
|
-
- 'Rodauth:
|
|
492
|
+
- 'Rodauth: Ruby''s Most Advanced Authentication Framework'
|
|
454
493
|
- "--main"
|
|
455
494
|
- README.rdoc
|
|
456
495
|
require_paths:
|
|
@@ -459,14 +498,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
459
498
|
requirements:
|
|
460
499
|
- - ">="
|
|
461
500
|
- !ruby/object:Gem::Version
|
|
462
|
-
version: 1.
|
|
501
|
+
version: 1.9.2
|
|
463
502
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
464
503
|
requirements:
|
|
465
504
|
- - ">="
|
|
466
505
|
- !ruby/object:Gem::Version
|
|
467
506
|
version: '0'
|
|
468
507
|
requirements: []
|
|
469
|
-
rubygems_version: 3.
|
|
508
|
+
rubygems_version: 3.1.2
|
|
470
509
|
signing_key:
|
|
471
510
|
specification_version: 4
|
|
472
511
|
summary: Authentication and Account Management Framework for Rack Applications
|