rodauth-rails 0.17.1 → 0.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +28 -0
- data/README.md +27 -17
- data/lib/generators/rodauth/install_generator.rb +1 -1
- data/lib/generators/rodauth/templates/app/views/rodauth/_email_auth_request_form.html.erb +7 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_form.html.erb +26 -9
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_form_footer.html.erb +7 -6
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_form_header.html.erb +3 -3
- data/lib/generators/rodauth/templates/app/views/rodauth/add_recovery_codes.html.erb +7 -5
- data/lib/generators/rodauth/templates/app/views/rodauth/change_login.html.erb +29 -6
- data/lib/generators/rodauth/templates/app/views/rodauth/change_password.html.erb +29 -6
- data/lib/generators/rodauth/templates/app/views/rodauth/close_account.html.erb +15 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/confirm_password.html.erb +13 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/create_account.html.erb +37 -7
- data/lib/generators/rodauth/templates/app/views/rodauth/email_auth.html.erb +7 -3
- data/lib/generators/rodauth/templates/app/views/rodauth/login.html.erb +5 -3
- data/lib/generators/rodauth/templates/app/views/rodauth/logout.html.erb +16 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/multi_phase_login.html.erb +5 -3
- data/lib/generators/rodauth/templates/app/views/rodauth/otp_auth.html.erb +17 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/otp_disable.html.erb +15 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/otp_setup.html.erb +30 -10
- data/lib/generators/rodauth/templates/app/views/rodauth/recovery_auth.html.erb +13 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/recovery_codes.html.erb +15 -1
- data/lib/generators/rodauth/templates/app/views/rodauth/remember.html.erb +14 -9
- data/lib/generators/rodauth/templates/app/views/rodauth/reset_password.html.erb +21 -5
- data/lib/generators/rodauth/templates/app/views/rodauth/reset_password_request.html.erb +19 -9
- data/lib/generators/rodauth/templates/app/views/rodauth/sms_auth.html.erb +17 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/sms_confirm.html.erb +17 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/sms_disable.html.erb +15 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/sms_request.html.erb +7 -3
- data/lib/generators/rodauth/templates/app/views/rodauth/sms_setup.html.erb +25 -5
- data/lib/generators/rodauth/templates/app/views/rodauth/two_factor_auth.html.erb +5 -3
- data/lib/generators/rodauth/templates/app/views/rodauth/two_factor_disable.html.erb +15 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/two_factor_manage.html.erb +17 -15
- data/lib/generators/rodauth/templates/app/views/rodauth/unlock_account.html.erb +17 -5
- data/lib/generators/rodauth/templates/app/views/rodauth/unlock_account_request.html.erb +11 -5
- data/lib/generators/rodauth/templates/app/views/rodauth/verify_account.html.erb +23 -5
- data/lib/generators/rodauth/templates/app/views/rodauth/verify_account_resend.html.erb +19 -9
- data/lib/generators/rodauth/templates/app/views/rodauth/verify_login_change.html.erb +7 -3
- data/lib/generators/rodauth/templates/app/views/rodauth/webauthn_auth.html.erb +13 -9
- data/lib/generators/rodauth/templates/app/views/rodauth/webauthn_remove.html.erb +21 -9
- data/lib/generators/rodauth/templates/app/views/rodauth/webauthn_setup.html.erb +21 -9
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/email_auth.text.erb +1 -1
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/reset_password.text.erb +1 -1
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/unlock_account.text.erb +1 -1
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/verify_account.text.erb +1 -1
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/verify_login_change.text.erb +3 -3
- data/lib/generators/rodauth/views_generator.rb +55 -93
- data/lib/rodauth/rails/app.rb +4 -0
- data/lib/rodauth/rails/feature/render.rb +1 -1
- data/lib/rodauth/rails/railtie.rb +4 -2
- data/lib/rodauth/rails/version.rb +1 -1
- data/lib/rodauth/rails.rb +8 -7
- metadata +2 -18
- data/lib/generators/rodauth/templates/app/views/rodauth/_field.html.erb +0 -10
- data/lib/generators/rodauth/templates/app/views/rodauth/_field_error.html.erb +0 -3
- data/lib/generators/rodauth/templates/app/views/rodauth/_global_logout_field.html.erb +0 -6
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_confirm_field.html.erb +0 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_display.html.erb +0 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_field.html.erb +0 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/_login_hidden_field.html.erb +0 -1
- data/lib/generators/rodauth/templates/app/views/rodauth/_new_password_field.html.erb +0 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/_otp_auth_code_field.html.erb +0 -8
- data/lib/generators/rodauth/templates/app/views/rodauth/_password_confirm_field.html.erb +0 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/_password_field.html.erb +0 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/_recovery_code_field.html.erb +0 -4
- data/lib/generators/rodauth/templates/app/views/rodauth/_recovery_codes_form.html.erb +0 -6
- data/lib/generators/rodauth/templates/app/views/rodauth/_sms_code_field.html.erb +0 -8
- data/lib/generators/rodauth/templates/app/views/rodauth/_sms_phone_field.html.erb +0 -8
- data/lib/generators/rodauth/templates/app/views/rodauth/_submit.html.erb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de49a82bc699c6aff9764e277e9d03171d5808b907e53f4668c195c744ac05fc
|
4
|
+
data.tar.gz: 8f921485a7ebb8fdbdc810eb8900480aae8b11ba9c3cdc3540e82a581951e270
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8ef59ddc0de0a5f0a9197597195701f0f37f9fffba4112309603279af151f7d9c6d9b50453f8217b3c93db2228b095d369f0c399716f4114dbafb8244f94718
|
7
|
+
data.tar.gz: d1ac36ce1fc3c647e740c18a90fde1302d3ba3476a89bf55e78be6d4e7998dced276504c11f721fa14016688ec3d14fb2e7556c327f1fdf0571a9dbade82d6a4
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,31 @@
|
|
1
|
+
## 0.18.0 (2021-11-05)
|
2
|
+
|
3
|
+
* Disable Turbo on the generated login form (@janko)
|
4
|
+
|
5
|
+
* Generate controller views with `form_with` helper on Rails 5.1+ (@janko)
|
6
|
+
|
7
|
+
* Fix missing layout error when rendering Rodauth's built-in templates when using Turbo on Rails 6.0+ (@janko)
|
8
|
+
|
9
|
+
* Fix `Rodauth::Rails.middleware` config not actually affecting middleware insertion (@janko)
|
10
|
+
|
11
|
+
* Set page titles in generated view templates (@janko)
|
12
|
+
|
13
|
+
* Merge field and button partials into view templates (@janko)
|
14
|
+
|
15
|
+
* Raise error for unknown configuration in `Rodauth::Rails.model` (@janko)
|
16
|
+
|
17
|
+
* Generate views for all enabled features by default in `rodauth:views` generator (@janko)
|
18
|
+
|
19
|
+
* Add `Rodauth::Rails::App.rodauth!` which raises an error for unknown configuration (@janko)
|
20
|
+
|
21
|
+
* Remove deprecated `--features` option from `rodauth:views` generator (@janko)
|
22
|
+
|
23
|
+
* Inline `_recovery_codes_form.html.erb` partial into `recovery_codes.html.erb` (@janko)
|
24
|
+
|
25
|
+
* Use Rodauth helper methods for texts in generated views, for easier i18n (@janko)
|
26
|
+
|
27
|
+
* Allow setting passing a `Sequel::Model` to `:account` in `Rodauth::Rails.rodauth` (@janko)
|
28
|
+
|
1
29
|
## 0.17.1 (2021-10-20)
|
2
30
|
|
3
31
|
* Skip checking CSRF when request forgery protection wasn't loaded on the controller (@janko)
|
data/README.md
CHANGED
@@ -49,7 +49,7 @@ For instructions on upgrading from previous rodauth-rails versions, see
|
|
49
49
|
Add the gem to your Gemfile:
|
50
50
|
|
51
51
|
```rb
|
52
|
-
gem "rodauth-rails", "~> 0.
|
52
|
+
gem "rodauth-rails", "~> 0.18"
|
53
53
|
|
54
54
|
# gem "jwt", require: false # for JWT feature
|
55
55
|
# gem "rotp", require: false # for OTP feature
|
@@ -282,12 +282,12 @@ copy Rodauth templates into your Rails app:
|
|
282
282
|
$ rails generate rodauth:views
|
283
283
|
```
|
284
284
|
|
285
|
-
This will generate views for
|
286
|
-
`app/views/rodauth` directory, provided that `RodauthController` is set for
|
287
|
-
main configuration.
|
285
|
+
This will generate views for Rodauth features you have currently enabled into
|
286
|
+
the `app/views/rodauth` directory, provided that `RodauthController` is set for
|
287
|
+
the main configuration.
|
288
288
|
|
289
289
|
You can pass a list of Rodauth features to the generator to create views for
|
290
|
-
these features (this will not remove
|
290
|
+
these features (this will not remove any existing views):
|
291
291
|
|
292
292
|
```sh
|
293
293
|
$ rails generate rodauth:views login create_account lockout otp
|
@@ -302,7 +302,7 @@ $ rails generate rodauth:views --all
|
|
302
302
|
Use `--name` to generate views for a different Rodauth configuration:
|
303
303
|
|
304
304
|
```sh
|
305
|
-
$ rails generate rodauth:views --name admin
|
305
|
+
$ rails generate rodauth:views webauthn --name admin
|
306
306
|
```
|
307
307
|
|
308
308
|
#### Layout
|
@@ -1034,7 +1034,24 @@ end
|
|
1034
1034
|
While Rodauth doesn't yet come with [OmniAuth] integration, we can build one
|
1035
1035
|
ourselves using the existing Rodauth API.
|
1036
1036
|
|
1037
|
-
|
1037
|
+
Let's assume we're building Facebook login. We'll start by installing the
|
1038
|
+
necessary gems, and loading the Facebook OmniAuth strategy:
|
1039
|
+
|
1040
|
+
```rb
|
1041
|
+
# Gemfile
|
1042
|
+
gem "omniauth", "~> 2.0"
|
1043
|
+
gem "omniauth-rails_csrf_protection" # https://github.com/omniauth/omniauth/wiki/Resolving-CVE-2015-9284
|
1044
|
+
gem "omniauth-facebook"
|
1045
|
+
```
|
1046
|
+
```rb
|
1047
|
+
# config/initializers/omniauth.rb
|
1048
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
1049
|
+
provider :facebook, ENV["FACEBOOK_APP_ID"], ENV["FACEBOOK_APP_SECRET"],
|
1050
|
+
scope: "email", callback_path: "/auth/facebook/callback"
|
1051
|
+
end
|
1052
|
+
```
|
1053
|
+
|
1054
|
+
Since users might potentially want to login with multiple external providers, let's
|
1038
1055
|
create an `account_identities` table that will have a many-to-one relationship
|
1039
1056
|
with the `accounts` table:
|
1040
1057
|
|
@@ -1071,18 +1088,11 @@ class Account < ApplicationRecord
|
|
1071
1088
|
end
|
1072
1089
|
```
|
1073
1090
|
|
1074
|
-
|
1075
|
-
corresponding OmniAuth strategy to the middleware stack, together with an
|
1076
|
-
authorization link on the login form:
|
1091
|
+
Next, let's add a POST button pointing to the request URL to our login form:
|
1077
1092
|
|
1078
|
-
```rb
|
1079
|
-
Rails.application.config.middleware.use OmniAuth::Builder do
|
1080
|
-
provider :facebook, ENV["FACEBOOK_APP_ID"], ENV["FACEBOOK_APP_SECRET"],
|
1081
|
-
scope: "email", callback_path: "/auth/facebook/callback"
|
1082
|
-
end
|
1083
|
-
```
|
1084
1093
|
```erb
|
1085
|
-
<%=
|
1094
|
+
<%= button_to "Login via Facebook", "/auth/facebook",
|
1095
|
+
method: :post, data: { turbo: false }, class: "btn btn-link p-0" %>
|
1086
1096
|
```
|
1087
1097
|
|
1088
1098
|
Finally, let's implement the OmniAuth callback endpoint on our Rodauth
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
<%= form_with url: rodauth.email_auth_request_path, method: :post do |form| %>
|
2
|
+
<%= form.hidden_field rodauth.login_param, value: params[rodauth.login_param] %>
|
3
|
+
|
4
|
+
<div class="form-group mb-3">
|
5
|
+
<%= form.submit rodauth.email_auth_request_button, class: "btn btn-primary" %>
|
6
|
+
</div>
|
7
|
+
<% end %>
|
@@ -1,9 +1,26 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
1
|
+
<%= form_with url: rodauth.login_path, method: :post, data: { turbo: false } do |form| %>
|
2
|
+
<% if rodauth.skip_login_field_on_login? %>
|
3
|
+
<div class="form-group mb-3">
|
4
|
+
<%= form.label "login", rodauth.login_label, class: "form-label" %>
|
5
|
+
<%= form.email_field rodauth.login_param, value: params[rodauth.login_param], id: "login", readonly: true, class: "form-control-plaintext" %>
|
6
|
+
</div>
|
7
|
+
<% else %>
|
8
|
+
<div class="form-group mb-3">
|
9
|
+
<%= form.label "login", rodauth.login_label, class: "form-label" %>
|
10
|
+
<%= form.email_field rodauth.login_param, value: params[rodauth.login_param], id: "login", autocomplete: "email", required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.login_param)}", aria: ({ invalid: true, describedby: "login_error_message" } if rodauth.field_error(rodauth.login_param)) %>
|
11
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.login_param), class: "invalid-feedback", id: "login_error_message") if rodauth.field_error(rodauth.login_param) %>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<% unless rodauth.skip_password_field_on_login? %>
|
16
|
+
<div class="form-group mb-3">
|
17
|
+
<%= form.label "password", rodauth.password_label, class: "form-label" %>
|
18
|
+
<%= form.password_field rodauth.password_param, value: "", id: "password", autocomplete: rodauth.password_field_autocomplete_value, required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.password_param)}", aria: ({ invalid: true, describedby: "password_error_message" } if rodauth.field_error(rodauth.password_param)) %>
|
19
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.password_param), class: "invalid-feedback", id: "password_error_message") if rodauth.field_error(rodauth.password_param) %>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
<div class="form-group mb-3">
|
24
|
+
<%= form.submit rodauth.login_button, class: "btn btn-primary" %>
|
25
|
+
</div>
|
26
|
+
<% end %>
|
@@ -1,8 +1,9 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
<% unless rodauth.login_form_footer_links.empty? %>
|
2
|
+
<%== rodauth.login_form_footer_links_heading %>
|
3
|
+
|
3
4
|
<ul>
|
4
|
-
|
5
|
-
<li
|
6
|
-
|
5
|
+
<% rodauth.login_form_footer_links.sort.each do |_, link, text| %>
|
6
|
+
<li><%= link_to text, link %></li>
|
7
|
+
<% end %>
|
7
8
|
</ul>
|
8
|
-
|
9
|
+
<% end %>
|
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
<% if rodauth.field_error(rodauth.password_param) && rodauth.features.include?(:reset_password) %>
|
2
|
+
<%= render template: "rodauth/reset_password_request", layout: false %>
|
3
|
+
<% end %>
|
@@ -1,6 +1,8 @@
|
|
1
|
-
|
1
|
+
<% content_for :title, rodauth.add_recovery_codes_page_title %>
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
<pre id="recovery-codes"><%= rodauth.recovery_codes.map { |s| h(s) }.join("\n\n") %></pre>
|
4
|
+
|
5
|
+
<% if rodauth.can_add_recovery_codes? %>
|
6
|
+
<%== rodauth.add_recovery_codes_heading %>
|
7
|
+
<%= render template: "rodauth/recovery_codes", layout: false %>
|
8
|
+
<% end %>
|
@@ -1,6 +1,29 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
<% content_for :title, rodauth.change_login_page_title %>
|
2
|
+
|
3
|
+
<%= form_with url: rodauth.change_login_path, method: :post do |form| %>
|
4
|
+
<div class="form-group mb-3">
|
5
|
+
<%= form.label "login", rodauth.login_label, class: "form-label" %>
|
6
|
+
<%= form.email_field rodauth.login_param, value: params[rodauth.login_param], id: "login", autocomplete: "email", required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.login_param)}", aria: ({ invalid: true, describedby: "login_error_message" } if rodauth.field_error(rodauth.login_param)) %>
|
7
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.login_param), class: "invalid-feedback", id: "login_error_message") if rodauth.field_error(rodauth.login_param) %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<% if rodauth.require_login_confirmation? %>
|
11
|
+
<div class="form-group mb-3">
|
12
|
+
<%= form.label "login-confirm", rodauth.login_confirm_label, class: "form-label" %>
|
13
|
+
<%= form.email_field rodauth.login_confirm_param, value: params[rodauth.login_confirm_param], id: "login-confirm", autocomplete: "email", required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.login_confirm_param)}", aria: ({ invalid: true, describedby: "login-confirm_error_message" } if rodauth.field_error(rodauth.login_confirm_param)) %>
|
14
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.login_confirm_param), class: "invalid-feedback", id: "login-confirm_error_message") if rodauth.field_error(rodauth.login_confirm_param) %>
|
15
|
+
</div>
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
<% if rodauth.change_login_requires_password? %>
|
19
|
+
<div class="form-group mb-3">
|
20
|
+
<%= form.label "password", rodauth.password_label, class: "form-label" %>
|
21
|
+
<%= form.password_field rodauth.password_param, value: "", id: "password", autocomplete: rodauth.password_field_autocomplete_value, required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.password_param)}", aria: ({ invalid: true, describedby: "password_error_message" } if rodauth.field_error(rodauth.password_param)) %>
|
22
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.password_param), class: "invalid-feedback", id: "password_error_message") if rodauth.field_error(rodauth.password_param) %>
|
23
|
+
</div>
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
<div class="form-group mb-3">
|
27
|
+
<%= form.submit rodauth.change_login_button, class: "btn btn-primary" %>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
@@ -1,6 +1,29 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
<% content_for :title, rodauth.change_password_page_title %>
|
2
|
+
|
3
|
+
<%= form_with url: rodauth.change_password_path, method: :post do |form| %>
|
4
|
+
<% if rodauth.change_password_requires_password? %>
|
5
|
+
<div class="form-group mb-3">
|
6
|
+
<%= form.label "password", rodauth.password_label, class: "form-label" %>
|
7
|
+
<%= form.password_field rodauth.password_param, value: "", id: "password", autocomplete: rodauth.password_field_autocomplete_value, required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.password_param)}", aria: ({ invalid: true, describedby: "password_error_message" } if rodauth.field_error(rodauth.password_param)) %>
|
8
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.password_param), class: "invalid-feedback", id: "password_error_message") if rodauth.field_error(rodauth.password_param) %>
|
9
|
+
</div>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<div class="form-group mb-3">
|
13
|
+
<%= form.label "new-password", rodauth.new_password_label, class: "form-label" %>
|
14
|
+
<%= form.password_field rodauth.new_password_param, value: "", id: "new-password", autocomplete: "new-password", required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.new_password_param)}", aria: ({ invalid: true, describedby: "new-password_error_message" } if rodauth.field_error(rodauth.new_password_param)) %>
|
15
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.new_password_param), class: "invalid-feedback", id: "new-password_error_message") if rodauth.field_error(rodauth.new_password_param) %>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<% if rodauth.require_password_confirmation? %>
|
19
|
+
<div class="form-group mb-3">
|
20
|
+
<%= form.label "password-confirm", rodauth.password_confirm_label, class: "form-label" %>
|
21
|
+
<%= form.password_field rodauth.password_confirm_param, value: "", id: "password-confirm", autocomplete: "new-password", required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.password_confirm_param)}", aria: ({ invalid: true, describedby: "password-confirm_error_message" } if rodauth.field_error(rodauth.password_confirm_param)) %>
|
22
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.password_confirm_param), class: "invalid-feedback", id: "password-confirm_error_message") if rodauth.field_error(rodauth.password_confirm_param) %>
|
23
|
+
</div>
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
<div class="form-group mb-3">
|
27
|
+
<%= form.submit rodauth.change_password_button, class: "btn btn-primary" %>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
@@ -1,4 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
<% content_for :title, rodauth.close_account_page_title %>
|
2
|
+
|
3
|
+
<%= form_with url: rodauth.close_account_path, method: :post do |form| %>
|
4
|
+
<% if rodauth.close_account_requires_password? %>
|
5
|
+
<div class="form-group mb-3">
|
6
|
+
<%= form.label "password", rodauth.password_label, class: "form-label" %>
|
7
|
+
<%= form.password_field rodauth.password_param, value: "", id: "password", autocomplete: rodauth.password_field_autocomplete_value, required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.password_param)}", aria: ({ invalid: true, describedby: "password_error_message" } if rodauth.field_error(rodauth.password_param)) %>
|
8
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.password_param), class: "invalid-feedback", id: "password_error_message") if rodauth.field_error(rodauth.password_param) %>
|
9
|
+
</div>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<div class="form-group mb-3">
|
13
|
+
<%= form.submit rodauth.close_account_button, class: "btn btn-danger" %>
|
14
|
+
</div>
|
15
|
+
<% end %>
|
@@ -1,4 +1,13 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
<% content_for :title, rodauth.confirm_password_page_title %>
|
2
|
+
|
3
|
+
<%= form_with url: rodauth.confirm_password_path, method: :post do |form| %>
|
4
|
+
<div class="form-group mb-3">
|
5
|
+
<%= form.label "password", rodauth.password_label, class: "form-label" %>
|
6
|
+
<%= form.password_field rodauth.password_param, value: "", id: "password", autocomplete: rodauth.password_field_autocomplete_value, required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.password_param)}", aria: ({ invalid: true, describedby: "password_error_message" } if rodauth.field_error(rodauth.password_param)) %>
|
7
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.password_param), class: "invalid-feedback", id: "password_error_message") if rodauth.field_error(rodauth.password_param) %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div class="form-group mb-3">
|
11
|
+
<%= form.submit rodauth.confirm_password_button, class: "btn btn-primary" %>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
@@ -1,7 +1,37 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
<% content_for :title, rodauth.create_account_page_title %>
|
2
|
+
|
3
|
+
<%= form_with url: rodauth.create_account_path, method: :post do |form| %>
|
4
|
+
<div class="form-group mb-3">
|
5
|
+
<%= form.label "login", rodauth.login_label, class: "form-label" %>
|
6
|
+
<%= form.email_field rodauth.login_param, value: params[rodauth.login_param], id: "login", autocomplete: "email", required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.login_param)}", aria: ({ invalid: true, describedby: "login_error_message" } if rodauth.field_error(rodauth.login_param)) %>
|
7
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.login_param), class: "invalid-feedback", id: "login_error_message") if rodauth.field_error(rodauth.login_param) %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<% if rodauth.require_login_confirmation? %>
|
11
|
+
<div class="form-group mb-3">
|
12
|
+
<%= form.label "login-confirm", rodauth.login_confirm_label, class: "form-label" %>
|
13
|
+
<%= form.email_field rodauth.login_confirm_param, value: params[rodauth.login_confirm_param], id: "login-confirm", autocomplete: "email", required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.login_confirm_param)}", aria: ({ invalid: true, describedby: "login-confirm_error_message" } if rodauth.field_error(rodauth.login_confirm_param)) %>
|
14
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.login_confirm_param), class: "invalid-feedback", id: "login-confirm_error_message") if rodauth.field_error(rodauth.login_confirm_param) %>
|
15
|
+
</div>
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
<% if rodauth.create_account_set_password? %>
|
19
|
+
<div class="form-group mb-3">
|
20
|
+
<%= form.label "password", rodauth.password_label, class: "form-label" %>
|
21
|
+
<%= form.password_field rodauth.password_param, value: "", id: "password", autocomplete: rodauth.password_field_autocomplete_value, required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.password_param)}", aria: ({ invalid: true, describedby: "password_error_message" } if rodauth.field_error(rodauth.password_param)) %>
|
22
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.password_param), class: "invalid-feedback", id: "password_error_message") if rodauth.field_error(rodauth.password_param) %>
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<% if rodauth.require_password_confirmation? %>
|
26
|
+
<div class="form-group mb-3">
|
27
|
+
<%= form.label "password-confirm", rodauth.password_confirm_label, class: "form-label" %>
|
28
|
+
<%= form.password_field rodauth.password_confirm_param, value: "", id: "password-confirm", autocomplete: "new-password", required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.password_confirm_param)}", aria: ({ invalid: true, describedby: "password-confirm_error_message" } if rodauth.field_error(rodauth.password_confirm_param)) %>
|
29
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.password_confirm_param), class: "invalid-feedback", id: "password-confirm_error_message") if rodauth.field_error(rodauth.password_confirm_param) %>
|
30
|
+
</div>
|
31
|
+
<% end %>
|
32
|
+
<% end %>
|
33
|
+
|
34
|
+
<div class="form-group mb-3">
|
35
|
+
<%= form.submit rodauth.create_account_button, class: "btn btn-primary" %>
|
36
|
+
</div>
|
37
|
+
<% end %>
|
@@ -1,3 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
<% content_for :title, rodauth.email_auth_page_title %>
|
2
|
+
|
3
|
+
<%= form_with url: rodauth.email_auth_path, method: :post do |form| %>
|
4
|
+
<div class="form-group mb-3">
|
5
|
+
<%= form.submit rodauth.login_button, class: "btn btn-primary" %>
|
6
|
+
</div>
|
7
|
+
<% end %>
|
@@ -1,4 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
<% content_for :title, rodauth.logout_page_title %>
|
2
|
+
|
3
|
+
<%= form_with url: rodauth.logout_path, method: :post do |form| %>
|
4
|
+
<% if rodauth.features.include?(:active_sessions) %>
|
5
|
+
<div class="form-group mb-3">
|
6
|
+
<div class="form-check">
|
7
|
+
<%= form.check_box rodauth.global_logout_param, id: "global-logout", class: "form-check-input" %>
|
8
|
+
<%= form.label "global-logout", rodauth.global_logout_label, class: "form-check-label" %>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<div class="form-group mb-3">
|
14
|
+
<%= form.submit rodauth.logout_button, class: "btn btn-warning" %>
|
15
|
+
</div>
|
16
|
+
<% end %>
|
@@ -1,3 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
<% content_for :title, rodauth.multi_phase_login_page_title %>
|
2
|
+
|
3
|
+
<%= render "login_form_header" %>
|
4
|
+
<%== rodauth.render_multi_phase_login_forms %>
|
5
|
+
<%= render "login_form_footer" %>
|
@@ -1,4 +1,17 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
<% content_for :title, rodauth.otp_auth_page_title %>
|
2
|
+
|
3
|
+
<%= form_with url: rodauth.otp_auth_path, method: :post do |form| %>
|
4
|
+
<div class="form-group mb-3">
|
5
|
+
<%= form.label "otp-auth-code", rodauth.otp_auth_label, class: "form-label" %>
|
6
|
+
<div class="row">
|
7
|
+
<div class="col-sm-3">
|
8
|
+
<%= form.text_field rodauth.otp_auth_param, value: "", id: "otp-auth-code", autocomplete: "off", inputmode: "numeric", required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.otp_auth_param)}", aria: ({ invalid: true, describedby: "otp-auth-code_error_message" } if rodauth.field_error(rodauth.otp_auth_param)) %>
|
9
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.otp_auth_param), class: "invalid-feedback", id: "otp-auth-code_error_message") if rodauth.field_error(rodauth.otp_auth_param) %>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<div class="form-group mb-3">
|
15
|
+
<%= form.submit rodauth.otp_auth_button, class: "btn btn-primary" %>
|
16
|
+
</div>
|
17
|
+
<% end %>
|
@@ -1,4 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
<% content_for :title, rodauth.otp_disable_page_title %>
|
2
|
+
|
3
|
+
<%= form_with url: rodauth.otp_disable_path, method: :post do |form| %>
|
4
|
+
<% if rodauth.two_factor_modifications_require_password? %>
|
5
|
+
<div class="form-group mb-3">
|
6
|
+
<%= form.label "password", rodauth.password_label, class: "form-label" %>
|
7
|
+
<%= form.password_field rodauth.password_param, value: "", id: "password", autocomplete: rodauth.password_field_autocomplete_value, required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.password_param)}", aria: ({ invalid: true, describedby: "password_error_message" } if rodauth.field_error(rodauth.password_param)) %>
|
8
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.password_param), class: "invalid-feedback", id: "password_error_message") if rodauth.field_error(rodauth.password_param) %>
|
9
|
+
</div>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<div class="form-group mb-3">
|
13
|
+
<%= form.submit rodauth.otp_disable_button, class: "btn btn-warning" %>
|
14
|
+
</div>
|
15
|
+
<% end %>
|
@@ -1,23 +1,43 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
<% content_for :title, rodauth.otp_setup_page_title %>
|
2
|
+
|
3
|
+
<%= form_with url: rodauth.otp_setup_path, method: :post do |form| %>
|
4
|
+
<%= form.hidden_field rodauth.otp_setup_param, value: rodauth.otp_user_key, id: "otp-key" %>
|
5
|
+
<%= form.hidden_field rodauth.otp_setup_raw_param, value: rodauth.otp_key, id: "otp-hmac-secret" if rodauth.otp_keys_use_hmac? %>
|
4
6
|
|
5
7
|
<div class="form-group mb-3">
|
6
|
-
<p
|
7
|
-
<p
|
8
|
+
<p><%= rodauth.otp_secret_label %>: <%= rodauth.otp_user_key %></p>
|
9
|
+
<p><%= rodauth.otp_provisioning_uri_label %>: <%= rodauth.otp_provisioning_uri %></p>
|
8
10
|
</div>
|
9
11
|
|
10
12
|
<div class="row">
|
11
13
|
<div class="col-lg-6 col-lg">
|
12
14
|
<div class="form-group mb-3">
|
13
|
-
<p
|
15
|
+
<p><%== rodauth.otp_qr_code %></p>
|
14
16
|
</div>
|
15
17
|
</div>
|
16
18
|
|
17
19
|
<div class="col-lg-6 col-lg">
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
<% if rodauth.two_factor_modifications_require_password? %>
|
21
|
+
<div class="form-group mb-3">
|
22
|
+
<%= form.label "password", rodauth.password_label, class: "form-label" %>
|
23
|
+
<%= form.password_field rodauth.password_param, value: "", id: "password", autocomplete: rodauth.password_field_autocomplete_value, required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.password_param)}", aria: ({ invalid: true, describedby: "password_error_message" } if rodauth.field_error(rodauth.password_param)) %>
|
24
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.password_param), class: "invalid-feedback", id: "password_error_message") if rodauth.field_error(rodauth.password_param) %>
|
25
|
+
</div>
|
26
|
+
<% end %>
|
27
|
+
|
28
|
+
<div class="form-group mb-3">
|
29
|
+
<%= form.label "otp-auth-code", rodauth.otp_auth_label, class: "form-label" %>
|
30
|
+
<div class="row">
|
31
|
+
<div class="col-sm-3">
|
32
|
+
<%= form.text_field rodauth.otp_auth_param, value: "", id: "otp-auth-code", autocomplete: "off", inputmode: "numeric", required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.otp_auth_param)}", aria: ({ invalid: true, describedby: "otp-auth-code_error_message" } if rodauth.field_error(rodauth.otp_auth_param)) %>
|
33
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.otp_auth_param), class: "invalid-feedback", id: "otp-auth-code_error_message") if rodauth.field_error(rodauth.otp_auth_param) %>
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<div class="form-group mb-3">
|
39
|
+
<%= form.submit rodauth.otp_setup_button, class: "btn btn-primary" %>
|
40
|
+
</div>
|
21
41
|
</div>
|
22
42
|
</div>
|
23
|
-
|
43
|
+
<% end %>
|
@@ -1,4 +1,13 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
<% content_for :title, rodauth.recovery_auth_page_title %>
|
2
|
+
|
3
|
+
<%= form_with url: rodauth.recovery_auth_path, method: :post do |form| %>
|
4
|
+
<div class="form-group mb-3">
|
5
|
+
<%= form.label "recovery-code", rodauth.recovery_codes_label, class: "form-label" %>
|
6
|
+
<%= form.text_field rodauth.recovery_codes_param, value: "", id: "recovery-code", autocomplete: "off", required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.recovery_codes_param)}", aria: ({ invalid: true, describedby: "recovery-code_error_message" } if rodauth.field_error(rodauth.recovery_codes_param)) %>
|
7
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.recovery_codes_param), class: "invalid-feedback", id: "recovery-code_error_message") if rodauth.field_error(rodauth.recovery_codes_param) %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div class="form-group mb-3">
|
11
|
+
<%= form.submit rodauth.recovery_auth_button, class: "btn btn-primary" %>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
@@ -1 +1,15 @@
|
|
1
|
-
|
1
|
+
<% content_for :title, rodauth.recovery_codes_page_title %>
|
2
|
+
|
3
|
+
<%= form_with url: rodauth.recovery_codes_path, method: :post, data: { turbo: false } do |form| %>
|
4
|
+
<% if rodauth.two_factor_modifications_require_password? %>
|
5
|
+
<div class="form-group mb-3">
|
6
|
+
<%= form.label "password", rodauth.password_label, class: "form-label" %>
|
7
|
+
<%= form.password_field rodauth.password_param, value: "", id: "password", autocomplete: rodauth.password_field_autocomplete_value, required: true, class: "form-control #{"is-invalid" if rodauth.field_error(rodauth.password_param)}", aria: ({ invalid: true, describedby: "password_error_message" } if rodauth.field_error(rodauth.password_param)) %>
|
8
|
+
<%= content_tag(:span, rodauth.field_error(rodauth.password_param), class: "invalid-feedback", id: "password_error_message") if rodauth.field_error(rodauth.password_param) %>
|
9
|
+
</div>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<div class="form-group mb-3">
|
13
|
+
<%= form.submit rodauth.recovery_codes_button || rodauth.view_recovery_codes_button, name: (rodauth.add_recovery_codes_param if rodauth.recovery_codes_button), class: "btn btn-primary" %>
|
14
|
+
</div>
|
15
|
+
<% end %>
|