rodauth 0.10.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +146 -0
  3. data/README.rdoc +644 -220
  4. data/Rakefile +99 -11
  5. data/doc/account_expiration.rdoc +55 -0
  6. data/doc/base.rdoc +104 -0
  7. data/doc/change_login.rdoc +29 -0
  8. data/doc/change_password.rdoc +26 -0
  9. data/doc/close_account.rdoc +31 -0
  10. data/doc/confirm_password.rdoc +22 -0
  11. data/doc/create_account.rdoc +34 -0
  12. data/doc/disallow_password_reuse.rdoc +37 -0
  13. data/doc/email_base.rdoc +19 -0
  14. data/doc/jwt.rdoc +35 -0
  15. data/doc/lockout.rdoc +83 -0
  16. data/doc/login.rdoc +27 -0
  17. data/doc/login_password_requirements_base.rdoc +50 -0
  18. data/doc/logout.rdoc +21 -0
  19. data/doc/otp.rdoc +100 -0
  20. data/doc/password_complexity.rdoc +50 -0
  21. data/doc/password_expiration.rdoc +52 -0
  22. data/doc/password_grace_period.rdoc +10 -0
  23. data/doc/recovery_codes.rdoc +60 -0
  24. data/doc/release_notes/1.0.0.txt +443 -0
  25. data/doc/remember.rdoc +82 -0
  26. data/doc/reset_password.rdoc +70 -0
  27. data/doc/session_expiration.rdoc +27 -0
  28. data/doc/single_session.rdoc +43 -0
  29. data/doc/sms_codes.rdoc +119 -0
  30. data/doc/two_factor_base.rdoc +27 -0
  31. data/doc/verify_account.rdoc +70 -0
  32. data/doc/verify_account_grace_period.rdoc +15 -0
  33. data/doc/verify_change_login.rdoc +9 -0
  34. data/lib/roda/plugins/rodauth.rb +3 -262
  35. data/lib/rodauth.rb +260 -0
  36. data/lib/rodauth/features/account_expiration.rb +108 -0
  37. data/lib/rodauth/features/base.rb +479 -0
  38. data/lib/rodauth/features/change_login.rb +77 -0
  39. data/lib/rodauth/features/change_password.rb +66 -0
  40. data/lib/rodauth/features/close_account.rb +82 -0
  41. data/lib/rodauth/features/confirm_password.rb +51 -0
  42. data/lib/rodauth/features/create_account.rb +128 -0
  43. data/lib/rodauth/features/disallow_password_reuse.rb +82 -0
  44. data/lib/rodauth/features/email_base.rb +63 -0
  45. data/lib/rodauth/features/jwt.rb +151 -0
  46. data/lib/rodauth/features/lockout.rb +262 -0
  47. data/lib/rodauth/features/login.rb +61 -0
  48. data/lib/rodauth/features/login_password_requirements_base.rb +123 -0
  49. data/lib/rodauth/features/logout.rb +37 -0
  50. data/lib/rodauth/features/otp.rb +338 -0
  51. data/lib/rodauth/features/password_complexity.rb +89 -0
  52. data/lib/rodauth/features/password_expiration.rb +111 -0
  53. data/lib/rodauth/features/password_grace_period.rb +46 -0
  54. data/lib/rodauth/features/recovery_codes.rb +240 -0
  55. data/lib/rodauth/features/remember.rb +200 -0
  56. data/lib/rodauth/features/reset_password.rb +207 -0
  57. data/lib/rodauth/features/session_expiration.rb +55 -0
  58. data/lib/rodauth/features/single_session.rb +87 -0
  59. data/lib/rodauth/features/sms_codes.rb +498 -0
  60. data/lib/rodauth/features/two_factor_base.rb +135 -0
  61. data/lib/rodauth/features/verify_account.rb +232 -0
  62. data/lib/rodauth/features/verify_account_grace_period.rb +76 -0
  63. data/lib/rodauth/features/verify_change_login.rb +20 -0
  64. data/lib/rodauth/migrations.rb +130 -0
  65. data/lib/rodauth/version.rb +9 -0
  66. data/spec/account_expiration_spec.rb +90 -0
  67. data/spec/all.rb +1 -0
  68. data/spec/change_login_spec.rb +149 -0
  69. data/spec/change_password_spec.rb +177 -0
  70. data/spec/close_account_spec.rb +162 -0
  71. data/spec/confirm_password_spec.rb +70 -0
  72. data/spec/create_account_spec.rb +127 -0
  73. data/spec/disallow_password_reuse_spec.rb +84 -0
  74. data/spec/lockout_spec.rb +228 -0
  75. data/spec/login_spec.rb +188 -0
  76. data/spec/migrate/001_tables.rb +103 -16
  77. data/spec/migrate/002_account_password_hash_column.rb +11 -0
  78. data/spec/migrate_password/001_tables.rb +60 -42
  79. data/spec/migrate_travis/001_tables.rb +116 -0
  80. data/spec/password_complexity_spec.rb +108 -0
  81. data/spec/password_expiration_spec.rb +243 -0
  82. data/spec/password_grace_period_spec.rb +93 -0
  83. data/spec/remember_spec.rb +424 -0
  84. data/spec/reset_password_spec.rb +185 -0
  85. data/spec/rodauth_spec.rb +57 -980
  86. data/spec/session_expiration_spec.rb +58 -0
  87. data/spec/single_session_spec.rb +107 -0
  88. data/spec/spec_helper.rb +202 -0
  89. data/spec/two_factor_spec.rb +1310 -0
  90. data/spec/verify_account_grace_period_spec.rb +135 -0
  91. data/spec/verify_account_spec.rb +142 -0
  92. data/spec/verify_change_login_spec.rb +46 -0
  93. data/spec/views/login.str +2 -2
  94. data/templates/add-recovery-codes.str +2 -0
  95. data/templates/button.str +5 -0
  96. data/templates/change-login.str +5 -18
  97. data/templates/change-password.str +6 -14
  98. data/templates/close-account.str +3 -6
  99. data/templates/confirm-password.str +4 -14
  100. data/templates/create-account.str +6 -30
  101. data/templates/login-confirm-field.str +6 -0
  102. data/templates/login-field.str +6 -0
  103. data/templates/login.str +5 -19
  104. data/templates/logout.str +2 -6
  105. data/templates/otp-auth-code-field.str +6 -0
  106. data/templates/otp-auth.str +8 -0
  107. data/templates/otp-disable.str +6 -0
  108. data/templates/otp-setup.str +21 -0
  109. data/templates/password-confirm-field.str +6 -0
  110. data/templates/password-field.str +6 -0
  111. data/templates/recovery-auth.str +12 -0
  112. data/templates/recovery-codes.str +6 -0
  113. data/templates/remember.str +8 -12
  114. data/templates/reset-password-request.str +2 -2
  115. data/templates/reset-password.str +4 -18
  116. data/templates/sms-auth.str +6 -0
  117. data/templates/sms-code-field.str +6 -0
  118. data/templates/sms-confirm.str +7 -0
  119. data/templates/sms-disable.str +7 -0
  120. data/templates/sms-request.str +5 -0
  121. data/templates/sms-setup.str +12 -0
  122. data/templates/unlock-account-request.str +3 -7
  123. data/templates/unlock-account.str +4 -7
  124. data/templates/verify-account-resend.str +2 -2
  125. data/templates/verify-account.str +2 -6
  126. metadata +191 -29
  127. data/lib/roda/plugins/rodauth/base.rb +0 -428
  128. data/lib/roda/plugins/rodauth/change_login.rb +0 -48
  129. data/lib/roda/plugins/rodauth/change_password.rb +0 -42
  130. data/lib/roda/plugins/rodauth/close_account.rb +0 -42
  131. data/lib/roda/plugins/rodauth/create_account.rb +0 -92
  132. data/lib/roda/plugins/rodauth/lockout.rb +0 -292
  133. data/lib/roda/plugins/rodauth/login.rb +0 -81
  134. data/lib/roda/plugins/rodauth/logout.rb +0 -36
  135. data/lib/roda/plugins/rodauth/remember.rb +0 -226
  136. data/lib/roda/plugins/rodauth/reset_password.rb +0 -205
  137. data/lib/roda/plugins/rodauth/verify_account.rb +0 -228
@@ -0,0 +1,37 @@
1
+ = Documentation for Disallow Password Reuse Feature
2
+
3
+ The disallow password reuse feature disallows setting of a password
4
+ that matches a number of previous passwords (6 by default).
5
+
6
+ On databases where Rodauth supports the use of database authentication
7
+ functions, Rodauth also supports the use of database functions for checking
8
+ previous passwords, so previous password hashes enjoy the same database
9
+ security as current password hashes.
10
+
11
+ It is not recommended to use this feature unless you have a policy that
12
+ requires it. This will significantly slow down setting a new password
13
+ due to the need to check all of the previous stored passwords. Additionally,
14
+ storing previous passwords means that if attackers can get access to the
15
+ the database, they can get the previous stored passwords in addition to the
16
+ current password.
17
+
18
+ == Auth Value Methods
19
+
20
+ password_same_as_previous_password_message :: The error message fragment to display if the
21
+ given password is the same as a previous
22
+ password.
23
+ previous_password_account_id_column :: The column in the +previous_password_hash_table+ that
24
+ stores the account id.
25
+ previous_password_hash_column :: The column in the +previous_password_hash_table+ that
26
+ stores the password hash.
27
+ previous_password_hash_table :: The table storing previous password hashes.
28
+ previous_password_id_column :: The column in the +previous_password_hash_table+ that
29
+ stores the autoincrementing primary key.
30
+ previous_passwords_to_check :: The number of previous password hashes to store and check.
31
+
32
+ == Auth Methods
33
+
34
+ add_previous_password_hash(hash) :: Add the given hash to the list of previous hashes for
35
+ the current account.
36
+ password_doesnt_match_previous_password?(password) :: Whether the password given matches any
37
+ of the previous passwords.
@@ -0,0 +1,19 @@
1
+ = Documentation for Email Base Feature
2
+
3
+ The email base feature is automatically loaded when you use a Rodauth feature
4
+ that requires sending emails.
5
+
6
+ == Auth Value Methods
7
+
8
+ email_from :: The from address to use for emails sent by Rodauth.
9
+ email_subject_prefix :: The prefix to use for email subjects
10
+ require_mail? :: Set to false to not require mail, useful if using a different
11
+ library for sending email.
12
+ token_separator :: The string used to separate account id from the random key in links.
13
+
14
+ == Auth Methods
15
+
16
+ email_to :: The email address to send emails to, by default the login of the
17
+ current account.
18
+ create_email(subject, body) :: Return a Mail::Message instance with the given subject
19
+ and body.
@@ -0,0 +1,35 @@
1
+ = Documentation for JWT Feature
2
+
3
+ The jwt feature adds support for JSON API access for all other features
4
+ that ship with Rodauth, using JWT as the token format.
5
+
6
+ When this feature is used, all other features become accessible via a
7
+ JSON API. The JSON API uses the POST method for all requests, using
8
+ the same parameter names as the features uses.
9
+
10
+ Responses are returned as JSON hashes. In case of an error, the "error"
11
+ entry is set to an error message, and the "field-error" entry is set to
12
+ an array containing the field name and the error message for that field.
13
+ Successful requests by default store a "success" entry with a success
14
+ message, though that can be disabled.
15
+
16
+ In order to use this feature, you have to set the +jwt_secret+ configuration
17
+ option the secret used to cryptographically protect the token.
18
+
19
+ == Auth Value Methods
20
+
21
+ json_non_post_error_message :: The error message to use when a JSON non-POST request is sent.
22
+ json_response_error_key :: The JSON result key containing an error message, "error" by default.
23
+ json_response_error_status :: The HTTP status code to use for JSON error responses, 400 by default.
24
+ json_response_field_error_key :: The JSON result key containing an field error message, "field-error" by default.
25
+ json_response_success_key :: The JSON result key containing a success message for successful request, if set. nil by default to not set success messages.
26
+ jwt_algorithm :: The JWT algorithm to use, "HS256" by default.
27
+ non_json_request_error_message :: The error message to use when a non-JSON request is sent and +only_json?+ is set.
28
+ only_json? :: Whether to have Rodauth only allow JSON requests. True by default, which means that rodauth will issue an error for non-JSON requests.
29
+ jwt_secret :: The JWT secret to use. Access to this should be protected the same as a session secret.
30
+
31
+ == Auth Methods
32
+
33
+ json_request? :: Whether the current request is a JSON request, looks at the Content-Type request header by default.
34
+ jwt_token :: Retrieve the JWT token from the request, by default taking it from the Authorization header.
35
+ set_jwt_token(token) :: Set the JWT token in the response, by default storing it in the Authorization header.
@@ -0,0 +1,83 @@
1
+ = Documentation for Lockout Feature
2
+
3
+ The lockout feature implements bruteforce protection for accounts.
4
+ It depends on the login feature. If a user fails to login due to
5
+ a password error more than a given number of times, their account
6
+ gets locked out, and they are given an option to request an account
7
+ unlock via an email sent to them.
8
+
9
+ == Auth Value Methods
10
+
11
+ account_lockouts_id_column :: The id column in the account lockouts table,
12
+ should be a foreign key referencing the accounts
13
+ table.
14
+ account_lockouts_deadline_column :: The deadline column in the account lockouts
15
+ table, containing how long the account is
16
+ locked out until.
17
+ account_lockouts_deadline_interval :: The amount of time for which to lock out accounts,
18
+ 1 day by default.
19
+ account_lockouts_key_column :: The unlock key column in the account lockouts table.
20
+ account_lockouts_table :: The table containing account lockout information.
21
+ account_login_failures_id_column :: The id column in the account login failures table,
22
+ should be a foreign key referencing the accounts
23
+ table.
24
+ account_login_failures_number_column :: The column in the account login failures table
25
+ containing the number of login failures for the
26
+ account.
27
+ account_login_failures_table :: The table containing number of login failures
28
+ per account.
29
+ login_lockout_error_flash :: The flash error to show if there if the account is or becomes
30
+ locked out after a login attempt.
31
+ max_invalid_logins :: The maximum number of failed logins before account lockout. As this
32
+ feature is just designed for bruteforce protection, this is set to
33
+ 100.
34
+ unlock_account_additional_form_tags :: HTML fragment with additional form tags to use
35
+ on the unlock account form.
36
+ unlock_account_autologin? :: Whether to autologin users after successful account unlock.
37
+ unlock_account_button :: The text to use on the unlock account button.
38
+ unlock_account_email_subject :: The subject to use for the unlock account email.
39
+ unlock_account_error_flash :: The flash error to display upon unsuccessful account unlock.
40
+ unlock_account_key_param :: The parameter name to use for the unlock account key.
41
+ unlock_account_notice_flash :: The flash notice to display upon successful account unlock.
42
+ unlock_account_redirect :: Where to redirect after successful account unlock.
43
+ unlock_account_request_additional_form_tags :: HTML fragment with additional form tags to use
44
+ on the form to request an account unlock.
45
+ unlock_account_request_button :: The text to use on the unlock account request button.
46
+ unlock_account_request_notice_flash :: The flash notice to display upon successful sending of
47
+ the unlock account email.
48
+ unlock_account_request_redirect :: Where to redirect after account unlock email is sent.
49
+ unlock_account_request_route :: The route to the unlock account request action.
50
+ unlock_account_requires_password? :: Whether a password is required when unlocking accounts,
51
+ false by default. May want to set to true if not
52
+ allowing password resets.
53
+ unlock_account_route :: Alias for lockout_route.
54
+
55
+ == Auth Methods
56
+
57
+ account_from_unlock_key(key) :: Retrieve the account using the given verify
58
+ account key, or return nil if no account
59
+ matches.
60
+ after_unlock_account :: Run arbitrary code after a successful account unlock.
61
+ after_unlock_account_request :: Run arbitrary code after a successful account
62
+ unlock request.
63
+ before_unlock_account :: Run arbitrary code before unlocking an account.
64
+ before_unlock_account_request :: Run arbitrary code before sending an account
65
+ unlock email.
66
+ before_lockout_route :: Run arbitrary code before handling an unlock account route.
67
+ clear_invalid_login_attempts :: Clear any stored login failures or lockouts for
68
+ the current account.
69
+ create_unlock_account_email :: A Mail::Message for the account unlock email to send.
70
+ generate_unlock_account_key :: A random string to use for a new unlock account key.
71
+ get_unlock_account_key :: Retrieve the unlock account key for the current account.
72
+ invalid_login_attempt :: Record an invalid login attempt, incrementing the
73
+ number of login failures, and possibly locking out
74
+ the account.
75
+ locked_out? :: Whether the current account is locked out.
76
+ send_unlock_account_email :: Send the account unlock email.
77
+ unlock_account_email_body :: The body to use for the unlock account email.
78
+ unlock_account_email_link :: The link to the unlock account form to include in the
79
+ unlock account email.
80
+ unlock_account :: Unlock the account.
81
+ unlock_account_key :: The unlock account key for the current account.
82
+ unlock_account_request_view :: The HTML to use for the unlock account request form.
83
+ unlock_account_view :: The HTML to use for the unlock account form.
@@ -0,0 +1,27 @@
1
+ = Documentation for Login Feature
2
+
3
+ The login feature implements a login page. It's the most commonly
4
+ used feature.
5
+
6
+ == Auth Value Methods
7
+
8
+ login_additional_form_tags :: HTML fragment containing additional form
9
+ tags to use on the login form.
10
+ login_button :: The text to use for the login button.
11
+ login_error_flash :: The flash error to show for an unsuccesful login.
12
+ login_form_footer :: A message to display after the login form.
13
+ login_notice_flash :: The flash notice to show after successful login.
14
+ login_redirect :: Where to redirect after a sucessful login.
15
+ login_route :: The route to the login action.
16
+
17
+ == Auth Methods
18
+
19
+ after_login :: Run arbitrary code after a successful login.
20
+ after_login_failure :: Run arbitrary code after a login failure due to
21
+ an invalid password.
22
+ before_login :: Run arbitrary code after password has been checked, but
23
+ before updating the session.
24
+ before_login_attempt :: Run arbitrary code after an account has been
25
+ located, but before the password has been checked.
26
+ before_login_route :: Run arbitrary code before handling a login route.
27
+ login_view :: The HTML to use for the login form.
@@ -0,0 +1,50 @@
1
+ = Documentation for Login Password Requirements Base Feature
2
+
3
+ The login password requirements base feature is automatically loaded when you
4
+ use a Rodauth feature that requires setting logins or passwords.
5
+
6
+ == Auth Value Methods
7
+
8
+ login_confirm_label :: The label to use for login confirmations.
9
+ login_confirm_param :: The parameter name to use for login confirmations.
10
+ login_does_not_meet_requirements_message :: The error message to display when
11
+ the login does not meet the
12
+ requirements you have set.
13
+ login_minimum_length :: The minimum length for logins, 3 by default.
14
+ login_too_short_message :: The error message fragment to show if the login is
15
+ too short.
16
+ logins_do_not_match_message :: The error message to display when login and
17
+ login confirmation do not match.
18
+ password_confirm_label :: The label to use for password confirmations.
19
+ password_confirm_param :: The parameter name to use for password confirmations.
20
+ password_does_not_meet_requirements_message :: The error message to display when
21
+ the password does not meet the
22
+ requirements you have set.
23
+ password_hash_cost :: The bcrypt cost to use for the password hash.
24
+ password_minimum_length :: The minimum length for passwords, 6 by default.
25
+ password_too_short_message :: The error message fragment to show if the password
26
+ is too short.
27
+ passwords_do_not_match_message :: The error message to display when password
28
+ and password confirmation do not match.
29
+ require_email_address_logins? :: Whether logins need to be valid email addresses,
30
+ true by default.
31
+ require_login_confirmation? :: Whether login confirmations are required when
32
+ changing logins or creating accounts.
33
+ require_password_confirmation? :: Whether password confirmations are required
34
+ when changing/resetting passwords and creating
35
+ accounts.
36
+ same_as_existing_password_message :: The error message to display when a new
37
+ password is the same as the existing password.
38
+
39
+ == Auth Methods
40
+
41
+ login_meets_requirements?(login) :: Whether the given login meets the requirements.
42
+ By default, just checks that the login is a
43
+ valid email address.
44
+ password_meets_requirements?(password) :: Whether the given password meets the
45
+ requirements. Can be used to implement
46
+ complexity requirements for passwords.
47
+ password_hash(password) :: A hash of the given password.
48
+ set_password(password) :: Set the password for the current account to the given
49
+ password.
50
+
@@ -0,0 +1,21 @@
1
+ = Documentation for Logout Feature
2
+
3
+ The logout feature implements a logout button, which clears the session.
4
+ It is the simplest feature.
5
+
6
+ == Auth Value Methods
7
+
8
+ logout_additional_form_tags :: HTML fragment containing additional form
9
+ tags to use on the logout form.
10
+ logout_button :: The text to use for the logout button.
11
+ logout_notice_flash :: The flash notice to show after logout.
12
+ logout_redirect :: Where to redirect after a logout.
13
+ logout_route :: The route to the logout action.
14
+
15
+ == Auth Methods
16
+
17
+ after_logout :: Run arbitrary code after logout.
18
+ before_logout :: Run arbitrary code before logout.
19
+ before_logout_route :: Run arbitrary code before handling a logout route.
20
+ logout :: Log the user out, by default clearing the session.
21
+ logout_view :: The HTML to use for the logout form.
@@ -0,0 +1,100 @@
1
+ = Documentation for OTP Feature
2
+
3
+ The otp feature implements a 2 factor authentication via time-based one-time
4
+ passwords (TOTP). It supports signing up for 2 factor authentication, logging
5
+ in with authentication codes, and disabling two factor authentication.
6
+
7
+ The otp feature requires the rotp and rqrcode gems.
8
+
9
+ == Auth Value Methods
10
+
11
+ otp_already_setup_error_flash :: The flash error to show if going to the OTP setup
12
+ page when OTP is already setup.
13
+ otp_already_setup_redirect :: Where to redirect if going to the OTP setup page when OTP
14
+ has already been setup.
15
+ otp_auth_additional_form_tags :: HTML fragment containing additional form tags to use on
16
+ the OTP authentication form.
17
+ otp_auth_button :: Text to use for button on OTP authentication form.
18
+ otp_auth_error_flash :: The flash error to show if unable to authenticate via OTP.
19
+ otp_auth_failures_limit :: The number of allowed OTP authentication failures before locking
20
+ out.
21
+ otp_auth_form_footer :: A footer to display at the bottom of the OTP authentication form.
22
+ otp_auth_label :: The label for the OTP authentication code.
23
+ otp_auth_param :: The parameter name for the OTP authentication code.
24
+ otp_auth_route :: The route to the OTP authentication action.
25
+ otp_class :: The class to use for OTP authentication (default: ROTP::TOTP)
26
+ otp_digits :: The number of digits to use in OTP authentication codes (rotp's default is 6).
27
+ otp_disable_additional_form_tags :: HTML fragment containing additional form tags to use on
28
+ the from to disable OTP authentication.
29
+ otp_disable_button :: The text to use for button on form to disable OTP authentication.
30
+ otp_disable_error_flash :: The flash error to show if unable to disable OTP authentication.
31
+ otp_disable_notice_flash :: The flash notice to show after disabling OTP authentication.
32
+ otp_disable_redirect :: Where to redirect after disabling OTP authentication.
33
+ otp_disable_route :: The route to the OTP disable action.
34
+ otp_invalid_auth_code_message :: The error message to show when an invalid OTP authentication
35
+ code is used.
36
+ otp_invalid_secret_message :: The error message to show when an invalid OTP secret is submitted
37
+ during OTP setup.
38
+ otp_interval :: The number of seconds in which to rotate TOTP auth codes (rotp's default is 300).
39
+ otp_issuer :: The issuer to use in the OTP provisioning URL. Defaults to the host name of the
40
+ request.
41
+ otp_keys_id_column :: The column in the otp_keys_table containing the account id.
42
+ otp_keys_column :: The column in the otp_keys_table containing the OTP secret.
43
+ otp_keys_failures_column :: The column in the otp_keys_table containing the
44
+ number of OTP authentication failures.
45
+ otp_keys_last_use_column :: The column in otp_keys_table containing the last authentication
46
+ timestamp.
47
+ otp_keys_table :: The table name containing the OTP secrets.
48
+ otp_lockout_redirect :: Where to redirect if going to OTP authentication page and OTP
49
+ authentication has been locked out.
50
+ otp_lockout_error_flash :: The flash error show show when OTP authentication has been locked
51
+ out due to numerous authentication failures.
52
+ otp_modifications_require_password? :: Whether modifying OTP settings requires reentering the
53
+ password for the account, true by default.
54
+ otp_session_key :: The session key used to store whether the user has authenticated via OTP.
55
+ otp_setup_additional_form_tags :: HTML fragment containing additional form tags when setting up
56
+ OTP authentication.
57
+ otp_setup_button :: Text for the button when setting up OTP authentication.
58
+ otp_setup_error_flash :: The flash error to show if OTP authentication setup was not successful.
59
+ otp_setup_notice_flash :: The flash notice to show if OTP authentication setup was successful.
60
+ otp_setup_param :: The parameter name used for the OTP secret when setting up OTP authentication.
61
+ otp_setup_redirect :: Where to redirect after sucessful OTP authentication setup.
62
+ otp_setup_route :: The route to the OTP setup action.
63
+
64
+ == Auth Methods
65
+
66
+ after_otp_authentication_failure :: Run arbitrary code after OTP authentication failure.
67
+ after_otp_disable :: Run arbitrary code after OTP authentication has been disabled.
68
+ after_otp_setup :: Run arbitrary code after OTP authentication has been setup.
69
+ before_otp_authentication :: Run arbitrary code before OTP authentication.
70
+ before_otp_authentication_route :: Run arbitrary code before handling an OTP authentication route.
71
+ before_otp_setup :: Run arbitrary code before OTP authentication setup.
72
+ before_otp_setup_route :: Run arbitrary code before handling an OTP authentication setup route.
73
+ before_otp_disable :: Run arbitrary code before OTP authentication disabling.
74
+ before_otp_disable_route :: Run arbitrary code before handling an OTP authentication disable route.
75
+ otp :: The object used for verifying OTP authentication attempts.
76
+ otp_add_key(secret) :: Add an OTP key for the current account with the given secret.
77
+ otp_auth_view :: The HTML to use for the OTP authentication form.
78
+ otp_disable_view :: The HTML to use for the OTP disable form.
79
+ otp_exists? :: Whether the current account has setup OTP.
80
+ otp_key :: The stored OTP secret for the account.
81
+ otp_locked_out? :: Whether the current account has been locked out of OTP authentication.
82
+ otp_new_secret :: A new secret to use when setting up OTP.
83
+ otp_provisioning_name :: The provisioning name to use during OTP setup, defaults to the
84
+ account's email.
85
+ otp_provisioning_uri :: The provisioning URI displayed during OTP setup.
86
+ otp_qr_code :: The QR code containing the otp_provisioning_uri, by default an SVG image.
87
+ otp_record_authentication_failure :: Record an OTP authentication failure.
88
+ otp_remove :: Removes all stored OTP data for the current account.
89
+ otp_remove_auth_failures :: Removes OTP authentication failures for the current account,
90
+ used after successful OTP authentication.
91
+ otp_setup_view :: The HTML to use for the form to setup OTP authentication.
92
+ otp_tmp_key(secret) :: Set the secret to use for the OTP key.
93
+ otp_update_last_use :: Update the last time OTP authentication was successful for the
94
+ account. Return true if the authentication should be allowed, or
95
+ false if it should not be allowed because the last authentication
96
+ was too recent and indicates the possible reuse of a TOTP
97
+ authentication code.
98
+ otp_valid_code?(auth_code) :: Whether the given code is the currently valid OTP auth
99
+ code for the account.
100
+ otp_valid_key?(secret) :: Whether the given secret is a valid OTP secret.
@@ -0,0 +1,50 @@
1
+ = Documentation for Password Complexity Feature
2
+
3
+ The password complexity feature implements more sophisticated password
4
+ complexity checks. It is not recommended to use this feature unless
5
+ you have a policy that requires it, as users that would not choose a
6
+ good password in the absense of password complexity requirements are
7
+ unlikely to choose a good password if you have password complexity
8
+ requirements.
9
+
10
+ Checks:
11
+
12
+ * Contains characters in multiple character groups, by default at
13
+ least 3 of uppercase letters, lowercase letters, numbers, and
14
+ everything else, unless the password is over 11 characters.
15
+ * Does not contain any invalid patterns, by default patterns like
16
+ +qwerty+, +azerty+, +asdf+, +zxcv+, or number sequences such as +123+.
17
+ * Does not contain a certain number of repeating characters, by default 3.
18
+ * Is not a dictionary word, after stripping off numbers from the prefix
19
+ and suffix and replacing some common numbers/symbols often substituted
20
+ for letters, catching things like <tt>P@$$w0rd1</tt>.
21
+
22
+ == Auth Value Methods
23
+
24
+ password_character_groups :: An array of regular expressions representing
25
+ different character groups.
26
+ password_dictionary :: A Array/Hash/Set containing dictionary words, which cannot
27
+ match the password.
28
+ password_dictionary_file :: A file containing dictionary words, which will not be allowed.
29
+ By default, <tt>/usr/share/dict/words</tt> if present. Set to
30
+ false to not use a password dictionary. Note that this is only
31
+ used during initialization, and cannot refer to request-specific
32
+ state, unlike most other settings.
33
+ password_in_dictionary_message :: The error message fragment to show if the password
34
+ is derived from a word in a dictionary.
35
+ password_invalid_pattern :: A regexp where any match is considered an invalid password.
36
+ For multiple sequences, use +Regexp.union+.
37
+ password_invalid_pattern_message :: The error message fragment to show if the password
38
+ matches the invalid pattern.
39
+ password_max_length_for_groups_check :: The number of characters above which
40
+ to skip the checks for character groups.
41
+ password_max_repeating_characters :: The maximum number of repeating characters allowed.
42
+ password_min_groups :: The minimum number of character groups the password
43
+ has to contain if it is less than
44
+ +password_max_length_for_groups_check+ characters.
45
+ password_not_enough_character_groups_message :: The error message fragment to show if the
46
+ password does not contain characters from
47
+ enough character groups.
48
+ password_too_many_repeating_characters_message :: The error message fragment to show if the
49
+ password contains too many repeating
50
+ characters.
@@ -0,0 +1,52 @@
1
+ = Documentation for Password Expiration Feature
2
+
3
+ The password expiration feature requires that users change their
4
+ password on login if it has expired (default: every 90 days). You can
5
+ force password expiration checks for all logged in users by adding
6
+ the following code to your route block:
7
+
8
+ rodauth.require_current_password
9
+
10
+ Additionally, you can set a minimum amount of time after a password
11
+ is changed until it can be changed again. By default this is not
12
+ enabled, but it can be enabled by setting +allow_password_change_after+
13
+ to a positive number of seconds.
14
+
15
+ It is not recommended to use this feature unless you have a policy that
16
+ requires it, as password expiration in general results in users chosing
17
+ weaker passwords. When asked to change their password, many users choose
18
+ a password that is based on their previous password, so forcing password
19
+ expiration is in general a net loss from a security perspective.
20
+
21
+ == Auth Value Methods
22
+
23
+ allow_password_change_after :: How long in seconds after the last password change
24
+ until another password change is allowed (0 by default).
25
+ password_expiration_error_flash :: The flash error to display when the account's
26
+ password has expired and needs to be changed.
27
+ password_not_changeable_yet_error_flash :: The flash error to display when not
28
+ enough time has elapsed since the last
29
+ password change and an attempt is made
30
+ to change the password.
31
+ password_not_changeable_yet_redirect :: Where to redirect if the password cannot
32
+ be changed yet.
33
+ password_change_needed_redirect :: Where to redirect if a password needs to be
34
+ changes.
35
+ password_changed_at_session_key :: The key in the session storing the timestamp the password
36
+ was changed at.
37
+ password_expiration_default :: If the last password change time for an account cannot
38
+ be determined, whether to consider the account expired,
39
+ false by default.
40
+ password_expiration_table :: The table holding the password last changed timestamps.
41
+ password_expiration_id_column :: The column in the +password_expiration_table+ containing
42
+ the account's id.
43
+ password_expiration_changed_at_column :: The column in the +password_expiration_table+
44
+ containing the timestamp
45
+ require_password_change_after :: How long in seconds until a password change is
46
+ required (90 days by default).
47
+
48
+ == Auth Methods
49
+
50
+ password_expired? :: Whether the password has expired for the related account.
51
+ update_password_changed_at :: Update the password last changed timestamp for the
52
+ current account.