trusty-cms 7.0.28 → 7.0.30

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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +15 -1
  4. data/INSTALL.md +21 -3
  5. data/README.md +0 -1
  6. data/app/assets/stylesheets/admin/modules/_buttons.scss +4 -1
  7. data/app/assets/stylesheets/admin/partials/_forms.scss +4 -0
  8. data/app/controllers/admin/security_controller.rb +78 -0
  9. data/app/controllers/admin/sessions_controller.rb +43 -0
  10. data/app/controllers/admin/two_factor_controller.rb +42 -0
  11. data/app/controllers/admin/users_controller.rb +9 -0
  12. data/app/controllers/application_controller.rb +7 -0
  13. data/app/models/standard_tags.rb +0 -16
  14. data/app/models/trusty_cms/config.rb +0 -4
  15. data/app/models/user.rb +1 -1
  16. data/app/views/admin/configuration/edit.html.haml +0 -7
  17. data/app/views/admin/configuration/show.html.haml +21 -12
  18. data/app/views/admin/preferences/edit.html.haml +1 -4
  19. data/app/views/admin/security/edit.html.haml +57 -0
  20. data/app/views/{devise → admin}/sessions/new.html.haml +5 -5
  21. data/app/views/admin/two_factor/show.html.haml +14 -0
  22. data/app/views/admin/users/_form.html.haml +0 -3
  23. data/app/views/admin/users/index.html.haml +22 -1
  24. data/app/views/devise/passwords/edit.html.haml +2 -4
  25. data/config/initializers/active_record_encryption.rb +5 -0
  26. data/config/initializers/devise.rb +4 -0
  27. data/config/initializers/trusty_cms_config.rb +0 -1
  28. data/config/locales/en.yml +30 -5
  29. data/config/routes.rb +9 -6
  30. data/db/migrate/20250502162215_add_devise_two_factor_to_admins.rb +7 -0
  31. data/lib/generators/trusty_cms/templates/application.rb.erb +1 -1
  32. data/lib/trusty_cms/admin_ui.rb +12 -7
  33. data/lib/trusty_cms/engine.rb +0 -3
  34. data/lib/trusty_cms/version.rb +1 -1
  35. data/package.json +1 -1
  36. data/spec/dummy/config/application.rb +1 -1
  37. data/spec/dummy/config/initializers/trusty_cms_config.rb +0 -1
  38. data/trusty_cms.gemspec +2 -0
  39. data/yarn.lock +4 -4
  40. metadata +38 -18
  41. data/app/assets/javascripts/rad_social/jquery.validate.min.js +0 -4
  42. data/app/assets/javascripts/rad_social/rad_ajax_form.js +0 -82
  43. data/app/assets/javascripts/rad_social/rad_email.js +0 -5
  44. data/app/assets/javascripts/rad_social/rad_email_form.js +0 -80
  45. data/app/assets/javascripts/rad_social/rad_email_validator.js +0 -47
  46. data/app/assets/javascripts/rad_social/rad_widget.js +0 -20
  47. data/app/assets/stylesheets/rad_social/rad_screen.scss +0 -141
  48. data/app/controllers/social_mailer_controller.rb +0 -26
  49. data/app/helpers/rad_social_helper.rb +0 -20
  50. data/app/mailers/rad_social_mailer.rb +0 -25
  51. data/app/views/admin/users/_password_fields.html.haml +0 -18
  52. data/app/views/rad_social_mailer/social_mail.html.haml +0 -5
  53. data/app/views/rad_social_mailer/social_mail_form.html.haml +0 -39
  54. data/app/views/widget/_email_form.html.haml +0 -20
  55. data/app/views/widget/_horizontal_widget.html.haml +0 -16
@@ -1,80 +0,0 @@
1
- $(document).ready(function() {
2
-
3
- var radModal;
4
-
5
- function centeredPopup(url,w,h){
6
- var popupWindow = null;
7
- LeftPosition = (screen.width) ? (screen.width-w)/2 : 0;
8
- TopPosition = (screen.height) ? (screen.height-h)/2 : 0;
9
- settings =
10
- 'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition;
11
- popupWindow = window.open(url,"Share",settings);
12
- }
13
-
14
- $(".rad-window-close").click(function(event) {
15
- event.preventDefault();
16
- $("#rad-social-email-form").fadeToggle('slow');
17
- });
18
-
19
- $(".rad-popup-window").click(function(event){
20
- event.preventDefault();
21
- var url = $(this).attr("href");
22
- centeredPopup(url, 625, 430)
23
-
24
- });
25
-
26
- var form = $("#rad-social-email-form");
27
-
28
- validator = form.validate({
29
- submitHandler: function(form) {
30
- var button = $('#rad_email_submit');
31
- button.attr('disabled', true);
32
- button.removeClass('primary-button').addClass('disabled-button');
33
- form.submit();
34
- clear_form();
35
- }
36
- });
37
-
38
-
39
- var radEmailValidator = new RadEmailValidator(form);
40
- radEmailValidator.addRules();
41
-
42
- form.find('#rad_email_submit').click(function(e) {
43
- return new RadAjaxForm(form).submit(OnSuccess, OnError, OnComplete);
44
- });
45
-
46
- function OnSuccess(data) {
47
- $("#rad-social-email-form").addClass('hidden');
48
- $("#rad-confirmation").removeClass('hidden');
49
-
50
- }
51
-
52
- function OnError(xhr) {
53
- processFailure(xhr);
54
- }
55
-
56
- function OnComplete() {
57
- //$('#express_contact_form').find('.continue').attr('disabled', false);
58
- //$('#express_contact_form').find(".loader").removeClass('ajax-loader');
59
- }
60
-
61
- function clear_form(){
62
- $('#rs-from').val('');
63
- $('#rs-from_name').val('');
64
- $('#rs-to').val('');
65
- $('#rs-message').val($('#rs-base-message').val());
66
- }
67
-
68
- function processFailure(xhr) {
69
- var error_msg = xhr.getResponseHeader("ErrorMsg");
70
- displayErrorMessage(error_msg);
71
- }
72
-
73
- function displayErrorMessage(msg) {
74
- var error_msg_div = $('.rad-email-error');
75
- error_msg_div.text(msg);
76
- error_msg_div.show();
77
- }
78
-
79
-
80
- });
@@ -1,47 +0,0 @@
1
- function RadEmailValidator(parentElement) {
2
- var rules = {
3
- "rs-from": {
4
- required: true,
5
- email: true,
6
- messages: {
7
- required: "From email is required."
8
- }
9
- },
10
- "rs-from_name": {
11
- required: true,
12
- messages: {
13
- required: "From name is required."
14
- }
15
- },
16
- "rs-to": {
17
- required: true,
18
- email: true,
19
- messages: {
20
- required: "To email is required"
21
- }
22
- },
23
- "rs-message": {
24
- required: true,
25
- messages: {
26
- required: "Email message is required."
27
- }
28
- }
29
- };
30
-
31
- this.addRules = function() {
32
- for (var key in rules) {
33
- $(parentElement).find("[id$=" + key + "]").rules("add", rules[key]);
34
- }
35
- };
36
-
37
- this.removeRules = function() {
38
- for (var key in rules) {
39
- $(parentElement).find("[id$=" + key + "]").rules("remove");
40
- }
41
- };
42
-
43
- function elementKeyFor(key) {
44
- return "[id$=" + parentElement.attr('id') + '_' + key + ']';
45
- }
46
-
47
- }
@@ -1,20 +0,0 @@
1
- $(document).ready(function() {
2
-
3
- function centeredPopup(url,w,h){
4
- var popupWindow = null;
5
- LeftPosition = (screen.width) ? (screen.width-w)/2 : 0;
6
- TopPosition = (screen.height) ? (screen.height-h)/2 : 0;
7
- settings =
8
- 'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition;
9
- popupWindow = window.open(url,"Share",settings);
10
- }
11
-
12
- $(".rad-popup-window").click(function(event){
13
- event.preventDefault();
14
- var url = $(this).attr("href");
15
- centeredPopup(url, 625, 430)
16
-
17
- });
18
-
19
-
20
- });
@@ -1,141 +0,0 @@
1
- .rad-icon {
2
- float: left;
3
- padding-right: 3px;
4
-
5
- .rad-facebook {
6
- background-image: url("rad_social/facebook.png");
7
- }
8
-
9
- .rad-twitter {
10
- background-image: url("rad_social/twitter.png");
11
- }
12
-
13
- .rad-email {
14
- background-image: url("rad_social/email.png");
15
- }
16
- }
17
-
18
- .rad-email-form {
19
- padding: 15px;
20
- position: relative;
21
- }
22
-
23
- .hidden {
24
- display: none;
25
- }
26
-
27
- .rad-dialog-titlebar {
28
- background: #EDEDED;
29
- height: 2em;
30
- padding: .5em .3em .3em 1em;
31
- }
32
-
33
- .rad-dialog-title {
34
- float: left;
35
- font-weight: bold;
36
- margin: .3em 0 .2em;
37
- }
38
-
39
- #rad-social-email-form .form-row .form-fields {
40
- float: left;
41
- width: 60%;
42
- }
43
-
44
- #rad-social-email-form .form-row .input-textbox {
45
- display: block;
46
- font-size: 12px;
47
- }
48
-
49
-
50
- .rad-email-form #rad_email_submit {
51
- float: right;
52
- }
53
-
54
- .rad-email-form input.std_input {
55
- margin-bottom: 10px;
56
- }
57
-
58
- .rad-email-form select {
59
- background-color: #fff;
60
- border: 1px solid #ccc;
61
- color: #6e6e6e;
62
- font: 14px "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
63
- margin-bottom: 10px;
64
- }
65
-
66
- #rad-social-email-form .form-label {
67
- display: block;
68
- float: left;
69
- padding: 5px 10px 0 0;
70
- text-align: left;
71
- width: 15%;
72
- }
73
-
74
- #rad-social-email-form .form-row {
75
- clear: both;
76
- overflow: auto;
77
- padding: 5px;
78
- }
79
-
80
-
81
- .rad-email-form input.std_input,
82
- .rad-email-form textarea {
83
- border: 1px solid #ccc;
84
- color: #6e6e6e;
85
- font: 15px "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
86
- padding: 5px;
87
- width: 97%;
88
- }
89
-
90
- .rad-email-form table {
91
- width: 100%;
92
- }
93
-
94
- .rad-email-form table input.std_input {
95
- width: 93%;
96
- }
97
-
98
- .rad-email-form table.three-col input.std_input {
99
- width: 90%;
100
- }
101
-
102
- .rad-email-form input.form_but {
103
- background-color: #93ba31;
104
- border: 3px solid #afdd39;
105
- color: #fff;
106
- font: bold 15px "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
107
- margin-top: 10px;
108
- padding: 5px 10px;
109
- }
110
-
111
- input.error {
112
- border: 1px solid #CD0A0A !important;
113
- color: #CD0A0A !important;
114
- font-family: Arial, Helvetica, sans-serif !important;
115
- }
116
-
117
- .rad-email-error, label.error {
118
- color: #CD0A0A !important;
119
- display: block;
120
- font-family: Arial, Helvetica, sans-serif !important;
121
- padding: 5px 0px !important;
122
- }
123
-
124
- #rad-confirmation {
125
- font-weight: bold;
126
- padding-top: 25px;
127
- text-align: center;
128
- }
129
-
130
- body .ajax-loader {
131
- background: transparent none no-repeat 50% 50%;
132
- background-image: url("ajax-loader.gif");
133
- height: 35px;
134
- }
135
-
136
- body #rad-social-email-form .primary-button {
137
- background: transparent none repeat-x scroll 0 0;
138
- background-image: url("bg_primary-btn.png"); /* sprite-ref: cd-backgrounds-sprite; sprite-alignment: repeat; */
139
- border: 1px solid #924900;
140
- color: white !important;
141
- }
@@ -1,26 +0,0 @@
1
- class SocialMailerController < ApplicationController
2
- include ShareLayouts::Controllers::ActionController
3
- trusty_layout 'default', { only: :create_social_mail }
4
- # no_login_required
5
- skip_before_action :authenticate_user!
6
-
7
- def create_social_mail
8
- mailer_options = {
9
- to: params[:to],
10
- from: params[:from],
11
- from_name: params[:from_name],
12
- message: params[:message],
13
- subject: params[:subject],
14
- }
15
- end
16
-
17
- def social_mail_form
18
- render template: 'rad_social_mailer/social_mail_form',
19
- layout: false,
20
- locals: {
21
- email_message: params[:email_message],
22
- email_subject: params[:email_subject],
23
- email_action_url: params[:email_action_url],
24
- }
25
- end
26
- end
@@ -1,20 +0,0 @@
1
- module RadSocialHelper
2
- def rad_test_method
3
- 'SURPRISE SURPRISE SURPRISE'
4
- end
5
-
6
- def rad_share_widget(options)
7
- url = options[:url].nil? ? request.url : options[:url]
8
- message = options[:message].nil? ? "Check out #{options[:title]}." : options[:message]
9
- email_subject = options[:email_subject].nil? ? options[:title] : options[:email_subject]
10
- email_message = options[:email_message].nil? ? "I thought you might be interested in this: #{url}" : "#{options[:email_message]} #{url}"
11
- email_action_url = options[:email_action_url].nil? ? '/rad_social/mail' : options[:email_action_url]
12
-
13
- render partial: 'widget/horizontal_widget',
14
- locals: { url: url,
15
- message: message,
16
- email_subject: email_subject,
17
- email_message: email_message,
18
- email_action_url: email_action_url }
19
- end
20
- end
@@ -1,25 +0,0 @@
1
- require 'roadie-rails'
2
-
3
- class RadSocialMailer < ApplicationMailer
4
- include Roadie::Rails::Automatic
5
-
6
- def social_mail(options)
7
- from_address = Mail::Address.new options[:from] # ex: "john@example.com"
8
- from_address.display_name = options[:from_name] # ex: "John Doe"
9
-
10
- @from_name = from_address.display_name
11
- @from_email = from_address
12
- @message = options[:message]
13
- @actual_from = ENV.fetch('RAD_SOCIAL_FROM_EMAIL')
14
- @actual_from = from_address if @actual_from.nil?
15
-
16
- mail({
17
- to: options[:to],
18
- from: @actual_from,
19
- reply_to: @from_email,
20
- subject: options[:subject],
21
- text: @message,
22
- content_type: 'text/html',
23
- })
24
- end
25
- end
@@ -1,18 +0,0 @@
1
- %fieldset#display_password{:style=> (@user.new_record? or !@user.valid?) ? 'display: none' : nil}
2
- %label= t('password')
3
- %span.value
4
- &bull;&bull;&bull;&bull;&bull;
5
- %a.button{:href=>'#', :onclick=>"$('#display_password').hide(); $('#change_password').show()"}= t('change')
6
- %fieldset#change_password{:style=> (!@user.new_record? && @user.valid?) ? 'display: none' : nil}
7
- %p
8
- = f.label :password, t('new_password')
9
- = f.password_field 'password', :value => '', :maxlength => 40, :autocomplete => 'new-password'
10
- %p
11
- = f.label :password_confirmation, t('password_confirmation')
12
- = f.password_field 'password_confirmation', :value => '', :maxlength => 40, :autocomplete => 'new-password'
13
- - unless @user.new_record?
14
- %span
15
- = t('or')
16
- %a{:href=>'#', :class=>'cancel-button', :onclick=>" $('#display_password').show(); $('#change_password').hide()"}= t('cancel', class: 'alt')
17
-
18
-
@@ -1,5 +0,0 @@
1
- %div
2
- %p
3
- = "From: #{@from_name} (#{@from_email})"
4
- %p
5
- = @message
@@ -1,39 +0,0 @@
1
- = stylesheet_link_tag('rad_social/rad_screen')
2
- = javascript_include_tag('rad_social/rad_email')
3
- = csrf_meta_tags
4
-
5
- .rad-dialog-titlebar
6
- %span.rad-dialog-title
7
- Email a Friend
8
-
9
- %form{:id=>'rad-social-email-form', :class=>'rad-email-form'}
10
- .rad-email-error
11
- %div.form-row
12
- %label.form-label{:type=>'label', :for=>'from'}
13
- From Email
14
- %div.form-fields
15
- %input{:class => 'input-textbox', :type => 'text', :id => 'rs-from', :name => 'from', :size => 30, :maxlength => 35}
16
- %div.form-row
17
- %label.form-label{:type=>'label', :for=>'from_name'}
18
- From Name
19
- %div.form-fields
20
- %input{:class => 'input-textbox', :type => 'text', :id => 'rs-from_name', :name => 'from_name', :size => 30, :maxlength => 35}
21
- %div.form-row
22
- %label.form-label{:type=>'label', :for=>'to'}
23
- To Email
24
- %div.form-fields
25
- %input{:class => 'input-textbox', :type => 'text', :id => 'rs-to', :name => 'to', :size => 30, :maxlength => 35}
26
- %div.form-row
27
- %label.form-label{:type=>'label', :for=>'message'}
28
- Message
29
- %div.form-fields
30
- %textarea{:class => 'input-textbox', :id => 'rs-message', :name => 'message', :rows => 5, :cols => 40}
31
- = email_message
32
- %input{:type=>'hidden', :name=>'subject', :value=> email_subject}
33
- %input{:type=>'hidden', :id=>'rs-base-message', :value=> email_message}
34
- %input{:type=>'hidden', :name=>'submit_url', :value=> email_action_url}
35
- %input.button.primary-button{:id => 'rad_email_submit', :type=>:button ,:value=>'Submit'}
36
- .loader
37
-
38
- #rad-confirmation.hidden
39
- Your message has been sent.
@@ -1,20 +0,0 @@
1
- = form_tag
2
- %form{:id=>'rad_social_email_form', :class=>'rad-email-form'}
3
- %label{:for => 'from'}
4
- Your Email:
5
- %input{:class => 'std_input', :type => 'text', :id => 'rs-from', :name => 'from', :size => 40, :maxlength => 35}
6
- %label{:for => 'from_name'}
7
- Your Name:
8
- %input{:class => 'std_input', :type => 'text', :id => 'rs-from_name', :name => 'from_name', :size => 40, :maxlength => 35}
9
- %label{:for => 'to'}
10
- To:
11
- %input{:class => 'std_input', :type => 'text', :id => 'rs-to', :name => 'to', :size => 40, :maxlength => 35}
12
- %label{:for => 'subject'}
13
- To:
14
- %input{:class => 'std_input', :type => 'text', :id => 'rs-subject', :name => 'subject', :size => 40, :maxlength => 35}
15
- %label{:for => 'Message'}
16
- Message:
17
- %textarea{:id => 'rs-message', :rows => 18, :cols => 40}
18
- %input{:type=>'hidden', :name=>'submit_url', :value=>'contact/email'}
19
- %input.button.primary-button{:id => 'email_submit', :type=>:button ,:value=>'Submit'}
20
- .loader
@@ -1,16 +0,0 @@
1
- = stylesheet_link_tag('rad_social/rad_screen')
2
- = javascript_include_tag('rad_social/rad_widget', async: 'true')
3
- - local_variables = defined?(locals) ? locals : local_assigns
4
- - url = local_variables[:url]
5
- - message = local_variables[:message]
6
- - email_action_url = local_variables[:email_action_url]
7
- - email_subject = local_variables[:email_subject]
8
- - email_message = local_variables[:email_message]
9
-
10
- .rad-widget
11
- .rad-icon
12
- %a{:class => 'rad-popup-window rad-facebook', :href => "https://www.facebook.com/sharer/sharer.php?u=#{CGI::escape(url)}", :target=> '_blank'}
13
- .rad-icon
14
- %a{:class => 'rad-popup-window rad-twitter', :href => "https://twitter.com/intent/tweet?text=#{CGI::escape(message + " " + url)}", :target=> '_blank'}
15
- .rad-icon
16
- %a{:class => 'rad-popup-window rad-email', :href => rad_social_mail_form_url(:email_subject => email_subject, :email_message => email_message, :email_action_url => email_action_url)}