rodauth 1.22.0 → 1.23.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +12 -0
  3. data/README.rdoc +5 -3
  4. data/doc/email_base.rdoc +1 -0
  5. data/doc/release_notes/1.23.0.txt +32 -0
  6. data/lib/rodauth.rb +5 -2
  7. data/lib/rodauth/features/base.rb +8 -0
  8. data/lib/rodauth/features/change_password_notify.rb +1 -1
  9. data/lib/rodauth/features/create_account.rb +1 -1
  10. data/lib/rodauth/features/email_auth.rb +3 -4
  11. data/lib/rodauth/features/email_base.rb +7 -2
  12. data/lib/rodauth/features/lockout.rb +1 -1
  13. data/lib/rodauth/features/login.rb +6 -2
  14. data/lib/rodauth/features/otp.rb +6 -3
  15. data/lib/rodauth/features/password_expiration.rb +1 -1
  16. data/lib/rodauth/features/recovery_codes.rb +3 -3
  17. data/lib/rodauth/features/reset_password.rb +2 -2
  18. data/lib/rodauth/features/sms_codes.rb +5 -5
  19. data/lib/rodauth/features/verify_account.rb +2 -2
  20. data/lib/rodauth/features/verify_login_change.rb +1 -1
  21. data/lib/rodauth/version.rb +1 -1
  22. data/templates/email-auth-request-form.str +2 -2
  23. data/templates/reset-password-request.str +3 -3
  24. data/templates/unlock-account-request.str +3 -3
  25. data/templates/verify-account-resend.str +3 -3
  26. metadata +5 -43
  27. data/Rakefile +0 -179
  28. data/spec/account_expiration_spec.rb +0 -225
  29. data/spec/all.rb +0 -1
  30. data/spec/change_login_spec.rb +0 -156
  31. data/spec/change_password_notify_spec.rb +0 -33
  32. data/spec/change_password_spec.rb +0 -202
  33. data/spec/close_account_spec.rb +0 -162
  34. data/spec/confirm_password_spec.rb +0 -70
  35. data/spec/create_account_spec.rb +0 -127
  36. data/spec/disallow_common_passwords_spec.rb +0 -93
  37. data/spec/disallow_password_reuse_spec.rb +0 -179
  38. data/spec/email_auth_spec.rb +0 -285
  39. data/spec/http_basic_auth_spec.rb +0 -143
  40. data/spec/jwt_cors_spec.rb +0 -57
  41. data/spec/jwt_refresh_spec.rb +0 -256
  42. data/spec/jwt_spec.rb +0 -235
  43. data/spec/lockout_spec.rb +0 -250
  44. data/spec/login_spec.rb +0 -328
  45. data/spec/migrate/001_tables.rb +0 -184
  46. data/spec/migrate/002_account_password_hash_column.rb +0 -11
  47. data/spec/migrate_password/001_tables.rb +0 -73
  48. data/spec/migrate_travis/001_tables.rb +0 -141
  49. data/spec/password_complexity_spec.rb +0 -109
  50. data/spec/password_expiration_spec.rb +0 -244
  51. data/spec/password_grace_period_spec.rb +0 -93
  52. data/spec/remember_spec.rb +0 -451
  53. data/spec/reset_password_spec.rb +0 -229
  54. data/spec/rodauth_spec.rb +0 -343
  55. data/spec/session_expiration_spec.rb +0 -58
  56. data/spec/single_session_spec.rb +0 -127
  57. data/spec/spec_helper.rb +0 -327
  58. data/spec/two_factor_spec.rb +0 -1462
  59. data/spec/update_password_hash_spec.rb +0 -40
  60. data/spec/verify_account_grace_period_spec.rb +0 -171
  61. data/spec/verify_account_spec.rb +0 -240
  62. data/spec/verify_change_login_spec.rb +0 -46
  63. data/spec/verify_login_change_spec.rb +0 -232
  64. data/spec/views/layout-other.str +0 -11
  65. data/spec/views/layout.str +0 -11
  66. data/spec/views/login.str +0 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3379479fde31b70cd341f7d862088a1c29f850a4293bbf08a4ddced9f152a026
4
- data.tar.gz: 3ec8abcd54a4da0a230d8d5a064d75febc247ee6ed35e3282b9b3ab2e1dde21d
3
+ metadata.gz: e4306ff08603b48a95bc543ffe53188d28d71ffdf8bf7427b65f4384eab8f430
4
+ data.tar.gz: a7319dbdfa10b43743ec76f32453ef0d65f3b1a30945f9c3988c7b87c6a639a2
5
5
  SHA512:
6
- metadata.gz: 6617d309568f8292c01d00343fdea602692fc6ca0be38d9846f0e8415a6da13cee10007e3286e03e2eb9170f693d4b2420861167225aab35ebea87b111627819
7
- data.tar.gz: 30efd30667ccb724c0796aa58123beb4d2711ac92a032be21d900ae74391901521d60b6b4806463494fc748461ecac3adb28ce3bf7c1956e6dcd4b72b0fea963
6
+ metadata.gz: 21d00b963f35ce2f356ba139cc07f0e0612484cc55a42efe5502f8401b8c373eeab2b2c71c92f68a2886d523e0b73a5fda80b5137fecec5b26ca9a0f517a3040
7
+ data.tar.gz: c5947144c88fbe98c31a2a24cd7a349953f8ff1717b9258f39ff58cbd98de85fb36abf6912b51496b6965ed7367f3fc13aad702db9443e587d9bde15dfc7c7c7
data/CHANGELOG CHANGED
@@ -1,3 +1,15 @@
1
+ === 1.23.0 (2020-03-06)
2
+
3
+ * Remove specs from the gem to reduce gem size by over 20% (jeremyevans)
4
+
5
+ * Make rodauth.authenticated? return true on OTP setup page (jeremyevans) (#68)
6
+
7
+ * Display link to email auth request form when user has entered login and incorrect password if using email_auth feature (janko) (#65)
8
+
9
+ * Add *_path and *_url methods for all *_route methods (janko) (#64)
10
+
11
+ * Add send_email configuration method for configuring how email is sent (janko) (#63)
12
+
1
13
  === 1.22.0 (2019-10-29)
2
14
 
3
15
  * Add jwt_cors feature to handle Cross-Origin Resource Sharing when using the jwt feature (jeremyevans)
@@ -931,6 +931,10 @@ verified_account? :: (verify_grace_period feature) Whether the account is curren
931
931
  login as they are in the grace period.
932
932
  locked_out? :: (lockout feature) Whether the account for the current session has been
933
933
  locked out.
934
+ *_path :: One of these is added for each of the routes added by Rodauth, giving the
935
+ relative path to the route.
936
+ *_url :: One of these is added for each of the routes added by Rodauth, giving the
937
+ absolute path to the routE.
934
938
 
935
939
  === With Multiple Configurations
936
940
 
@@ -1100,9 +1104,7 @@ Here are some examples of integrating Rodauth into applications that
1100
1104
  don't use Roda:
1101
1105
 
1102
1106
  * {Ginatra, a Sinatra-based git repository viewer}[https://github.com/jeremyevans/ginatra/commit/28108ebec96e8d42596ee55b01c3f7b50c155dd1]
1103
- * {Rodauth's demo site as a Rails application}[https://github.com/jeremyevans/rodauth-demo-rails] (
1104
- This uses the {roda-rails gem}[https://github.com/jeremyevans/roda-rails]
1105
- so that Rodauth uses Rails' CSRF and flash support)
1107
+ * {Rodauth's demo site as a Rails 6 application}[https://github.com/janko/rodauth-demo-rails]
1106
1108
  * {Grape application}[https://github.com/davydovanton/grape-rodauth]
1107
1109
  * {Hanami application}[https://github.com/davydovanton/rodauth_hanami]
1108
1110
 
@@ -25,3 +25,4 @@ email_to :: The email address to send emails to, by default the login of the
25
25
  current account.
26
26
  create_email(subject, body) :: Return a Mail::Message instance with the given subject
27
27
  and body.
28
+ send_email(email) :: Deliver a given Mail::Message instance.
@@ -0,0 +1,32 @@
1
+ = New Features
2
+
3
+ * When the email_auth feature is used, the link to request email
4
+ authentication is now displayed if the user inputs an incorrect
5
+ password. Previously, it was only shown if the user had not
6
+ yet entered a password.
7
+
8
+ * A send_email configuration method has been added, which can be
9
+ overridden to customize email delivery (such as logging such
10
+ email). The configuration method block accepts a Mail::Message
11
+ argument.
12
+
13
+ * All rodauth.*_route methods that return the name of the route
14
+ segment now have rodauth.*_path and rodauth.*_url equivalents,
15
+ which return the path and URL for the related routes, respectively.
16
+ The rodauth.*_path methods are useful when constructing links to
17
+ the related Rodauth pages on the same site, and the rodauth.*_url
18
+ methods are useful for constructing link to the Rodauth pages from
19
+ other sites or in email.
20
+
21
+ = Other Improvements
22
+
23
+ * Specs have been removed from the gem file, reducing gem size by
24
+ over 20%.
25
+
26
+ * rodauth.authenticated? now returns true on the OTP setup page
27
+ when using the otp feature. Previously, this method returned
28
+ false on the OTP setup page. However, as the user has not yet
29
+ setup OTP when viewing this page, they should be considered
30
+ fully authenticated, as they would be if they viewed any other
31
+ page before setting up OTP. This change probably only affects
32
+ cases where the layout uses rodauth.authenticated?.
@@ -101,11 +101,14 @@ module Rodauth
101
101
  attr_accessor :configuration
102
102
 
103
103
  def route(name=feature_name, default=name.to_s.tr('_', '-'), &block)
104
- auth_value_method "#{name}_route", default
104
+ route_meth = :"#{name}_route"
105
+ auth_value_method route_meth, default
106
+
107
+ define_method(:"#{name}_path") { route_path(send(route_meth)) }
108
+ define_method(:"#{name}_url") { route_url(send(route_meth)) }
105
109
 
106
110
  handle_meth = :"handle_#{name}"
107
111
  internal_handle_meth = :"_#{handle_meth}"
108
- route_meth = :"#{name}_route"
109
112
  before route_meth
110
113
 
111
114
  unless block.arity == 1
@@ -387,6 +387,14 @@ module Rodauth
387
387
  request.redirect(path)
388
388
  end
389
389
 
390
+ def route_path(route)
391
+ "#{prefix}/#{route}"
392
+ end
393
+
394
+ def route_url(route)
395
+ "#{request.base_url}#{route_path(route)}"
396
+ end
397
+
390
398
  def transaction(opts={}, &block)
391
399
  db.transaction(opts, &block)
392
400
  end
@@ -17,7 +17,7 @@ module Rodauth
17
17
  private
18
18
 
19
19
  def send_password_changed_email
20
- create_password_changed_email.deliver!
20
+ send_email(create_password_changed_email)
21
21
  end
22
22
 
23
23
  def create_password_changed_email
@@ -89,7 +89,7 @@ module Rodauth
89
89
  end
90
90
 
91
91
  def create_account_link
92
- "<p><a href=\"#{prefix}/#{create_account_route}\">Create a New Account</a></p>"
92
+ "<p><a href=\"#{create_account_path}\">Create a New Account</a></p>"
93
93
  end
94
94
 
95
95
  def login_form_footer
@@ -135,7 +135,7 @@ module Rodauth
135
135
  end
136
136
 
137
137
  def send_email_auth_email
138
- create_email_auth_email.deliver!
138
+ send_email(create_email_auth_email)
139
139
  end
140
140
 
141
141
  def email_auth_email_link
@@ -150,7 +150,7 @@ module Rodauth
150
150
 
151
151
  def login_form_footer
152
152
  footer = super
153
- footer += @email_auth_request_form if @email_auth_request_form
153
+ footer += email_auth_request_form if valid_login_entered?
154
154
  footer
155
155
  end
156
156
 
@@ -166,9 +166,8 @@ module Rodauth
166
166
  redirect email_auth_email_sent_redirect
167
167
  else
168
168
  # If the account has a password hash, allow password login, but
169
- # show form below to also login via email link.
169
+ # we will show form below to also login via email link.
170
170
  super
171
- @email_auth_request_form = email_auth_request_form
172
171
  end
173
172
  end
174
173
 
@@ -14,7 +14,8 @@ module Rodauth
14
14
 
15
15
  auth_methods(
16
16
  :create_email,
17
- :email_to
17
+ :email_to,
18
+ :send_email
18
19
  )
19
20
 
20
21
  def post_configure
@@ -24,6 +25,10 @@ module Rodauth
24
25
 
25
26
  private
26
27
 
28
+ def send_email(email)
29
+ email.deliver!
30
+ end
31
+
27
32
  def create_email(subject, body)
28
33
  create_email_to(email_to, subject, body)
29
34
  end
@@ -46,7 +51,7 @@ module Rodauth
46
51
  end
47
52
 
48
53
  def token_link(route, param, key)
49
- "#{request.base_url}#{prefix}/#{route}?#{param}=#{account_id}#{token_separator}#{convert_email_token_key(key)}"
54
+ "#{route_url(route)}?#{param}=#{account_id}#{token_separator}#{convert_email_token_key(key)}"
50
55
  end
51
56
 
52
57
  def convert_email_token_key(key)
@@ -218,7 +218,7 @@ module Rodauth
218
218
 
219
219
  def send_unlock_account_email
220
220
  @unlock_account_key_value = get_unlock_account_key
221
- create_unlock_account_email.deliver!
221
+ send_email(create_unlock_account_email)
222
222
  end
223
223
 
224
224
  def unlock_account_email_link
@@ -69,12 +69,16 @@ module Rodauth
69
69
 
70
70
  def skip_login_field_on_login?
71
71
  return false unless use_multi_phase_login?
72
- @valid_login_entered
72
+ valid_login_entered?
73
73
  end
74
74
 
75
75
  def skip_password_field_on_login?
76
76
  return false unless use_multi_phase_login?
77
- @valid_login_entered != true
77
+ !valid_login_entered?
78
+ end
79
+
80
+ def valid_login_entered?
81
+ @valid_login_entered
78
82
  end
79
83
 
80
84
  def login_hidden_field
@@ -219,15 +219,17 @@ module Rodauth
219
219
  end
220
220
 
221
221
  def two_factor_authentication_setup?
222
- super || otp_exists?
222
+ return true if super
223
+ return false if @otp_tmp_key
224
+ otp_exists?
223
225
  end
224
226
 
225
227
  def two_factor_need_setup_redirect
226
- "#{prefix}/#{otp_setup_route}"
228
+ otp_setup_path
227
229
  end
228
230
 
229
231
  def two_factor_auth_required_redirect
230
- "#{prefix}/#{otp_auth_route}"
232
+ otp_auth_path
231
233
  end
232
234
 
233
235
  def two_factor_remove
@@ -388,6 +390,7 @@ module Rodauth
388
390
  end
389
391
 
390
392
  def _otp_tmp_key(secret)
393
+ @otp_tmp_key = true
391
394
  @otp_user_key = nil
392
395
  @otp_key = secret
393
396
  end
@@ -8,7 +8,7 @@ module Rodauth
8
8
  error_flash "Your password cannot be changed yet", 'password_not_changeable_yet'
9
9
 
10
10
  redirect :password_not_changeable_yet
11
- redirect(:password_change_needed){"#{prefix}/#{change_password_route}"}
11
+ redirect(:password_change_needed){change_password_path}
12
12
 
13
13
  auth_value_method :allow_password_change_after, -86400
14
14
  auth_value_method :require_password_change_after, 90*86400
@@ -23,8 +23,8 @@ module Rodauth
23
23
 
24
24
  notice_flash "Additional authentication recovery codes have been added.", 'recovery_codes_added'
25
25
 
26
- redirect(:recovery_auth){"#{prefix}/#{recovery_auth_route}"}
27
- redirect(:add_recovery_codes){"#{prefix}/#{recovery_codes_route}"}
26
+ redirect(:recovery_auth){recovery_auth_path}
27
+ redirect(:add_recovery_codes){recovery_codes_path}
28
28
 
29
29
  loaded_templates %w'add-recovery-codes recovery-auth recovery-codes password-field'
30
30
  view 'add-recovery-codes', 'Authentication Recovery Codes', 'add_recovery_codes'
@@ -146,7 +146,7 @@ module Rodauth
146
146
  end
147
147
 
148
148
  def otp_auth_form_footer
149
- "#{super if defined?(super)}<p><a href=\"#{recovery_auth_route}\">Authenticate using recovery code</a></p>"
149
+ "#{super if defined?(super)}<p><a href=\"#{recovery_auth_path}\">Authenticate using recovery code</a></p>"
150
150
  end
151
151
 
152
152
  def otp_lockout_redirect
@@ -179,7 +179,7 @@ module Rodauth
179
179
  end
180
180
 
181
181
  def send_reset_password_email
182
- create_reset_password_email.deliver!
182
+ send_email(create_reset_password_email)
183
183
  end
184
184
 
185
185
  def reset_password_email_link
@@ -197,7 +197,7 @@ module Rodauth
197
197
  end
198
198
 
199
199
  def reset_password_request_link
200
- "<p><a href=\"#{prefix}/#{reset_password_request_route}\">Forgot Password?</a></p>"
200
+ "<p><a href=\"#{reset_password_request_path}\">Forgot Password?</a></p>"
201
201
  end
202
202
 
203
203
  def set_reset_password_email_last_sent
@@ -45,10 +45,10 @@ module Rodauth
45
45
  redirect :sms_already_setup
46
46
  redirect :sms_confirm
47
47
  redirect :sms_disable
48
- redirect(:sms_auth){"#{prefix}/#{sms_auth_route}"}
49
- redirect(:sms_needs_confirmation){"#{prefix}/#{sms_confirm_route}"}
50
- redirect(:sms_needs_setup){"#{prefix}/#{sms_setup_route}"}
51
- redirect(:sms_request){"#{prefix}/#{sms_request_route}"}
48
+ redirect(:sms_auth){sms_auth_path}
49
+ redirect(:sms_needs_confirmation){sms_confirm_path}
50
+ redirect(:sms_needs_setup){sms_setup_path}
51
+ redirect(:sms_request){sms_request_path}
52
52
  redirect(:sms_lockout){_two_factor_auth_required_redirect}
53
53
 
54
54
  loaded_templates %w'sms-auth sms-confirm sms-disable sms-request sms-setup sms-code-field password-field'
@@ -311,7 +311,7 @@ module Rodauth
311
311
  end
312
312
 
313
313
  def otp_auth_form_footer
314
- "#{super if defined?(super)}#{"<p><a href=\"#{sms_request_route}\">Authenticate using SMS code</a></p>" if sms_available?}"
314
+ "#{super if defined?(super)}#{"<p><a href=\"#{sms_request_path}\">Authenticate using SMS code</a></p>" if sms_available?}"
315
315
  end
316
316
 
317
317
  def otp_lockout_redirect
@@ -201,7 +201,7 @@ module Rodauth
201
201
  end
202
202
 
203
203
  def send_verify_account_email
204
- create_verify_account_email.deliver!
204
+ send_email(create_verify_account_email)
205
205
  end
206
206
 
207
207
  def verify_account_email_link
@@ -225,7 +225,7 @@ module Rodauth
225
225
  end
226
226
 
227
227
  def verify_account_resend_link
228
- "<p><a href=\"#{prefix}/#{verify_account_resend_route}\">Resend Verify Account Information</a></p>"
228
+ "<p><a href=\"#{verify_account_resend_path}\">Resend Verify Account Information</a></p>"
229
229
  end
230
230
 
231
231
  def create_account_set_password?
@@ -118,7 +118,7 @@ module Rodauth
118
118
  end
119
119
 
120
120
  def send_verify_login_change_email(login)
121
- create_verify_login_change_email(login).deliver!
121
+ send_email(create_verify_login_change_email(login))
122
122
  end
123
123
 
124
124
  def verify_login_change_email_link
@@ -6,7 +6,7 @@ module Rodauth
6
6
  MAJOR = 1
7
7
 
8
8
  # The minor version of Rodauth, updated for new feature releases of Rodauth.
9
- MINOR = 22
9
+ MINOR = 23
10
10
 
11
11
  # The patch version of Rodauth, updated only for bug fixes from the last
12
12
  # feature release.
@@ -1,6 +1,6 @@
1
- <form action="#{rodauth.prefix}/#{rodauth.email_auth_request_route}" method="post" class="rodauth form-horizontal" role="form" id="email-auth-request-form">
1
+ <form action="#{rodauth.email_auth_request_path}" method="post" class="rodauth form-horizontal" role="form" id="email-auth-request-form">
2
2
  #{rodauth.email_auth_request_additional_form_tags}
3
- #{rodauth.csrf_tag("#{rodauth.prefix}/#{rodauth.email_auth_request_route}")}
3
+ #{rodauth.csrf_tag(rodauth.email_auth_request_path)}
4
4
  #{rodauth.login_hidden_field}
5
5
  #{rodauth.button(rodauth.email_auth_request_button)}
6
6
  </form>
@@ -1,7 +1,7 @@
1
- <form action="#{rodauth.prefix}/#{rodauth.reset_password_request_route}" method="post" class="rodauth form-horizontal" role="form" id="reset-password-request-form">
1
+ <form action="#{rodauth.reset_password_request_path}" method="post" class="rodauth form-horizontal" role="form" id="reset-password-request-form">
2
2
  #{rodauth.reset_password_request_additional_form_tags}
3
- #{rodauth.csrf_tag("#{rodauth.prefix}/#{rodauth.reset_password_request_route}")}
3
+ #{rodauth.csrf_tag(rodauth.reset_password_request_path)}
4
4
  #{rodauth.reset_password_explanatory_text}
5
- #{(login = rodauth.param_or_nil(rodauth.login_param)) ? "<input type=\"hidden\" name=\"#{rodauth.login_param}\" value=\"#{h login}\"/>" : rodauth.render('login-field')}
5
+ #{rodauth.param_or_nil(rodauth.login_param) ? rodauth.login_hidden_field : rodauth.render('login-field')}
6
6
  #{rodauth.button(rodauth.reset_password_request_button)}
7
7
  </form>
@@ -1,7 +1,7 @@
1
- <form action="#{rodauth.prefix}/#{rodauth.unlock_account_request_route}" method="post" class="rodauth form-horizontal" role="form" id="unlock-account-request-form">
1
+ <form action="#{rodauth.unlock_account_request_path}" method="post" class="rodauth form-horizontal" role="form" id="unlock-account-request-form">
2
2
  #{rodauth.unlock_account_request_additional_form_tags}
3
- #{rodauth.csrf_tag("#{rodauth.prefix}/#{rodauth.unlock_account_request_route}")}
4
- <input type="hidden" name="#{rodauth.login_param}" value="#{h rodauth.param(rodauth.login_param)}"/>
3
+ #{rodauth.csrf_tag(rodauth.unlock_account_request_path)}
4
+ #{rodauth.login_hidden_field}
5
5
  #{rodauth.unlock_account_request_explanatory_text}
6
6
  <input type="submit" class="btn btn-primary inline" value="#{rodauth.unlock_account_request_button}"/>
7
7
  </form>
@@ -1,7 +1,7 @@
1
- <form action="#{rodauth.prefix}/#{rodauth.verify_account_resend_route}" method="post" class="rodauth form-horizontal" role="form" id="verify-account-resend-form">
1
+ <form action="#{rodauth.verify_account_resend_path}" method="post" class="rodauth form-horizontal" role="form" id="verify-account-resend-form">
2
2
  #{rodauth.verify_account_resend_additional_form_tags}
3
- #{rodauth.csrf_tag("#{rodauth.prefix}/#{rodauth.verify_account_resend_route}")}
3
+ #{rodauth.csrf_tag(rodauth.verify_account_resend_path)}
4
4
  #{rodauth.verify_account_resend_explanatory_text}
5
- #{(login = rodauth.param_or_nil(rodauth.login_param)) ? "<input type=\"hidden\" name=\"#{rodauth.login_param}\" value=\"#{h login}\"/>" : rodauth.render('login-field')}
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>
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.22.0
4
+ version: 1.23.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: 2019-10-29 00:00:00.000000000 Z
11
+ date: 2020-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel
@@ -270,11 +270,11 @@ extra_rdoc_files:
270
270
  - doc/release_notes/1.20.0.txt
271
271
  - doc/release_notes/1.21.0.txt
272
272
  - doc/release_notes/1.22.0.txt
273
+ - doc/release_notes/1.23.0.txt
273
274
  files:
274
275
  - CHANGELOG
275
276
  - MIT-LICENSE
276
277
  - README.rdoc
277
- - Rakefile
278
278
  - dict/top-10_000-passwords.txt
279
279
  - doc/account_expiration.rdoc
280
280
  - doc/base.rdoc
@@ -318,6 +318,7 @@ files:
318
318
  - doc/release_notes/1.20.0.txt
319
319
  - doc/release_notes/1.21.0.txt
320
320
  - doc/release_notes/1.22.0.txt
321
+ - doc/release_notes/1.23.0.txt
321
322
  - doc/release_notes/1.3.0.txt
322
323
  - doc/release_notes/1.4.0.txt
323
324
  - doc/release_notes/1.5.0.txt
@@ -376,45 +377,6 @@ files:
376
377
  - lib/rodauth/features/verify_login_change.rb
377
378
  - lib/rodauth/migrations.rb
378
379
  - lib/rodauth/version.rb
379
- - spec/account_expiration_spec.rb
380
- - spec/all.rb
381
- - spec/change_login_spec.rb
382
- - spec/change_password_notify_spec.rb
383
- - spec/change_password_spec.rb
384
- - spec/close_account_spec.rb
385
- - spec/confirm_password_spec.rb
386
- - spec/create_account_spec.rb
387
- - spec/disallow_common_passwords_spec.rb
388
- - spec/disallow_password_reuse_spec.rb
389
- - spec/email_auth_spec.rb
390
- - spec/http_basic_auth_spec.rb
391
- - spec/jwt_cors_spec.rb
392
- - spec/jwt_refresh_spec.rb
393
- - spec/jwt_spec.rb
394
- - spec/lockout_spec.rb
395
- - spec/login_spec.rb
396
- - spec/migrate/001_tables.rb
397
- - spec/migrate/002_account_password_hash_column.rb
398
- - spec/migrate_password/001_tables.rb
399
- - spec/migrate_travis/001_tables.rb
400
- - spec/password_complexity_spec.rb
401
- - spec/password_expiration_spec.rb
402
- - spec/password_grace_period_spec.rb
403
- - spec/remember_spec.rb
404
- - spec/reset_password_spec.rb
405
- - spec/rodauth_spec.rb
406
- - spec/session_expiration_spec.rb
407
- - spec/single_session_spec.rb
408
- - spec/spec_helper.rb
409
- - spec/two_factor_spec.rb
410
- - spec/update_password_hash_spec.rb
411
- - spec/verify_account_grace_period_spec.rb
412
- - spec/verify_account_spec.rb
413
- - spec/verify_change_login_spec.rb
414
- - spec/verify_login_change_spec.rb
415
- - spec/views/layout-other.str
416
- - spec/views/layout.str
417
- - spec/views/login.str
418
380
  - templates/add-recovery-codes.str
419
381
  - templates/button.str
420
382
  - templates/change-login.str
@@ -488,7 +450,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
488
450
  - !ruby/object:Gem::Version
489
451
  version: '0'
490
452
  requirements: []
491
- rubygems_version: 3.0.3
453
+ rubygems_version: 3.1.2
492
454
  signing_key:
493
455
  specification_version: 4
494
456
  summary: Authentication and Account Management Framework for Rack Applications