rails_base 0.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +32 -0
- data/Rakefile +32 -0
- data/app/assets/config/rails_base/manifest.js +3 -0
- data/app/assets/images/rails_base/favicon.ico +0 -0
- data/app/assets/javascripts/rails_base/admin.js +2 -0
- data/app/assets/javascripts/rails_base/application.js +22 -0
- data/app/assets/javascripts/rails_base/cable.js +13 -0
- data/app/assets/javascripts/rails_base/mfa_auth.coffee +3 -0
- data/app/assets/javascripts/rails_base/secondary_authentication.coffee +3 -0
- data/app/assets/javascripts/rails_base/sessions.js +152 -0
- data/app/assets/javascripts/rails_base/user_settings.coffee +3 -0
- data/app/assets/stylesheets/rails_base/admin.css +4 -0
- data/app/assets/stylesheets/rails_base/application.scss +15 -0
- data/app/assets/stylesheets/rails_base/mfa_auth.scss +3 -0
- data/app/assets/stylesheets/rails_base/scaffolds.scss +84 -0
- data/app/assets/stylesheets/rails_base/secondary_authentication.scss +3 -0
- data/app/assets/stylesheets/rails_base/user_settings.scss +3 -0
- data/app/controllers/rails_base/admin_controller.rb +315 -0
- data/app/controllers/rails_base/application_controller.rb +153 -0
- data/app/controllers/rails_base/errors_controller.rb +29 -0
- data/app/controllers/rails_base/mfa_auth_controller.rb +50 -0
- data/app/controllers/rails_base/secondary_authentication_controller.rb +224 -0
- data/app/controllers/rails_base/switch_user_controller.rb +29 -0
- data/app/controllers/rails_base/user_settings_controller.rb +81 -0
- data/app/controllers/rails_base/users/passwords_controller.rb +19 -0
- data/app/controllers/rails_base/users/registrations_controller.rb +80 -0
- data/app/controllers/rails_base/users/sessions_controller.rb +108 -0
- data/app/helpers/rails_base/admin_helper.rb +107 -0
- data/app/helpers/rails_base/appearance_helper.rb +58 -0
- data/app/helpers/rails_base/application_helper.rb +26 -0
- data/app/helpers/rails_base/capture_reference_helper.rb +57 -0
- data/app/helpers/rails_base/mfa_auth_helper.rb +2 -0
- data/app/helpers/rails_base/secondary_authentication_helper.rb +2 -0
- data/app/helpers/rails_base/user_field_validators.rb +108 -0
- data/app/helpers/rails_base/user_settings_helper.rb +22 -0
- data/app/jobs/rails_base/application_job.rb +10 -0
- data/app/jobs/twilio_job.rb +9 -0
- data/app/mailers/rails_base/application_mailer.rb +9 -0
- data/app/mailers/rails_base/email_verification_mailer.rb +22 -0
- data/app/mailers/rails_base/event_mailer.rb +16 -0
- data/app/models/admin_action.rb +119 -0
- data/app/models/rails_base/application_record.rb +22 -0
- data/app/models/rails_base/user_constants.rb +28 -0
- data/app/models/secret.rb +37 -0
- data/app/models/short_lived_data.rb +132 -0
- data/app/models/user.rb +143 -0
- data/app/services/rails_base/admin_risky_mfa_send.rb +80 -0
- data/app/services/rails_base/admin_update_attribute.rb +100 -0
- data/app/services/rails_base/authentication/authenticate_user.rb +28 -0
- data/app/services/rails_base/authentication/constants.rb +60 -0
- data/app/services/rails_base/authentication/decision_twofa_type.rb +76 -0
- data/app/services/rails_base/authentication/destroy_user.rb +45 -0
- data/app/services/rails_base/authentication/mfa_set_encrypt_token.rb +32 -0
- data/app/services/rails_base/authentication/mfa_validator.rb +88 -0
- data/app/services/rails_base/authentication/modify_password.rb +67 -0
- data/app/services/rails_base/authentication/send_forgot_password.rb +26 -0
- data/app/services/rails_base/authentication/send_login_mfa_to_user.rb +77 -0
- data/app/services/rails_base/authentication/send_verification_email.rb +103 -0
- data/app/services/rails_base/authentication/session_token_verifier.rb +31 -0
- data/app/services/rails_base/authentication/single_sign_on_create.rb +44 -0
- data/app/services/rails_base/authentication/single_sign_on_send.rb +101 -0
- data/app/services/rails_base/authentication/single_sign_on_verify.rb +42 -0
- data/app/services/rails_base/authentication/sso_verify_email.rb +43 -0
- data/app/services/rails_base/authentication/update_phone_send_verification.rb +46 -0
- data/app/services/rails_base/authentication/verify_forgot_password.rb +46 -0
- data/app/services/rails_base/email_change.rb +20 -0
- data/app/services/rails_base/encryption.rb +87 -0
- data/app/services/rails_base/name_change.rb +71 -0
- data/app/services/rails_base/service_base.rb +65 -0
- data/app/services/rails_base/service_logging.rb +23 -0
- data/app/views/layouts/rails_base/application.html.erb +185 -0
- data/app/views/layouts/rails_base/mailer.html.erb +13 -0
- data/app/views/layouts/rails_base/mailer.text.erb +1 -0
- data/app/views/new.html.erb +4 -0
- data/app/views/rails_base/admin/history.html.erb +26 -0
- data/app/views/rails_base/admin/index.html.erb +149 -0
- data/app/views/rails_base/admin/show_config.html.erb +18 -0
- data/app/views/rails_base/devise/confirmations/new.html.erb +16 -0
- data/app/views/rails_base/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/rails_base/devise/mailer/email_changed.html.erb +7 -0
- data/app/views/rails_base/devise/mailer/password_change.html.erb +3 -0
- data/app/views/rails_base/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/rails_base/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/rails_base/devise/passwords/edit.html.erb +25 -0
- data/app/views/rails_base/devise/passwords/new.html.erb +27 -0
- data/app/views/rails_base/devise/registrations/edit.html.erb +43 -0
- data/app/views/rails_base/devise/registrations/new.html.erb +123 -0
- data/app/views/rails_base/devise/sessions/new.html.erb +4 -0
- data/app/views/rails_base/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/rails_base/devise/shared/_links.html.erb +25 -0
- data/app/views/rails_base/devise/unlocks/new.html.erb +16 -0
- data/app/views/rails_base/email_verification_mailer/email_verification.html.erb +25 -0
- data/app/views/rails_base/email_verification_mailer/event.html.erb +20 -0
- data/app/views/rails_base/email_verification_mailer/forgot_password.html.erb +22 -0
- data/app/views/rails_base/errors/internal_error.html.erb +1 -0
- data/app/views/rails_base/errors/not_found.html.erb +1 -0
- data/app/views/rails_base/errors/unacceptable.html.erb +1 -0
- data/app/views/rails_base/event_mailer/event.html.erb +10 -0
- data/app/views/rails_base/mfa_auth/mfa_code.html.erb +10 -0
- data/app/views/rails_base/secondary_authentication/after_email_login_session_new.html.erb +3 -0
- data/app/views/rails_base/secondary_authentication/forgot_password.html.erb +9 -0
- data/app/views/rails_base/secondary_authentication/remove_me.html.erb +1 -0
- data/app/views/rails_base/secondary_authentication/static.html.erb +5 -0
- data/app/views/rails_base/shared/_admin_actions_modal.html.erb +65 -0
- data/app/views/rails_base/shared/_admin_config_class.html.erb +52 -0
- data/app/views/rails_base/shared/_admin_history.html.erb +86 -0
- data/app/views/rails_base/shared/_admin_modify_email.html.erb +78 -0
- data/app/views/rails_base/shared/_admin_modify_name.html.erb +107 -0
- data/app/views/rails_base/shared/_admin_modify_phone.html.erb +87 -0
- data/app/views/rails_base/shared/_admin_modify_text.html.erb +35 -0
- data/app/views/rails_base/shared/_admin_risky_change.html.erb +57 -0
- data/app/views/rails_base/shared/_admin_risky_mfa.html.erb +74 -0
- data/app/views/rails_base/shared/_admin_selector_dropdown.html.erb +70 -0
- data/app/views/rails_base/shared/_admin_toggle_button.html.erb +72 -0
- data/app/views/rails_base/shared/_admin_warning_alert.html.erb +7 -0
- data/app/views/rails_base/shared/_appearance_mode_selector.html.erb +183 -0
- data/app/views/rails_base/shared/_custom_form_validation_javascript.html.erb +129 -0
- data/app/views/rails_base/shared/_enable_mfa_auth_modal.html.erb +105 -0
- data/app/views/rails_base/shared/_error_pages.html.erb +123 -0
- data/app/views/rails_base/shared/_logged_in_header.html.erb +123 -0
- data/app/views/rails_base/shared/_logged_out_header.html.erb +14 -0
- data/app/views/rails_base/shared/_mfa_input_layout.html.erb +5 -0
- data/app/views/rails_base/shared/_mfa_input_layout_default.html.erb +97 -0
- data/app/views/rails_base/shared/_mfa_input_layout_fallback.html.erb +55 -0
- data/app/views/rails_base/shared/_modify_mfa_auth_modal.html.erb +20 -0
- data/app/views/rails_base/shared/_password_confirm_javascript.html.erb +71 -0
- data/app/views/rails_base/shared/_reset_password_form.html.erb +111 -0
- data/app/views/rails_base/shared/_session_create_form.html.erb +32 -0
- data/app/views/rails_base/shared/_session_timeout_modal.html.erb +76 -0
- data/app/views/rails_base/switch_user/_widget.html.erb +5 -0
- data/app/views/rails_base/user_settings/_confirm_destroy_user.html.erb +42 -0
- data/app/views/rails_base/user_settings/_destroy_user.html.erb +106 -0
- data/app/views/rails_base/user_settings/_modify_name.html.erb +71 -0
- data/app/views/rails_base/user_settings/_modify_password.html.erb +101 -0
- data/app/views/rails_base/user_settings/_modify_password_update_password.html.erb +2 -0
- data/app/views/rails_base/user_settings/index.html.erb +54 -0
- data/config/initializers/01_rails_config.rb +19 -0
- data/config/initializers/admin_action_helper.rb +88 -0
- data/config/initializers/browser.rb +4 -0
- data/config/initializers/default_logged_in_headers.rb +23 -0
- data/config/initializers/devise.rb +314 -0
- data/config/initializers/encryption.rb +2 -0
- data/config/initializers/switch_user.rb +58 -0
- data/config/initializers/switch_user_helper.rb +29 -0
- data/config/locales/devise.en.yml +65 -0
- data/config/locales/en.yml +58 -0
- data/config/routes.rb +114 -0
- data/db/migrate/20210212175453_devise_create_rails_base_users.rb +56 -0
- data/db/migrate/20210212190537_create_rails_base_short_lived_data.rb +19 -0
- data/db/migrate/20210212192645_create_rails_base_secrets.rb +11 -0
- data/db/migrate/20210406015744_create_rails_base_admin_actions.rb +17 -0
- data/db/seeds.rb +23 -0
- data/lib/link_decision_helper.rb +71 -0
- data/lib/rails_base.rb +50 -0
- data/lib/rails_base/admin/action_cache.rb +99 -0
- data/lib/rails_base/admin/action_helper.rb +134 -0
- data/lib/rails_base/admin/default_index_tile.rb +176 -0
- data/lib/rails_base/admin/index_tile.rb +186 -0
- data/lib/rails_base/config.rb +52 -0
- data/lib/rails_base/configuration/active_job.rb +38 -0
- data/lib/rails_base/configuration/admin.rb +231 -0
- data/lib/rails_base/configuration/app.rb +52 -0
- data/lib/rails_base/configuration/appearance.rb +131 -0
- data/lib/rails_base/configuration/authentication.rb +37 -0
- data/lib/rails_base/configuration/base.rb +209 -0
- data/lib/rails_base/configuration/display/background_color.rb +25 -0
- data/lib/rails_base/configuration/display/btn_danger.rb +25 -0
- data/lib/rails_base/configuration/display/btn_dark.rb +25 -0
- data/lib/rails_base/configuration/display/btn_info.rb +25 -0
- data/lib/rails_base/configuration/display/btn_light.rb +25 -0
- data/lib/rails_base/configuration/display/btn_primary.rb +25 -0
- data/lib/rails_base/configuration/display/btn_secondary.rb +25 -0
- data/lib/rails_base/configuration/display/btn_success.rb +25 -0
- data/lib/rails_base/configuration/display/btn_warning.rb +25 -0
- data/lib/rails_base/configuration/display/footer.rb +54 -0
- data/lib/rails_base/configuration/display/navbar.rb +25 -0
- data/lib/rails_base/configuration/display/table_body.rb +25 -0
- data/lib/rails_base/configuration/display/table_header.rb +25 -0
- data/lib/rails_base/configuration/display/text.rb +26 -0
- data/lib/rails_base/configuration/exceptions_app.rb +25 -0
- data/lib/rails_base/configuration/login_behavior.rb +17 -0
- data/lib/rails_base/configuration/mailer.rb +116 -0
- data/lib/rails_base/configuration/mfa.rb +84 -0
- data/lib/rails_base/configuration/owner.rb +17 -0
- data/lib/rails_base/configuration/redis.rb +29 -0
- data/lib/rails_base/configuration/user.rb +43 -0
- data/lib/rails_base/engine.rb +51 -0
- data/lib/rails_base/version.rb +10 -0
- data/lib/tasks/rails_base_tasks.rake +4 -0
- data/lib/twilio_helper.rb +26 -0
- data/lib/velocity_limiter.rb +91 -0
- metadata +619 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
<div class='row'>
|
3
|
+
<div class='col-md-10 offset-md-1'>
|
4
|
+
<%= form_for(resource, as: resource_name, url: url) do |f| %>
|
5
|
+
<div class="field form-group row">
|
6
|
+
<div class="col-md-10 offset-md-1">
|
7
|
+
<%= f.email_field :email, { autofocus: resource.email.empty? ? true : nil, autocomplete: "email", placeholder: :email, class: 'form-control'}.compact %>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<div class="field form-group row">
|
12
|
+
<div class="col-md-10 offset-md-1">
|
13
|
+
<%= f.password_field :password, { autofocus: resource.email.empty? ? nil : true, autocomplete: "current-password", placeholder: :password, class: 'form-control'}.compact %>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div class="actions row">
|
18
|
+
<div class="col-md-6 offset-md-1">
|
19
|
+
<%= f.submit "Log in", class: "btn btn_success btn-block" %>
|
20
|
+
</div>
|
21
|
+
<div class="col-md-2">
|
22
|
+
<a class="btn btn_primary btn-block" href="<%=Rails.application.routes.url_helpers.new_user_registration_path%>" role="button">Sign up</a>
|
23
|
+
</div>
|
24
|
+
<div class="col-md-2">
|
25
|
+
<a class="btn btn_primary btn-block" href="<%=Rails.application.routes.url_helpers.new_user_password_path%>" role="button">Forgot Password?</a>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
<% end %>
|
31
|
+
</div>
|
32
|
+
</div>
|
@@ -0,0 +1,76 @@
|
|
1
|
+
<% default_time = 60 %>
|
2
|
+
|
3
|
+
<div class="modal fade" id="sessionTimeoutModal" tabindex="-1" role="dialog" aria-labelledby="sessionTimeoutModal" aria-hidden="true">
|
4
|
+
<div class="modal-dialog modal-dialog-centered" role="document">
|
5
|
+
<div class="modal-content">
|
6
|
+
<div class="modal-header">
|
7
|
+
<h5 class="modal-title" id="sessionTimeoutModalLabel">Are you still there?</h5>
|
8
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
9
|
+
<span aria-hidden="true">×</span>
|
10
|
+
</button>
|
11
|
+
</div>
|
12
|
+
<div class="modal-body text-center">
|
13
|
+
<%
|
14
|
+
idle = distance_of_time_in_words(RailsBase.config.auth.session_timeout - 60)
|
15
|
+
%>
|
16
|
+
This session has been idle ~<%= idle %>. This session will log out in: </br>
|
17
|
+
<strong id='modify_counter' style="font-size: 300%"><%= default_time %></strong>
|
18
|
+
</div>
|
19
|
+
<div class="modal-footer">
|
20
|
+
<button type="button" class="btn btn_secondary btn-block" data-dismiss="modal">Save Session</button>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
|
26
|
+
|
27
|
+
<script type="text/javascript">
|
28
|
+
var nextAt;
|
29
|
+
var timeoutClock;
|
30
|
+
var sessionTimeoutInterval = 1000;
|
31
|
+
|
32
|
+
function showSessionWarning(remainingTime){
|
33
|
+
resetSessionWarning();
|
34
|
+
$('#modify_counter').text(`${remainingTime}`)
|
35
|
+
$('#sessionTimeoutModal').modal('show');
|
36
|
+
nextAt = new Date().getTime();
|
37
|
+
timeoutClock = setTimeout(modifyCounter(), nextAt);
|
38
|
+
}
|
39
|
+
|
40
|
+
function closeSessionWarning(){
|
41
|
+
resetSessionWarning();
|
42
|
+
$('#sessionTimeoutModal').modal('hide');
|
43
|
+
}
|
44
|
+
|
45
|
+
function resetSessionWarning(){
|
46
|
+
clearTimeout(timeoutClock)
|
47
|
+
$('#modify_counter').css('color','')
|
48
|
+
$('#modify_counter').text(`<%= default_time%>`)
|
49
|
+
}
|
50
|
+
|
51
|
+
$('#sessionTimeoutModal').on('hidden.bs.modal', function (e) {
|
52
|
+
// when we close, ensure that we call the heartbeat server to reset the
|
53
|
+
sessionManager.checkForSessionHeartbeat();
|
54
|
+
resetSessionWarning();
|
55
|
+
})
|
56
|
+
|
57
|
+
function modifyCounter(){
|
58
|
+
nextAt += sessionTimeoutInterval;
|
59
|
+
var time_remaining = parseInt($('#modify_counter').text());
|
60
|
+
var modify_time = time_remaining - 1;
|
61
|
+
if(time_remaining>0){
|
62
|
+
$('#modify_counter').text(`${modify_time}`)
|
63
|
+
}
|
64
|
+
|
65
|
+
if(modify_time <= 10){
|
66
|
+
$('#modify_counter').css('color','red')
|
67
|
+
}
|
68
|
+
if(modify_time <=0){
|
69
|
+
timeoutClock = setTimeout(function(){ $('#sessionTimeoutModal').modal('show'); }, nextAt - new Date().getTime());
|
70
|
+
nextAt = null;
|
71
|
+
} else {
|
72
|
+
timeoutClock = setTimeout(function(){ modifyCounter(); }, nextAt - new Date().getTime());
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
</script>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<% if SwitchUser.switch_back %>
|
2
|
+
<%= check_box_tag "remember_user", "remember_user", provider.original_user.present?, onchange: "location.href = '#{ActionController::Base.relative_url_root}/switch_user/remember_user?remember=' + encodeURIComponent(this.checked)" %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<%= select_tag "switch_user_identifier", option_tags, onchange: "location.href = '#{Rails.application.routes.url_helpers.switch_user_path(scope_identifier: '')}' + encodeURIComponent(this.options[this.selectedIndex].value)", class: classes, style: styles %>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<h4 class='text-center'>We are sad to see you go. But are you sure?</h4>
|
2
|
+
<div class="row">
|
3
|
+
<div class="col-md-8 offset-md-2">
|
4
|
+
<div>
|
5
|
+
This is a <strong>DESTRUCTIVE ACTION</strong> and cannot be recovered.
|
6
|
+
</div>
|
7
|
+
<div>
|
8
|
+
To keep account open, please click close
|
9
|
+
<br>
|
10
|
+
To continue with destruction:
|
11
|
+
<ul>
|
12
|
+
<li>Select checkbox</li>
|
13
|
+
<li>Click disable</li>
|
14
|
+
</ul>
|
15
|
+
</div>
|
16
|
+
<div class="text-center">
|
17
|
+
<%= check_box_tag 'confirm-destroy-user-check', 'yes', false, class: 'form-class', style:"width: 1.55rem;
|
18
|
+
height: 1.55rem;" %>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
<script type="text/javascript">
|
24
|
+
|
25
|
+
|
26
|
+
$('#confirm-destroy-user-check').change(function() {
|
27
|
+
if(this.checked) {
|
28
|
+
$(`.destroy_user_btn`).prop('disabled', false);
|
29
|
+
$(`.destroy_user_btn`).removeClass('disabled');
|
30
|
+
$("input[name='data']").val(token);
|
31
|
+
} else {
|
32
|
+
$(`.destroy_user_btn`).addClass('disabled');
|
33
|
+
}
|
34
|
+
});
|
35
|
+
|
36
|
+
$('#destroyUserModal').on('hidden.bs.modal', function (e) {
|
37
|
+
$('#confirm-destroy-user-check').prop('checked',false)
|
38
|
+
$(`.destroy_user_btn`).addClass('disabled')
|
39
|
+
});
|
40
|
+
|
41
|
+
|
42
|
+
</script>
|
@@ -0,0 +1,106 @@
|
|
1
|
+
<!-- Modal -->
|
2
|
+
<div class="modal fade" id="destroyUserModal" tabindex="-1" role="dialog" aria-labelledby="destroyUserModalTitle" aria-hidden="true">
|
3
|
+
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
4
|
+
<div class="modal-content">
|
5
|
+
<div class="modal-header">
|
6
|
+
<h2 class="modal-title text-center font-weight-bold" id="destroyUserModalLongTitle">Destroy User Account!</h2>
|
7
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
8
|
+
<span aria-hidden="true">×</span>
|
9
|
+
</button>
|
10
|
+
</div>
|
11
|
+
<div class="modal-body">
|
12
|
+
<div class="modal-status"></div>
|
13
|
+
<div class="modal-body-content">
|
14
|
+
<h4 class="text-center">Confirm your current password to continue</h4>
|
15
|
+
<div class="field form-group row">
|
16
|
+
<div class="col-md-10 offset-md-1">
|
17
|
+
<%= password_field_tag :destroy_password, nil, autofocus: true, placeholder: "Password", class: 'form-control', required: true %>
|
18
|
+
<div class="invalid-feedback">
|
19
|
+
Incorrect Password
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
<div class="actions row">
|
24
|
+
<div class="col-md-10 offset-md-1 text-center">
|
25
|
+
<button type="button" class="btn btn_success" id="confirm-destroy-current-password">
|
26
|
+
Confirm Password
|
27
|
+
</button>
|
28
|
+
<button class="btn btn_success" id='confirm-destroy-current-password-wait' type="button" disabled style="display: none">
|
29
|
+
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true">
|
30
|
+
</span>
|
31
|
+
Please wait...
|
32
|
+
</button>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
<div class="modal-footer">
|
38
|
+
<fieldset class="w-100">
|
39
|
+
<button type="button" class="btn btn_secondary float-left" data-dismiss="modal" >Close</button>
|
40
|
+
|
41
|
+
<%= button_to "Destroy User", RailsBase.url_routes.destroy_user_path, class: "destroy_user_btn btn btn_danger disabled float-right disabled", params: { data: nil }%>
|
42
|
+
</fieldset>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
|
48
|
+
<script type="text/javascript">
|
49
|
+
var token = 'this_is_a_temp_value';
|
50
|
+
function destroy_password_submit(){
|
51
|
+
var password = $("#destroy_password").val()
|
52
|
+
var data = { 'user': { 'password': password } }
|
53
|
+
$('#confirm-destroy-current-password').hide()
|
54
|
+
$('#confirm-destroy-current-password-wait').show()
|
55
|
+
$.ajax({
|
56
|
+
type: "POST",
|
57
|
+
url: "<%= RailsBase.url_routes.confirm_current_password_path(reason: :destroy_user) %>",
|
58
|
+
headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') },
|
59
|
+
dataType: 'json',
|
60
|
+
data: data,
|
61
|
+
success: function(data) {
|
62
|
+
destroy_password_modal_reset();
|
63
|
+
html_notice = `<p class="alert alert-success">Password valid. Please confirm destruction of Account</p>`
|
64
|
+
token = data.datum
|
65
|
+
$('#destroyUserModal .modal-status').html(html_notice)
|
66
|
+
$('#destroyUserModal .modal-body-content').html(data.html)
|
67
|
+
},
|
68
|
+
error: function(xhr, status, error) {
|
69
|
+
html = `<p class="alert alert-danger">${xhr.responseJSON.msg}</p>`
|
70
|
+
$('#confirm-destroy-current-password').show()
|
71
|
+
$('#confirm-destroy-current-password-wait').hide()
|
72
|
+
$('#destroy_password').val('')
|
73
|
+
$('#destroy_password').focus();
|
74
|
+
$('#destroy_password').addClass('is-invalid');
|
75
|
+
$('#destroyUserModal .modal-status').html(html)
|
76
|
+
}
|
77
|
+
})
|
78
|
+
}
|
79
|
+
|
80
|
+
function destroy_password_modal_reset(){
|
81
|
+
$('#destroy_password').val('')
|
82
|
+
$('#confirm-destroy-current-password').show();
|
83
|
+
$('#confirm-destroy-current-password-wait').hide();
|
84
|
+
$('#destroy_password').removeClass('is-invalid');
|
85
|
+
$('#destroyUserModal .modal-status').html('')
|
86
|
+
}
|
87
|
+
|
88
|
+
$("#confirm-destroy-current-password").click(function(){
|
89
|
+
destroy_password_submit();
|
90
|
+
});
|
91
|
+
|
92
|
+
$('#destroyUserModal').on('shown.bs.modal', function (e) {
|
93
|
+
$('#destroy_password').focus();
|
94
|
+
});
|
95
|
+
|
96
|
+
$('#destroyUserModal').on('hidden.bs.modal', function (e) {
|
97
|
+
destroy_password_modal_reset()
|
98
|
+
});
|
99
|
+
|
100
|
+
$('#destroy_password').keypress(function(event){
|
101
|
+
var keycode = (event.keyCode ? event.keyCode : event.which);
|
102
|
+
if(keycode == '13'){
|
103
|
+
destroy_password_submit();
|
104
|
+
}
|
105
|
+
});
|
106
|
+
</script>
|
@@ -0,0 +1,71 @@
|
|
1
|
+
|
2
|
+
<div class="modal fade" id="modifyNameModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
3
|
+
<div class="modal-dialog modal-lg" role="document">
|
4
|
+
<div class="modal-content">
|
5
|
+
<div class="modal-header">
|
6
|
+
<h5 class="modal-title" id="exampleModalLabel">Modify Name</h5>
|
7
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
8
|
+
<span aria-hidden="true">×</span>
|
9
|
+
</button>
|
10
|
+
</div>
|
11
|
+
<div class="modal-body" style="text-align: center;">
|
12
|
+
<h4>Please enter the name you would like to change to</h4>
|
13
|
+
<%= form_for(:user, as: :user, url: RailsBase.url_routes.user_edit_name_path, html: { class: 'modify_name_change', method: :post }) do |f| %>
|
14
|
+
<div class="field input-group">
|
15
|
+
<div class="input-group-prepend">
|
16
|
+
<span class="input-group-text">
|
17
|
+
First Name
|
18
|
+
</span>
|
19
|
+
</div>
|
20
|
+
<%= f.text_field :first_name, autofocus: true, class: "flex-fill", placeholder: current_user.first_name %>
|
21
|
+
<div class="invalid-feedback">
|
22
|
+
<%= "Invalid Characters present in first name" %>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
<div class="field input-group">
|
26
|
+
<div class="input-group-prepend">
|
27
|
+
<span class="input-group-text">
|
28
|
+
Last Name
|
29
|
+
</span>
|
30
|
+
</div>
|
31
|
+
<%= f.text_field :last_name, class: "flex-fill", placeholder: current_user.last_name %>
|
32
|
+
<div class="invalid-feedback">
|
33
|
+
<%= "Invalid Characters present in last name" %>
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
|
37
|
+
<div class="actions">
|
38
|
+
<%= f.submit "Confirm Name Change", class: "submit-name-change btn btn_success", style: "width: 50%;" %>
|
39
|
+
</div>
|
40
|
+
<% end %>
|
41
|
+
</div>
|
42
|
+
<div class="modal-footer">
|
43
|
+
<button type="button" class="mr-auto btn btn_secondary" data-dismiss="modal">Close</button>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
|
49
|
+
<%
|
50
|
+
values = [
|
51
|
+
{ name: '#user_first_name', criteria: { required: true, min_length: 2, max_length: 25, pattern: :name }},
|
52
|
+
{ name: '#user_last_name', criteria: { required: true, min_length: 2 , max_length: 25, pattern: :name }},
|
53
|
+
]
|
54
|
+
function_name = 'modify_name_validity'
|
55
|
+
%>
|
56
|
+
|
57
|
+
<%= render partial: 'rails_base/shared/custom_form_validation_javascript', locals: { function_name: function_name, values: values } %>
|
58
|
+
|
59
|
+
<script type="text/javascript">
|
60
|
+
$('#modifyName').on('shown.bs.modal', function (e) {
|
61
|
+
$('#user_first_name').focus();
|
62
|
+
});
|
63
|
+
|
64
|
+
$('.modify_name_change').submit(function( event ) {
|
65
|
+
if (<%=function_name%>() == true){
|
66
|
+
return
|
67
|
+
}
|
68
|
+
event.preventDefault();
|
69
|
+
event.stopPropagation();
|
70
|
+
});
|
71
|
+
</script>
|
@@ -0,0 +1,101 @@
|
|
1
|
+
<div class="modal fade" id="modifyPasswordModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
2
|
+
<div class="modal-dialog modal-lg" role="document">
|
3
|
+
<div class="modal-content">
|
4
|
+
<div class="modal-header">
|
5
|
+
<h5 class="modal-title" id="exampleModalLabel">Modify Password</h5>
|
6
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
7
|
+
<span aria-hidden="true">×</span>
|
8
|
+
</button>
|
9
|
+
</div>
|
10
|
+
<div class="modal-body" style="text-align: center;">
|
11
|
+
<div class="modal-status"></div>
|
12
|
+
<div class="modal-body-content">
|
13
|
+
<h4>Confirm your current password</h4>
|
14
|
+
<div class="field form-group row">
|
15
|
+
<div class="col-md-10 offset-md-1">
|
16
|
+
<%= password_field_tag :password, nil, autofocus: true, placeholder: "Password", class: 'form-control', required: true %>
|
17
|
+
<div class="invalid-feedback">
|
18
|
+
Incorrect Password
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
<div class="actions row">
|
23
|
+
<div class="col-md-10 offset-md-1 text-center">
|
24
|
+
<button type="button" class="btn btn_success" id="confirm-current-password">
|
25
|
+
Confirm Password
|
26
|
+
</button>
|
27
|
+
<button class="btn btn_success" id='confirm-current-password-wait' type="button" disabled style="display: none">
|
28
|
+
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true">
|
29
|
+
</span>
|
30
|
+
Please wait...
|
31
|
+
</button>
|
32
|
+
</div>
|
33
|
+
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
<div class="modal-footer">
|
38
|
+
<button type="button" class="mr-auto btn btn_secondary" data-dismiss="modal">Close</button>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
</div>
|
42
|
+
</div>
|
43
|
+
|
44
|
+
<script type="text/javascript">
|
45
|
+
function password_submit(){
|
46
|
+
var password = $("#password").val()
|
47
|
+
var data = { 'user': { 'password': password } }
|
48
|
+
$('#confirm-current-password').hide()
|
49
|
+
$('#confirm-current-password-wait').show()
|
50
|
+
$.ajax({
|
51
|
+
type: "POST",
|
52
|
+
url: "<%= RailsBase.url_routes.confirm_current_password_path(reason: :password_flow) %>",
|
53
|
+
headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') },
|
54
|
+
dataType: 'json',
|
55
|
+
data: data,
|
56
|
+
success: function(data) {
|
57
|
+
console.log('succsful return from current password')
|
58
|
+
current_password_modal_reset()
|
59
|
+
html_notice = `<p class="alert alert-success">Password valid. Set your new password</p>`
|
60
|
+
$('#modifyPasswordModal .modal-status').html(html_notice)
|
61
|
+
$('#modifyPasswordModal .modal-body-content').html(data.html)
|
62
|
+
},
|
63
|
+
error: function(xhr, status, error) {
|
64
|
+
html = `<p class="alert alert-danger">${xhr.responseJSON.msg}</p>`
|
65
|
+
$('#confirm-current-password').show()
|
66
|
+
$('#confirm-current-password-wait').hide()
|
67
|
+
$('#password').val('')
|
68
|
+
$('#password').focus();
|
69
|
+
$('#password').addClass('is-invalid');
|
70
|
+
$('#modifyPasswordModal .modal-status').html(html)
|
71
|
+
}
|
72
|
+
})
|
73
|
+
}
|
74
|
+
|
75
|
+
function current_password_modal_reset(){
|
76
|
+
$('#password').val('')
|
77
|
+
$('#confirm-current-password').show();
|
78
|
+
$('#confirm-current-password-wait').hide();
|
79
|
+
$('#password').removeClass('is-invalid');
|
80
|
+
$('#modifyPasswordModal .modal-status').html('')
|
81
|
+
}
|
82
|
+
|
83
|
+
$("#confirm-current-password").click(function(){
|
84
|
+
password_submit();
|
85
|
+
});
|
86
|
+
|
87
|
+
$('#modifyPasswordModal').on('shown.bs.modal', function (e) {
|
88
|
+
$('#password').focus();
|
89
|
+
});
|
90
|
+
|
91
|
+
$('#modifyPasswordModal').on('hidden.bs.modal', function (e) {
|
92
|
+
current_password_modal_reset()
|
93
|
+
});
|
94
|
+
|
95
|
+
$('#password').keypress(function(event){
|
96
|
+
var keycode = (event.keyCode ? event.keyCode : event.which);
|
97
|
+
if(keycode == '13'){
|
98
|
+
password_submit();
|
99
|
+
}
|
100
|
+
});
|
101
|
+
</script>
|