rodauth-rails 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +36 -0
- data/README.md +69 -20
- data/lib/generators/rodauth/install_generator.rb +21 -3
- data/lib/generators/rodauth/mailer_generator.rb +0 -1
- data/lib/generators/rodauth/templates/app/views/rodauth/_email_auth_request_form.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_field.html.erb +10 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_field_error.html.erb +3 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_global_logout_field.html.erb +6 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_confirm_field.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_display.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_field.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_form.html.erb +9 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_form_footer.html.erb +8 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_form_header.html.erb +3 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_hidden_field.html.erb +1 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_new_password_field.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_otp_auth_code_field.html.erb +8 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_password_confirm_field.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_password_field.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_recovery_code_field.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_recovery_codes_form.html.erb +6 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_sms_code_field.html.erb +8 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_sms_phone_field.html.erb +8 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/_submit.html.erb +3 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/add_recovery_codes.html.erb +6 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/change_login.html.erb +6 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/change_password.html.erb +6 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/close_account.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/confirm_password.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/create_account.html.erb +7 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/email_auth.html.erb +3 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/login.html.erb +3 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/logout.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/multi_phase_login.html.erb +3 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/otp_auth.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/otp_disable.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/otp_setup.html.erb +23 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/recovery_auth.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/recovery_codes.html.erb +1 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/remember.html.erb +19 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/reset_password.html.erb +5 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/reset_password_request.html.erb +9 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/sms_auth.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/sms_confirm.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/sms_disable.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/sms_request.html.erb +3 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/sms_setup.html.erb +5 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/two_factor_auth.html.erb +5 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/two_factor_disable.html.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/two_factor_manage.html.erb +22 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/unlock_account.html.erb +5 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/unlock_account_request.html.erb +5 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/verify_account.html.erb +5 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/verify_account_resend.html.erb +9 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/verify_login_change.html.erb +3 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/webauthn_auth.html.erb +13 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/webauthn_remove.html.erb +13 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/webauthn_setup.html.erb +13 -0
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/email_auth.text.erb +5 -0
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/password_changed.text.erb +2 -0
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/reset_password.text.erb +5 -0
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/unlock_account.text.erb +5 -0
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/verify_account.text.erb +4 -0
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/verify_login_change.text.erb +10 -0
- data/lib/generators/rodauth/templates/config/initializers/sequel.rb +4 -7
- data/lib/generators/rodauth/templates/db/migrate/create_rodauth.rb +3 -3
- data/lib/generators/rodauth/templates/lib/rodauth_app.rb +15 -26
- data/lib/generators/rodauth/views_generator.rb +0 -9
- data/lib/rodauth/rails.rb +1 -0
- data/lib/rodauth/rails/feature.rb +10 -6
- data/rodauth-rails.gemspec +4 -4
- metadata +69 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32eea791dff9c98b9e78d209ba375d08095f07ec1d0ba0e852e5af83602e2128
|
4
|
+
data.tar.gz: f12a2c57d4f3dee31efd10c6ba8fd211af62d8636cda5118fcc949642ded1e29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c722443088524cfedbffa17336de213dbcb004fe0866cb418f9bdc27a4a3a4b3af0ccd954a991bdc4d5e100278bd4738fc2a17b58a43555ddc725dcc49cca21b
|
7
|
+
data.tar.gz: a97951dd6653c70af6397633b6628450779497a80be7b7dd294fbd09c8f91b4d82fe722190911d7324af7a3ff2c4b9ff274dd55adde8c8983fbc513e5c81d12d
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
## 0.2.1 (2020-07-26)
|
2
|
+
|
3
|
+
* Fix incorrect JDBC connect syntax in `sequel.rb` template on JRuby (@janko)
|
4
|
+
|
5
|
+
## 0.2.0 (2020-07-26)
|
6
|
+
|
7
|
+
* Drop support for Rodauth 1.x (@janko)
|
8
|
+
|
9
|
+
* Change `rodauth_app.rb` template to send emails in the background after transaction commit (@janko)
|
10
|
+
|
11
|
+
* Bump `sequel-activerecord_connection` dependency to `~> 0.3` (@janko)
|
12
|
+
|
13
|
+
* Use the JDBC adapter in sequel.rb initializer when on JRuby (@janko)
|
14
|
+
|
15
|
+
## 0.1.3 (2020-07-04)
|
16
|
+
|
17
|
+
* Remove insecure MFA integration with remember feature suggestion in `lib/rodauth_app.rb` (@janko, @nicolas-besnard)
|
18
|
+
|
19
|
+
* Use correct password autocomplete value on Rodauth 2.1+ (@janko)
|
20
|
+
|
21
|
+
* Enable skipping CSRF protection on Rodauth 2.1+ by overriding `#check_csrf?` (@janko)
|
22
|
+
|
23
|
+
* Don't generate Sequel initializer if Sequel connection exists (@janko)
|
24
|
+
|
25
|
+
* Fix typo in remember view template (@nicolas-besnard)
|
26
|
+
|
27
|
+
* Fix some more typos in `lib/rodauth_app.rb` (@janko)
|
28
|
+
|
29
|
+
## 0.1.2 (2020-05-14)
|
30
|
+
|
31
|
+
* Fix some typos in comment suggestions in `lib/rodauth_app.rb` (@janko)
|
32
|
+
|
33
|
+
## 0.1.1 (2020-05-09)
|
34
|
+
|
35
|
+
* Include view templates in the gem (@janko)
|
36
|
+
* Use `Login` labels to be consistent with Rodauth (@janko)
|
data/README.md
CHANGED
@@ -13,7 +13,7 @@ Provides Rails integration for the [Rodauth] authentication framework.
|
|
13
13
|
Add the gem to your Gemfile:
|
14
14
|
|
15
15
|
```rb
|
16
|
-
gem "rodauth-rails", "~> 0.
|
16
|
+
gem "rodauth-rails", "~> 0.2"
|
17
17
|
```
|
18
18
|
|
19
19
|
Then run `bundle install`.
|
@@ -160,7 +160,7 @@ page:
|
|
160
160
|
|
161
161
|
These links are fully functional, feel free to visit them and interact with the
|
162
162
|
pages. The templates that ship with Rodauth aim to provide a complete
|
163
|
-
authentication experience, and the forms use [
|
163
|
+
authentication experience, and the forms use [Bootstrap] markup.
|
164
164
|
|
165
165
|
Let's also add the `#current_account` method for retrieving the account of the
|
166
166
|
the authenticated session:
|
@@ -358,23 +358,31 @@ class RodauthApp < Rodauth::Rails::App
|
|
358
358
|
configure do
|
359
359
|
# ...
|
360
360
|
send_reset_password_email do
|
361
|
-
|
361
|
+
mailer_send(:reset_password, email_to, reset_password_email_link)
|
362
362
|
end
|
363
363
|
send_verify_account_email do
|
364
|
-
|
364
|
+
mailer_send(:verify_account, email_to, verify_account_email_link)
|
365
365
|
end
|
366
366
|
send_verify_login_change_email do |login|
|
367
|
-
|
367
|
+
mailer_send(:verify_login_change, login, verify_login_change_old_login, verify_login_change_new_login, verify_login_change_email_link)
|
368
368
|
end
|
369
369
|
send_password_changed_email do
|
370
|
-
|
370
|
+
mailer_send(:password_changed, email_to)
|
371
371
|
end
|
372
372
|
# send_email_auth_email do
|
373
|
-
#
|
373
|
+
# mailer_send(:email_auth, email_to, email_auth_email_link)
|
374
374
|
# end
|
375
375
|
# send_unlock_account_email do
|
376
|
-
#
|
376
|
+
# mailer_send(:unlock_account, email_to, unlock_account_email_link)
|
377
377
|
# end
|
378
|
+
auth_class_eval do
|
379
|
+
# queue email delivery on the mailer after the transaction commits
|
380
|
+
def mailer_send(type, *args)
|
381
|
+
db.after_commit do
|
382
|
+
RodauthMailer.public_send(type, *args).deliver_later
|
383
|
+
end
|
384
|
+
end
|
385
|
+
end
|
378
386
|
# ...
|
379
387
|
end
|
380
388
|
end
|
@@ -399,7 +407,7 @@ The Rodauth app stores the `Rodauth::Auth` instance in the Rack env hash, which
|
|
399
407
|
is then available in your Rails app:
|
400
408
|
|
401
409
|
```rb
|
402
|
-
request.env["rodauth"]
|
410
|
+
request.env["rodauth"] #=> #<Rodauth::Auth>
|
403
411
|
request.env["rodauth.secondary"] #=> #<Rodauth::Auth> (if using multiple configurations)
|
404
412
|
```
|
405
413
|
|
@@ -409,13 +417,13 @@ and controllers:
|
|
409
417
|
```rb
|
410
418
|
class MyController < ApplicationController
|
411
419
|
def my_action
|
412
|
-
rodauth
|
420
|
+
rodauth #=> #<Rodauth::Auth>
|
413
421
|
rodauth(:secondary) #=> #<Rodauth::Auth> (if using multiple configurations)
|
414
422
|
end
|
415
423
|
end
|
416
424
|
```
|
417
425
|
```erb
|
418
|
-
<% rodauth
|
426
|
+
<% rodauth #=> #<Rodauth::Auth> %>
|
419
427
|
<% rodauth(:secondary) #=> #<Rodauth::Auth> (if using multiple configurations) %>
|
420
428
|
```
|
421
429
|
|
@@ -431,11 +439,11 @@ integration for Rodauth:
|
|
431
439
|
* uses ActionMailer for sending emails
|
432
440
|
|
433
441
|
The `configure { ... }` method wraps configuring the Rodauth plugin, forwarding
|
434
|
-
any additional [options].
|
442
|
+
any additional [plugin options].
|
435
443
|
|
436
444
|
```rb
|
437
445
|
configure { ... } # defining default Rodauth configuration
|
438
|
-
configure(json: true)
|
446
|
+
configure(json: true) { ... } # passing options to the Rodauth plugin
|
439
447
|
configure(:secondary) { ... } # defining multiple Rodauth configurations
|
440
448
|
```
|
441
449
|
|
@@ -485,6 +493,20 @@ Rodauth::Rails.configure do |config|
|
|
485
493
|
end
|
486
494
|
```
|
487
495
|
|
496
|
+
## Working with JWT
|
497
|
+
|
498
|
+
To use Rodauth's [JWT feature], you'll need to load Roda's JSON support:
|
499
|
+
|
500
|
+
```rb
|
501
|
+
# lib/rodauth_app.rb
|
502
|
+
class RodauthApp < Rodauth::Rails::App
|
503
|
+
configure(json: true) do
|
504
|
+
enable :jwt
|
505
|
+
# your configuration
|
506
|
+
end
|
507
|
+
end
|
508
|
+
```
|
509
|
+
|
488
510
|
## Testing
|
489
511
|
|
490
512
|
If you're writing system tests, it's generally better to go through the actual
|
@@ -535,7 +557,7 @@ rodauth-rails changes some of the default Rodauth settings for easier setup:
|
|
535
557
|
|
536
558
|
### Database functions
|
537
559
|
|
538
|
-
By default on PostgreSQL, MySQL, and Microsoft SQL Server
|
560
|
+
By default, on PostgreSQL, MySQL, and Microsoft SQL Server Rodauth uses
|
539
561
|
database functions to access password hashes, with the user running the
|
540
562
|
application unable to get direct access to password hashes. This reduces the
|
541
563
|
risk of an attacker being able to access password hashes and use them to attack
|
@@ -546,7 +568,11 @@ to reason about, as it requires having two different database users and making
|
|
546
568
|
sure the correct migration is run for the correct user.
|
547
569
|
|
548
570
|
To keep with Rails' "convention over configuration" doctrine, rodauth-rails
|
549
|
-
disables the use of database functions, though
|
571
|
+
disables the use of database functions, though you can always turn it back on.
|
572
|
+
|
573
|
+
```rb
|
574
|
+
use_database_authentication_functions? true
|
575
|
+
```
|
550
576
|
|
551
577
|
### Account statuses
|
552
578
|
|
@@ -560,8 +586,32 @@ tests by default, but it's also commonly done in development.
|
|
560
586
|
|
561
587
|
To address this, rodauth-rails modifies the setup to store account status text
|
562
588
|
directly in the accounts table. If you're worried about invalid status values
|
563
|
-
creeping in, you may use enums instead. Alternatively, you can
|
564
|
-
the setup recommended by Rodauth.
|
589
|
+
creeping in, you may use enums instead. Alternatively, you can always go back
|
590
|
+
to the setup recommended by Rodauth.
|
591
|
+
|
592
|
+
```rb
|
593
|
+
# in the migration:
|
594
|
+
create_table :account_statuses do |t|
|
595
|
+
t.string :name, null: false, unique: true
|
596
|
+
end
|
597
|
+
execute "INSERT INTO account_statuses (id, name) VALUES (1, 'Unverified'), (2, 'Verified'), (3, 'Closed')"
|
598
|
+
|
599
|
+
create_table :accounts do |t|
|
600
|
+
# ...
|
601
|
+
t.references :status, foreign_key: { to_table: :account_statuses }, null: false, default: 1
|
602
|
+
# ...
|
603
|
+
end
|
604
|
+
```
|
605
|
+
```diff
|
606
|
+
configure do
|
607
|
+
# ...
|
608
|
+
- account_status_column :status
|
609
|
+
- account_unverified_status_value "unverified"
|
610
|
+
- account_open_status_value "verified"
|
611
|
+
- account_closed_status_value "closed"
|
612
|
+
# ...
|
613
|
+
end
|
614
|
+
```
|
565
615
|
|
566
616
|
## License
|
567
617
|
|
@@ -578,12 +628,11 @@ conduct](https://github.com/janko/rodauth-rails/blob/master/CODE_OF_CONDUCT.md).
|
|
578
628
|
[Sequel]: https://github.com/jeremyevans/sequel
|
579
629
|
[rendering views outside of controllers]: https://blog.bigbinary.com/2016/01/08/rendering-views-outside-of-controllers-in-rails-5.html
|
580
630
|
[feature documentation]: http://rodauth.jeremyevans.net/documentation.html
|
581
|
-
[
|
631
|
+
[JWT feature]: http://rodauth.jeremyevans.net/rdoc/files/doc/jwt_rdoc.html
|
582
632
|
[Bootstrap]: https://getbootstrap.com/
|
583
633
|
[Roda]: http://roda.jeremyevans.net/
|
584
634
|
[HMAC]: http://rodauth.jeremyevans.net/rdoc/files/README_rdoc.html#label-HMAC
|
585
635
|
[database authentication functions]: http://rodauth.jeremyevans.net/rdoc/files/README_rdoc.html#label-Password+Hash+Access+Via+Database+Functions
|
586
|
-
[multiple configurations]: http://rodauth.jeremyevans.net/rdoc/files/README_rdoc.html#label-With+Multiple+Configurations
|
587
|
-
[views]: /app/views/rodauth
|
588
636
|
[Rodauth migration]: http://rodauth.jeremyevans.net/rdoc/files/README_rdoc.html#label-Creating+tables
|
589
637
|
[sequel-activerecord_connection]: https://github.com/janko/sequel-activerecord_connection
|
638
|
+
[plugin options]: http://rodauth.jeremyevans.net/rdoc/files/README_rdoc.html#label-Plugin+Options
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require "rails/generators/base"
|
2
2
|
require "rails/generators/migration"
|
3
3
|
require "rails/generators/active_record"
|
4
|
-
require "rodauth/version"
|
5
4
|
|
6
5
|
module Rodauth
|
7
6
|
module Rails
|
@@ -24,7 +23,8 @@ module Rodauth
|
|
24
23
|
|
25
24
|
def create_sequel_initializer
|
26
25
|
return unless defined?(ActiveRecord::Base)
|
27
|
-
return unless %w[postgresql mysql2 sqlite3].include?(
|
26
|
+
return unless %w[postgresql mysql2 sqlite3].include?(activerecord_adapter)
|
27
|
+
return if defined?(Sequel) && !Sequel::DATABASES.empty?
|
28
28
|
|
29
29
|
template "config/initializers/sequel.rb"
|
30
30
|
end
|
@@ -56,7 +56,25 @@ module Rodauth
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
|
59
|
+
if RUBY_ENGINE == "jruby"
|
60
|
+
def sequel_adapter
|
61
|
+
case activerecord_adapter
|
62
|
+
when "postgresql" then "postgresql"
|
63
|
+
when "mysql2" then "mysql"
|
64
|
+
when "sqlite3" then "sqlite"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
else
|
68
|
+
def sequel_adapter
|
69
|
+
case activerecord_adapter
|
70
|
+
when "postgresql" then "postgres"
|
71
|
+
when "mysql2" then "mysql2"
|
72
|
+
when "sqlite3" then "sqlite"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def activerecord_adapter
|
60
78
|
ActiveRecord::Base.connection_config.fetch(:adapter)
|
61
79
|
end
|
62
80
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%%= text_field_tag name, local_assigns[:value] || params[name],
|
2
|
+
type: local_assigns[:type] || "text",
|
3
|
+
id: local_assigns[:id],
|
4
|
+
autocomplete: local_assigns[:autocomplete],
|
5
|
+
inputmode: local_assigns[:inputmode],
|
6
|
+
required: local_assigns[:required] != false,
|
7
|
+
class: "#{local_assigns[:class] || "form-control"} #{"is-invalid" if rodauth.field_error(name)}",
|
8
|
+
aria: ({ invalid: "true", describedby: "#{name}_error_message" } if rodauth.field_error(name)) %>
|
9
|
+
|
10
|
+
<%%= render "field_error", name: name unless local_assigns[:skip_error_message] %>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<div class="form-group">
|
2
|
+
<div class="form-check">
|
3
|
+
<%%= check_box_tag rodauth.global_logout_param, "t", false, id: "global-logout", class: "form-check-input" %>
|
4
|
+
<%%= label_tag "global-logout", "Logout all Logged In Sessons?", class: "form-check-label" %>
|
5
|
+
</div>
|
6
|
+
</div>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%%= form_tag rodauth.login_path, method: :post do %>
|
2
|
+
<%% if rodauth.skip_login_field_on_login? %>
|
3
|
+
<%%= render "login_display" %>
|
4
|
+
<%% else %>
|
5
|
+
<%%= render "login_field" %>
|
6
|
+
<%% end %>
|
7
|
+
<%%= render "password_field" unless rodauth.skip_password_field_on_login? %>
|
8
|
+
<%%= render "submit", value: "Login" %>
|
9
|
+
<%% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%%= hidden_field_tag rodauth.login_param, params[rodauth.login_param] %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<div class="form-group">
|
2
|
+
<%%= label_tag "otp-auth-code", "Authentication Code" %>
|
3
|
+
<div class="row">
|
4
|
+
<div class="col-sm-3">
|
5
|
+
<%%= render "field", name: rodauth.otp_auth_param, id: "otp-auth-code", value: "", autocomplete: "off", inputmode: "numeric" %>
|
6
|
+
</div>
|
7
|
+
</div>
|
8
|
+
</div>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<%%= form_tag rodauth.recovery_codes_path, method: :post do %>
|
2
|
+
<%%= render "password_field" if rodauth.two_factor_modifications_require_password? %>
|
3
|
+
<%%= render "submit",
|
4
|
+
value: rodauth.recovery_codes_button || "View Authentication Recovery Codes",
|
5
|
+
name: (rodauth.add_recovery_codes_param if rodauth.recovery_codes_button) %>
|
6
|
+
<%% end %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<div class="form-group">
|
2
|
+
<%%= label_tag "sms-code", "SMS Code" %>
|
3
|
+
<div class="row">
|
4
|
+
<div class="col-sm-3">
|
5
|
+
<%%= render "field", name: rodauth.sms_code_param, id: "sms-code", value: "", autocomplete: "one-time-code", inputmode: "numeric" %>
|
6
|
+
</div>
|
7
|
+
</div>
|
8
|
+
</div>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<%%= form_tag rodauth.change_login_path, method: :post do %>
|
2
|
+
<%%= render "login_field" %>
|
3
|
+
<%%= render "login_confirm_field" if rodauth.require_login_confirmation? %>
|
4
|
+
<%%= render "password_field" if rodauth.change_login_requires_password? %>
|
5
|
+
<%%= render "submit", value: "Change Login" %>
|
6
|
+
<%% end %>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<%%= form_tag rodauth.change_password_path, method: :post do %>
|
2
|
+
<%%= render "password_field" if rodauth.change_password_requires_password? %>
|
3
|
+
<%%= render "new_password_field" %>
|
4
|
+
<%%= render "password_confirm_field" if rodauth.require_password_confirmation? %>
|
5
|
+
<%%= render "submit", value: "Change Password" %>
|
6
|
+
<%% end %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<%%= form_tag rodauth.create_account_path, method: :post do %>
|
2
|
+
<%%= render "login_field" %>
|
3
|
+
<%%= render "login_confirm_field" if rodauth.require_login_confirmation? %>
|
4
|
+
<%%= render "password_field" if rodauth.create_account_set_password? %>
|
5
|
+
<%%= render "password_confirm_field" if rodauth.create_account_set_password? && rodauth.require_password_confirmation? %>
|
6
|
+
<%%= render "submit", value: "Create Account" %>
|
7
|
+
<%% end %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%%= form_tag rodauth.otp_setup_path, method: :post do %>
|
2
|
+
<%%= hidden_field_tag rodauth.otp_setup_param, rodauth.otp_user_key, id: "otp-key" %>
|
3
|
+
<%%= hidden_field_tag rodauth.otp_setup_raw_param, rodauth.otp_key, id: "otp-hmac-secret" if rodauth.otp_keys_use_hmac? %>
|
4
|
+
|
5
|
+
<div class="form-group">
|
6
|
+
<p>Secret: <%%= rodauth.otp_user_key %></p>
|
7
|
+
<p>Provisioning URL: <%%= rodauth.otp_provisioning_uri %></p>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div class="row">
|
11
|
+
<div class="col-lg-6 col-lg">
|
12
|
+
<div class="form-group">
|
13
|
+
<p><%%= rodauth.otp_qr_code.html_safe %></p>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div class="col-lg-6 col-lg">
|
18
|
+
<%%= render "password_field" if rodauth.two_factor_modifications_require_password? %>
|
19
|
+
<%%= render "otp_auth_code_field" %>
|
20
|
+
<%%= render "submit", value: "Setup TOTP Authentication" %>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
<%% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%%= render "recovery_codes_form" %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<%%= form_tag rodauth.remember_path, method: :post do %>
|
2
|
+
<fieldset class="form-group">
|
3
|
+
<div class="form-check">
|
4
|
+
<%%= radio_button_tag rodauth.remember_param, rodauth.remember_remember_param_value, false, id: "remember-remember", class: "form-check-input" %>
|
5
|
+
<%%= label_tag "remember-remember", "Remember Me", class: "form-check-label" %>
|
6
|
+
</div>
|
7
|
+
|
8
|
+
<div class="form-check">
|
9
|
+
<%%= radio_button_tag rodauth.remember_param, rodauth.remember_forget_param_value, false, id: "remember-forget", class: "form-check-input" %>
|
10
|
+
<%%= label_tag "remember-forget", "Forget Me", class: "form-check-label" %>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<div class="form-check">
|
14
|
+
<%%= radio_button_tag rodauth.remember_param, rodauth.remember_disable_param_value, false, id: "remember-disable", class: "form-check-input" %>
|
15
|
+
<%%= label_tag "remember-disable", "Disable Remember Me", class: "form-check-label" %>
|
16
|
+
</div>
|
17
|
+
</fieldset>
|
18
|
+
<%%= render "submit", value: "Change Remember Setting" %>
|
19
|
+
<%% end %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%%= form_tag rodauth.reset_password_request_path, method: :post do %>
|
2
|
+
<p>If you have forgotten your password, you can request a password reset:</p>
|
3
|
+
<%% if params[rodauth.login_param] && !rodauth.field_error(rodauth.login_param) %>
|
4
|
+
<%%= render "login_hidden_field" %>
|
5
|
+
<%% else %>
|
6
|
+
<%%= render "login_field" %>
|
7
|
+
<%% end %>
|
8
|
+
<%%= render "submit", value: "Request Password Reset" %>
|
9
|
+
<%% end %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<%% if rodauth.two_factor_setup_links.any? %>
|
2
|
+
<h2>Setup Multifactor Authentication</h2>
|
3
|
+
|
4
|
+
<ul>
|
5
|
+
<%% rodauth.two_factor_setup_links.sort.each do |_, link, text| %>
|
6
|
+
<li><%%= link_to text, link %></li>
|
7
|
+
<%% end %>
|
8
|
+
</ul>
|
9
|
+
<%% end %>
|
10
|
+
|
11
|
+
<%% if rodauth.two_factor_remove_links.any? %>
|
12
|
+
<h2>Remove Multifactor Authentication</h2>
|
13
|
+
|
14
|
+
<ul>
|
15
|
+
<%% rodauth.two_factor_remove_links.sort.each do |_, link, text| %>
|
16
|
+
<li><%%= link_to text, link %></li>
|
17
|
+
<%% end %>
|
18
|
+
<%% if rodauth.two_factor_remove_links.length > 1 %>
|
19
|
+
<li><%%= link_to "Remove All Multifactor Authentication Methods", rodauth.two_factor_disable_path %></li>
|
20
|
+
<%% end %>
|
21
|
+
</ul>
|
22
|
+
<%% end %>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<%%= form_tag rodauth.unlock_account_path, method: :post do %>
|
2
|
+
<p>This account is currently locked out. You can unlock the account:</p>
|
3
|
+
<%%= render "password_field" if rodauth.unlock_account_requires_password? %>
|
4
|
+
<%%= render "submit", value: "Unlock Account" %>
|
5
|
+
<%% end %>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<%%= form_tag rodauth.unlock_account_request_path, method: :post do %>
|
2
|
+
<p>This account is currently locked out. You can request that the account be unlocked:</p>
|
3
|
+
<%%= render "login_hidden_field" %>
|
4
|
+
<%%= render "submit", value: "Request Account Unlock" %>
|
5
|
+
<%% end %>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<%%= form_tag rodauth.verify_account_path, method: :post do %>
|
2
|
+
<%%= render "password_field" if rodauth.verify_account_set_password? %>
|
3
|
+
<%%= render "password_confirm_field" if rodauth.verify_account_set_password? && rodauth.require_password_confirmation? %>
|
4
|
+
<%%= render "submit", value: "Verify Account" %>
|
5
|
+
<%% end %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%%= form_tag rodauth.verify_account_resend_path, method: :post do %>
|
2
|
+
<p>If you no longer have the email to verify the account, you can request that it be resent to you:</p>
|
3
|
+
<%% if params[rodauth.login_param] %>
|
4
|
+
<%%= render "login_hidden_field" %>
|
5
|
+
<%% else %>
|
6
|
+
<%%= render "login_field" %>
|
7
|
+
<%% end %>
|
8
|
+
<%%= render "submit", value: "Send Verification Login Again" %>
|
9
|
+
<%% end %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%% cred = rodauth.webauth_credential_options_for_get %>
|
2
|
+
|
3
|
+
<%%= form_tag rodauth.webauthn_auth_form_path, method: :post, id: "webauthn-auth-form", data: { credential_options: cred.as_json.to_json } do %>
|
4
|
+
<%%= render "login_hidden_field" if params[rodauth.login_param] %>
|
5
|
+
<%%= hidden_field_tag rodauth.webauthn_auth_challenge_param, cred.challenge %>
|
6
|
+
<%%= hidden_field_tag rodauth.webauthn_auth_challenge_hmac_param, rodauth.compute_hmac(cred.challenge) %>
|
7
|
+
<%%= text_field_tag rodauth.webauthn_auth_param, "", id: "webauthn-auth", aria: { hidden: "true" } %>
|
8
|
+
<div id="webauthn-auth-button">
|
9
|
+
<%%= render "submit", value: "Authenticate Using WebAuthn" %>
|
10
|
+
</div>
|
11
|
+
<%% end %>
|
12
|
+
|
13
|
+
<%%= javascript_include_tag rodauth.webauthn_auth_js_path %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%%= form_tag rodauth.webauthn_remove_path, method: :post, id: "webauthn-remove-form" do %>
|
2
|
+
<%%= render "password_field" if rodauth.two_factor_modifications_require_password? %>
|
3
|
+
<fieldset class="form-group">
|
4
|
+
<%% (usage = rodauth.account_webauthn_usage).each do |id, last_use| %>
|
5
|
+
<div class="form-check">
|
6
|
+
<%%= render "field", name: rodauth.webauthn_remove_param, id: "webauthn-remove-#{id}", type: :radio, class: "form-check-input", skip_error_message: true, value: id, required: false %>
|
7
|
+
<%%= label_tag "webauthn-remove-#{id}", "Last use: #{last_use}", class: "form-check-label" %>
|
8
|
+
<%%= render "field_error", name: rodauth.webauthn_remove_param if id == usage.keys.last %>
|
9
|
+
</div>
|
10
|
+
<%% end %>
|
11
|
+
</fieldset>
|
12
|
+
<%%= render "submit", value: "Remove WebAuthn Authenticator" %>
|
13
|
+
<%% end %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%% cred = rodauth.new_webauthn_credential %>
|
2
|
+
|
3
|
+
<%%= form_tag rodauth.webauthn_setup_path, method: :post, id: "webauthn-setup-form", data: { credential_options: cred.as_json.to_json } do %>
|
4
|
+
<%%= hidden_field_tag rodauth.webauthn_setup_challenge_param, cred.challenge %>
|
5
|
+
<%%= hidden_field_tag rodauth.webauthn_setup_challenge_hmac_param, rodauth.compute_hmac(cred.challenge) %>
|
6
|
+
<%%= text_field_tag rodauth.webauthn_setup_param, "", id: "webauthn-setup", aria: { hidden: "true" } %>
|
7
|
+
<%%= render "password_field" if rodauth.two_factor_modifications_require_password? %>
|
8
|
+
<div id="webauthn-setup-button">
|
9
|
+
<%%= render "submit", value: "Setup WebAuthn Authentication" %>
|
10
|
+
</div>
|
11
|
+
<%% end %>
|
12
|
+
|
13
|
+
<%%= javascript_include_tag rodauth.webauthn_setup_js_path %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Someone with an account has requested their login be changed to this email address:
|
2
|
+
|
3
|
+
Old email: <%%= @old_login %>
|
4
|
+
|
5
|
+
New email: <%%= @new_login %>
|
6
|
+
|
7
|
+
If you did not request this login change, please ignore this message. If you
|
8
|
+
requested this login change, please go to
|
9
|
+
<%%= @email_link %>
|
10
|
+
to verify the login change.
|
@@ -1,13 +1,10 @@
|
|
1
1
|
require "sequel/core"
|
2
2
|
|
3
3
|
# initialize the appropriate Sequel adapter without creating a connection
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
DB = Sequel.mysql2(test: false)
|
9
|
-
<% when "sqlite3" -%>
|
10
|
-
DB = Sequel.sqlite(test: false)
|
4
|
+
<%- if RUBY_ENGINE == "jruby" -%>
|
5
|
+
DB = Sequel.connect("jdbc:<%= sequel_adapter %>://", test: false)
|
6
|
+
<% else -%>
|
7
|
+
DB = Sequel.<%= sequel_adapter %>(test: false)
|
11
8
|
<% end -%>
|
12
9
|
# have Sequel use ActiveRecord's connection for database interaction
|
13
10
|
DB.extension :activerecord_connection
|
@@ -1,11 +1,11 @@
|
|
1
1
|
class CreateRodauth < ActiveRecord::Migration<%= migration_version %>
|
2
2
|
def change
|
3
|
-
<% if
|
3
|
+
<% if activerecord_adapter == "postgresql" -%>
|
4
4
|
enable_extension "citext"
|
5
5
|
|
6
6
|
<% end -%>
|
7
7
|
create_table :accounts do |t|
|
8
|
-
<% case
|
8
|
+
<% case activerecord_adapter -%>
|
9
9
|
<% when "postgresql" -%>
|
10
10
|
t.citext :email, null: false, index: { unique: true, where: "status IN ('verified', 'unverified')" }
|
11
11
|
<% else -%>
|
@@ -56,7 +56,7 @@ class CreateRodauth < ActiveRecord::Migration<%= migration_version %>
|
|
56
56
|
# t.references :account, null: false
|
57
57
|
# t.datetime :at, null: false, default: -> { "CURRENT_TIMESTAMP" }
|
58
58
|
# t.text :message, null: false
|
59
|
-
<% case
|
59
|
+
<% case activerecord_adapter -%>
|
60
60
|
<% when "postgresql" -%>
|
61
61
|
# t.jsonb :metadata
|
62
62
|
<% when "sqlite3", "mysql2" -%>
|
@@ -42,26 +42,31 @@ class RodauthApp < Rodauth::Rails::App
|
|
42
42
|
# ==> Emails
|
43
43
|
# Uncomment the lines below once you've imported mailer views.
|
44
44
|
# send_reset_password_email do
|
45
|
-
#
|
45
|
+
# mailer_send(:reset_password, email_to, reset_password_email_link)
|
46
46
|
# end
|
47
47
|
# send_verify_account_email do
|
48
|
-
#
|
48
|
+
# mailer_send(:verify_account, email_to, verify_account_email_link)
|
49
49
|
# end
|
50
50
|
# send_verify_login_change_email do |login|
|
51
|
-
#
|
51
|
+
# mailer_send(:verify_login_change, login, verify_login_change_old_login, verify_login_change_new_login, verify_login_change_email_link)
|
52
52
|
# end
|
53
53
|
# send_password_changed_email do
|
54
|
-
#
|
54
|
+
# mailer_send(:password_changed, email_to)
|
55
55
|
# end
|
56
56
|
# # send_email_auth_email do
|
57
|
-
# #
|
57
|
+
# # mailer_send(:email_auth, email_to, email_auth_email_link)
|
58
58
|
# # end
|
59
59
|
# # send_unlock_account_email do
|
60
|
-
|
61
|
-
# # @unlock_account_key_value = get_unlock_account_key
|
62
|
-
<% end -%>
|
63
|
-
# # RodauthMailer.unlock_account(email_to, unlock_account_email_link).deliver_now
|
60
|
+
# # mailer_send(:unlock_account, email_to, unlock_account_email_link)
|
64
61
|
# # end
|
62
|
+
# auth_class_eval do
|
63
|
+
# # queue email delivery on the mailer after the transaction commits
|
64
|
+
# def mailer_send(type, *args)
|
65
|
+
# db.after_commit do
|
66
|
+
# RodauthMailer.public_send(type, *args).deliver_later
|
67
|
+
# end
|
68
|
+
# end
|
69
|
+
# end
|
65
70
|
|
66
71
|
# In the meantime you can tweak settings for emails created by Rodauth
|
67
72
|
# email_subject_prefix "[MyApp] "
|
@@ -76,7 +81,7 @@ class RodauthApp < Rodauth::Rails::App
|
|
76
81
|
|
77
82
|
# Override default flash messages.
|
78
83
|
# create_account_notice_flash "Your account has been created. Please verify your account by visiting the confirmation link sent to your email address."
|
79
|
-
#
|
84
|
+
# require_login_error_flash "Login is required for accessing this page"
|
80
85
|
# login_notice_flash nil
|
81
86
|
|
82
87
|
# ==> Validation
|
@@ -99,9 +104,6 @@ class RodauthApp < Rodauth::Rails::App
|
|
99
104
|
# Extend user's remember period when remembered via a cookie
|
100
105
|
extend_remember_deadline? true
|
101
106
|
|
102
|
-
# Consider remembered users to be multifactor-authenticated (if using MFA).
|
103
|
-
# after_load_memory { two_factor_update_session("totp") if two_factor_authentication_setup? }
|
104
|
-
|
105
107
|
# ==> Hooks
|
106
108
|
# Validate custom fields in the create account form.
|
107
109
|
# before_create_account do
|
@@ -134,19 +136,6 @@ class RodauthApp < Rodauth::Rails::App
|
|
134
136
|
# reset_password_deadline_interval Hash[hours: 6]
|
135
137
|
# verify_login_change_deadline_interval Hash[days: 2]
|
136
138
|
# remember_deadline_interval Hash[days: 30]
|
137
|
-
|
138
|
-
# ==> Extending
|
139
|
-
# Define any additional methods you want for the Rodauth object.
|
140
|
-
# auth_class_eval do
|
141
|
-
# def my_send_email(name, *args)
|
142
|
-
# AuthenticationMailer.public_send(name, *args).deliver_later
|
143
|
-
# end
|
144
|
-
# end
|
145
|
-
#
|
146
|
-
# Then use the new custom method in configuration blocks.
|
147
|
-
# send_password_reset_email do
|
148
|
-
# my_send_email(:password_reset, email_to, password_reset_email_link)
|
149
|
-
# end
|
150
139
|
end
|
151
140
|
|
152
141
|
# ==> Multiple configurations
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require "rails/generators/base"
|
2
|
-
require "rodauth/version"
|
3
2
|
|
4
3
|
module Rodauth
|
5
4
|
module Rails
|
@@ -104,14 +103,6 @@ module Rodauth
|
|
104
103
|
list |= VIEWS[DEPENDENCIES[feature]] || []
|
105
104
|
end
|
106
105
|
|
107
|
-
if Rodauth::MAJOR == 1
|
108
|
-
views -= %w[
|
109
|
-
multi_phase_login _global_logout_field
|
110
|
-
two_factor_manage two_factor_auth two_factor_disable
|
111
|
-
webauthn_setup webauthn_auth webauthn_remove
|
112
|
-
]
|
113
|
-
end
|
114
|
-
|
115
106
|
views.each do |view|
|
116
107
|
template "app/views/rodauth/#{view}.html.erb",
|
117
108
|
"app/views/#{options[:directory].underscore}/#{view}.html.erb"
|
data/lib/rodauth/rails.rb
CHANGED
@@ -28,6 +28,16 @@ module Rodauth
|
|
28
28
|
super
|
29
29
|
end
|
30
30
|
|
31
|
+
# Verify Rails' authenticity token.
|
32
|
+
def check_csrf
|
33
|
+
rails_check_csrf!
|
34
|
+
end
|
35
|
+
|
36
|
+
# Have Rodauth call #check_csrf automatically.
|
37
|
+
def check_csrf?
|
38
|
+
true
|
39
|
+
end
|
40
|
+
|
31
41
|
# Render Rails CSRF tags in Rodauth templates.
|
32
42
|
def csrf_tag(*)
|
33
43
|
rails_csrf_tag
|
@@ -40,12 +50,6 @@ module Rodauth
|
|
40
50
|
|
41
51
|
private
|
42
52
|
|
43
|
-
# Verify Rails' authenticity token before each Rodauth route.
|
44
|
-
def before_rodauth
|
45
|
-
rails_check_csrf!
|
46
|
-
super
|
47
|
-
end
|
48
|
-
|
49
53
|
# Create emails with ActionMailer which uses configured delivery method.
|
50
54
|
def create_email_to(to, subject, body)
|
51
55
|
Mailer.create_email(to: to, from: email_from, subject: "#{email_subject_prefix}#{subject}", body: body)
|
data/rodauth-rails.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "rodauth-rails"
|
3
|
-
spec.version = "0.1
|
3
|
+
spec.version = "0.2.1"
|
4
4
|
spec.authors = ["Janko Marohnić"]
|
5
5
|
spec.email = ["janko.marohnic@gmail.com"]
|
6
6
|
|
@@ -11,12 +11,12 @@ Gem::Specification.new do |spec|
|
|
11
11
|
|
12
12
|
spec.required_ruby_version = ">= 2.2.0"
|
13
13
|
|
14
|
-
spec.files = Dir["README.md", "LICENSE.txt", "CHANGELOG.md", "lib
|
14
|
+
spec.files = Dir["README.md", "LICENSE.txt", "CHANGELOG.md", "lib/**/*", "*.gemspec"]
|
15
15
|
spec.require_paths = ["lib"]
|
16
16
|
|
17
17
|
spec.add_dependency "railties", ">= 4.2", "< 7"
|
18
|
-
spec.add_dependency "rodauth", "
|
19
|
-
spec.add_dependency "sequel-activerecord_connection", "~> 0.
|
18
|
+
spec.add_dependency "rodauth", "~> 2.1"
|
19
|
+
spec.add_dependency "sequel-activerecord_connection", "~> 0.3"
|
20
20
|
spec.add_dependency "tilt"
|
21
21
|
spec.add_dependency "bcrypt"
|
22
22
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rodauth-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Janko Marohnić
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -34,36 +34,30 @@ dependencies:
|
|
34
34
|
name: rodauth
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - "
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '1.23'
|
40
|
-
- - "<"
|
37
|
+
- - "~>"
|
41
38
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
39
|
+
version: '2.1'
|
43
40
|
type: :runtime
|
44
41
|
prerelease: false
|
45
42
|
version_requirements: !ruby/object:Gem::Requirement
|
46
43
|
requirements:
|
47
|
-
- - "
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '1.23'
|
50
|
-
- - "<"
|
44
|
+
- - "~>"
|
51
45
|
- !ruby/object:Gem::Version
|
52
|
-
version: '
|
46
|
+
version: '2.1'
|
53
47
|
- !ruby/object:Gem::Dependency
|
54
48
|
name: sequel-activerecord_connection
|
55
49
|
requirement: !ruby/object:Gem::Requirement
|
56
50
|
requirements:
|
57
51
|
- - "~>"
|
58
52
|
- !ruby/object:Gem::Version
|
59
|
-
version: '0.
|
53
|
+
version: '0.3'
|
60
54
|
type: :runtime
|
61
55
|
prerelease: false
|
62
56
|
version_requirements: !ruby/object:Gem::Requirement
|
63
57
|
requirements:
|
64
58
|
- - "~>"
|
65
59
|
- !ruby/object:Gem::Version
|
66
|
-
version: '0.
|
60
|
+
version: '0.3'
|
67
61
|
- !ruby/object:Gem::Dependency
|
68
62
|
name: tilt
|
69
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -99,6 +93,7 @@ executables: []
|
|
99
93
|
extensions: []
|
100
94
|
extra_rdoc_files: []
|
101
95
|
files:
|
96
|
+
- CHANGELOG.md
|
102
97
|
- LICENSE.txt
|
103
98
|
- README.md
|
104
99
|
- lib/generators/rodauth/install_generator.rb
|
@@ -106,6 +101,66 @@ files:
|
|
106
101
|
- lib/generators/rodauth/templates/app/controllers/rodauth_controller.rb
|
107
102
|
- lib/generators/rodauth/templates/app/mailers/rodauth_mailer.rb
|
108
103
|
- lib/generators/rodauth/templates/app/models/account.rb
|
104
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_email_auth_request_form.html.erb
|
105
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_field.html.erb
|
106
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_field_error.html.erb
|
107
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_global_logout_field.html.erb
|
108
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_login_confirm_field.html.erb
|
109
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_login_display.html.erb
|
110
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_login_field.html.erb
|
111
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_login_form.html.erb
|
112
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_login_form_footer.html.erb
|
113
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_login_form_header.html.erb
|
114
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_login_hidden_field.html.erb
|
115
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_new_password_field.html.erb
|
116
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_otp_auth_code_field.html.erb
|
117
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_password_confirm_field.html.erb
|
118
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_password_field.html.erb
|
119
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_recovery_code_field.html.erb
|
120
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_recovery_codes_form.html.erb
|
121
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_sms_code_field.html.erb
|
122
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_sms_phone_field.html.erb
|
123
|
+
- lib/generators/rodauth/templates/app/views/rodauth/_submit.html.erb
|
124
|
+
- lib/generators/rodauth/templates/app/views/rodauth/add_recovery_codes.html.erb
|
125
|
+
- lib/generators/rodauth/templates/app/views/rodauth/change_login.html.erb
|
126
|
+
- lib/generators/rodauth/templates/app/views/rodauth/change_password.html.erb
|
127
|
+
- lib/generators/rodauth/templates/app/views/rodauth/close_account.html.erb
|
128
|
+
- lib/generators/rodauth/templates/app/views/rodauth/confirm_password.html.erb
|
129
|
+
- lib/generators/rodauth/templates/app/views/rodauth/create_account.html.erb
|
130
|
+
- lib/generators/rodauth/templates/app/views/rodauth/email_auth.html.erb
|
131
|
+
- lib/generators/rodauth/templates/app/views/rodauth/login.html.erb
|
132
|
+
- lib/generators/rodauth/templates/app/views/rodauth/logout.html.erb
|
133
|
+
- lib/generators/rodauth/templates/app/views/rodauth/multi_phase_login.html.erb
|
134
|
+
- lib/generators/rodauth/templates/app/views/rodauth/otp_auth.html.erb
|
135
|
+
- lib/generators/rodauth/templates/app/views/rodauth/otp_disable.html.erb
|
136
|
+
- lib/generators/rodauth/templates/app/views/rodauth/otp_setup.html.erb
|
137
|
+
- lib/generators/rodauth/templates/app/views/rodauth/recovery_auth.html.erb
|
138
|
+
- lib/generators/rodauth/templates/app/views/rodauth/recovery_codes.html.erb
|
139
|
+
- lib/generators/rodauth/templates/app/views/rodauth/remember.html.erb
|
140
|
+
- lib/generators/rodauth/templates/app/views/rodauth/reset_password.html.erb
|
141
|
+
- lib/generators/rodauth/templates/app/views/rodauth/reset_password_request.html.erb
|
142
|
+
- lib/generators/rodauth/templates/app/views/rodauth/sms_auth.html.erb
|
143
|
+
- lib/generators/rodauth/templates/app/views/rodauth/sms_confirm.html.erb
|
144
|
+
- lib/generators/rodauth/templates/app/views/rodauth/sms_disable.html.erb
|
145
|
+
- lib/generators/rodauth/templates/app/views/rodauth/sms_request.html.erb
|
146
|
+
- lib/generators/rodauth/templates/app/views/rodauth/sms_setup.html.erb
|
147
|
+
- lib/generators/rodauth/templates/app/views/rodauth/two_factor_auth.html.erb
|
148
|
+
- lib/generators/rodauth/templates/app/views/rodauth/two_factor_disable.html.erb
|
149
|
+
- lib/generators/rodauth/templates/app/views/rodauth/two_factor_manage.html.erb
|
150
|
+
- lib/generators/rodauth/templates/app/views/rodauth/unlock_account.html.erb
|
151
|
+
- lib/generators/rodauth/templates/app/views/rodauth/unlock_account_request.html.erb
|
152
|
+
- lib/generators/rodauth/templates/app/views/rodauth/verify_account.html.erb
|
153
|
+
- lib/generators/rodauth/templates/app/views/rodauth/verify_account_resend.html.erb
|
154
|
+
- lib/generators/rodauth/templates/app/views/rodauth/verify_login_change.html.erb
|
155
|
+
- lib/generators/rodauth/templates/app/views/rodauth/webauthn_auth.html.erb
|
156
|
+
- lib/generators/rodauth/templates/app/views/rodauth/webauthn_remove.html.erb
|
157
|
+
- lib/generators/rodauth/templates/app/views/rodauth/webauthn_setup.html.erb
|
158
|
+
- lib/generators/rodauth/templates/app/views/rodauth_mailer/email_auth.text.erb
|
159
|
+
- lib/generators/rodauth/templates/app/views/rodauth_mailer/password_changed.text.erb
|
160
|
+
- lib/generators/rodauth/templates/app/views/rodauth_mailer/reset_password.text.erb
|
161
|
+
- lib/generators/rodauth/templates/app/views/rodauth_mailer/unlock_account.text.erb
|
162
|
+
- lib/generators/rodauth/templates/app/views/rodauth_mailer/verify_account.text.erb
|
163
|
+
- lib/generators/rodauth/templates/app/views/rodauth_mailer/verify_login_change.text.erb
|
109
164
|
- lib/generators/rodauth/templates/config/initializers/rodauth.rb
|
110
165
|
- lib/generators/rodauth/templates/config/initializers/sequel.rb
|
111
166
|
- lib/generators/rodauth/templates/db/migrate/create_rodauth.rb
|