barkest_core 1.5.3.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/.gitignore +13 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +254 -0
- data/MIT-LICENSE +20 -0
- data/README.md +364 -0
- data/Rakefile +37 -0
- data/app/assets/fonts/barkest_core/ArchivoNarrow-Bold.ttf +0 -0
- data/app/assets/fonts/barkest_core/ArchivoNarrow-BoldItalic.ttf +0 -0
- data/app/assets/fonts/barkest_core/ArchivoNarrow-Italic.ttf +0 -0
- data/app/assets/fonts/barkest_core/ArchivoNarrow-Regular.ttf +0 -0
- data/app/assets/images/barkest_core/.keep +0 -0
- data/app/assets/images/barkest_core/barcode-B.svg +181 -0
- data/app/assets/javascripts/barkest_core/.keep +0 -0
- data/app/assets/javascripts/barkest_core/application.js +22 -0
- data/app/assets/javascripts/barkest_core/bootstrap-datepicker.js +1800 -0
- data/app/assets/javascripts/barkest_core/field_init.js +7 -0
- data/app/assets/javascripts/barkest_core/jquery.doubleScroll.js +112 -0
- data/app/assets/javascripts/barkest_core/masked_edit.js +25 -0
- data/app/assets/javascripts/barkest_core/system_status.js.erb +201 -0
- data/app/assets/stylesheets/barkest_core/.keep +0 -0
- data/app/assets/stylesheets/barkest_core/application.css +17 -0
- data/app/assets/stylesheets/barkest_core/custom.css.scss +264 -0
- data/app/assets/stylesheets/barkest_core/datepicker3.css +790 -0
- data/app/controllers/.keep +0 -0
- data/app/controllers/access_groups_controller.rb +74 -0
- data/app/controllers/account_activations_controller.rb +29 -0
- data/app/controllers/application_controller.rb +5 -0
- data/app/controllers/barkest_core/application_controller_base.rb +113 -0
- data/app/controllers/barkest_core/engine_controller_base.rb +15 -0
- data/app/controllers/barkest_core/testsub_controller.rb +21 -0
- data/app/controllers/contact_controller.rb +32 -0
- data/app/controllers/log_view_controller.rb +31 -0
- data/app/controllers/password_resets_controller.rb +126 -0
- data/app/controllers/sessions_controller.rb +64 -0
- data/app/controllers/status_controller.rb +150 -0
- data/app/controllers/system_config_controller.rb +238 -0
- data/app/controllers/system_update_controller.rb +164 -0
- data/app/controllers/test_access_controller.rb +44 -0
- data/app/controllers/test_report_controller.rb +75 -0
- data/app/controllers/users_controller.rb +218 -0
- data/app/helpers/.keep +0 -0
- data/app/helpers/barkest_core/application_helper.rb +134 -0
- data/app/helpers/barkest_core/form_helper.rb +469 -0
- data/app/helpers/barkest_core/html_helper.rb +70 -0
- data/app/helpers/barkest_core/misc_helper.rb +68 -0
- data/app/helpers/barkest_core/pdf_helper.rb +180 -0
- data/app/helpers/barkest_core/recaptcha_helper.rb +115 -0
- data/app/helpers/barkest_core/sessions_helper.rb +94 -0
- data/app/helpers/barkest_core/status_helper.rb +118 -0
- data/app/helpers/barkest_core/users_helper.rb +32 -0
- data/app/mailers/.keep +0 -0
- data/app/mailers/application_mailer.rb +5 -0
- data/app/mailers/barkest_core/application_mailer_base.rb +30 -0
- data/app/mailers/barkest_core/contact_form.rb +20 -0
- data/app/mailers/barkest_core/user_mailer.rb +44 -0
- data/app/models/.keep +0 -0
- data/app/models/access_group.rb +121 -0
- data/app/models/access_group_group_member.rb +13 -0
- data/app/models/access_group_user_member.rb +11 -0
- data/app/models/barkest_core/auth_config.rb +95 -0
- data/app/models/barkest_core/authorize_failure.rb +7 -0
- data/app/models/barkest_core/contact_message.rb +37 -0
- data/app/models/barkest_core/database_config.rb +223 -0
- data/app/models/barkest_core/db_table.rb +21 -0
- data/app/models/barkest_core/email_config.rb +132 -0
- data/app/models/barkest_core/global_status.rb +267 -0
- data/app/models/barkest_core/log_entry.rb +101 -0
- data/app/models/barkest_core/log_view_options.rb +51 -0
- data/app/models/barkest_core/ms_sql_db_definition.rb +441 -0
- data/app/models/barkest_core/ms_sql_definition.rb +221 -0
- data/app/models/barkest_core/ms_sql_function.rb +423 -0
- data/app/models/barkest_core/not_logged_in.rb +7 -0
- data/app/models/barkest_core/pdf_table_builder.rb +407 -0
- data/app/models/barkest_core/self_update_config.rb +37 -0
- data/app/models/barkest_core/user_alert.rb +29 -0
- data/app/models/barkest_core/user_alert_generators.rb +58 -0
- data/app/models/barkest_core/user_manager.rb +404 -0
- data/app/models/barkest_core/work_path.rb +74 -0
- data/app/models/disable_user.rb +18 -0
- data/app/models/ldap_access_group.rb +15 -0
- data/app/models/system_config.rb +99 -0
- data/app/models/user.rb +405 -0
- data/app/models/user_login_history.rb +11 -0
- data/app/views/.keep +0 -0
- data/app/views/access_groups/_form.html.erb +19 -0
- data/app/views/access_groups/edit.html.erb +2 -0
- data/app/views/access_groups/index.html.erb +32 -0
- data/app/views/access_groups/new.html.erb +2 -0
- data/app/views/access_groups/show.html.erb +4 -0
- data/app/views/barkest_core/contact_form/contact.html.erb +16 -0
- data/app/views/barkest_core/contact_form/contact.text.erb +13 -0
- data/app/views/barkest_core/testsub/_links.html.erb +5 -0
- data/app/views/barkest_core/testsub/page1.html.erb +3 -0
- data/app/views/barkest_core/testsub/page2.html.erb +2 -0
- data/app/views/barkest_core/testsub/page3.html.erb +2 -0
- data/app/views/barkest_core/user_mailer/account_activation.html.erb +7 -0
- data/app/views/barkest_core/user_mailer/account_activation.text.erb +6 -0
- data/app/views/barkest_core/user_mailer/invalid_password_reset.html.erb +3 -0
- data/app/views/barkest_core/user_mailer/invalid_password_reset.text.erb +5 -0
- data/app/views/barkest_core/user_mailer/password_reset.html.erb +8 -0
- data/app/views/barkest_core/user_mailer/password_reset.text.erb +7 -0
- data/app/views/contact/index.html.erb +24 -0
- data/app/views/layouts/_footer_copyright.html.erb +1 -0
- data/app/views/layouts/_menu_admin.html.erb +5 -0
- data/app/views/layouts/_menu_anon.html.erb +0 -0
- data/app/views/layouts/_menu_auth.html.erb +3 -0
- data/app/views/layouts/_menu_footer.html.erb +1 -0
- data/app/views/layouts/_nav_logo.html.erb +1 -0
- data/app/views/layouts/application.html.erb +2 -0
- data/app/views/layouts/barkest_core/_application.html.erb +24 -0
- data/app/views/layouts/barkest_core/_footer.html.erb +18 -0
- data/app/views/layouts/barkest_core/_header.html.erb +38 -0
- data/app/views/layouts/barkest_core/_html_mailer.html.erb +11 -0
- data/app/views/layouts/barkest_core/_menu_account.html.erb +14 -0
- data/app/views/layouts/barkest_core/_menu_sample.html.erb +1 -0
- data/app/views/layouts/barkest_core/_messages.html.erb +4 -0
- data/app/views/layouts/barkest_core/_shim.html.erb +4 -0
- data/app/views/layouts/barkest_core/_subheader.html.erb +1 -0
- data/app/views/layouts/barkest_core/_text_mailer.text.erb +4 -0
- data/app/views/layouts/mailer.html.erb +1 -0
- data/app/views/layouts/mailer.text.erb +1 -0
- data/app/views/log_view/index.html.erb +100 -0
- data/app/views/password_resets/edit.html.erb +20 -0
- data/app/views/password_resets/new.html.erb +14 -0
- data/app/views/sessions/new.html.erb +27 -0
- data/app/views/shared/_error_messages.html.erb +29 -0
- data/app/views/shared/_generic_user_alert.html.erb +4 -0
- data/app/views/status/current.html.erb +34 -0
- data/app/views/status/test.html.erb +50 -0
- data/app/views/system_config/index.html.erb +25 -0
- data/app/views/system_config/show_auth.html.erb +28 -0
- data/app/views/system_config/show_database.html.erb +36 -0
- data/app/views/system_config/show_email.html.erb +21 -0
- data/app/views/system_config/show_self_update.html.erb +13 -0
- data/app/views/system_update/index.html.erb +31 -0
- data/app/views/system_update/new.html.erb +2 -0
- data/app/views/test_access/allow_anon.html.erb +2 -0
- data/app/views/test_access/require_admin.html.erb +2 -0
- data/app/views/test_access/require_group_x.html.erb +2 -0
- data/app/views/test_access/require_user.html.erb +2 -0
- data/app/views/test_report/index.csv.csvrb +23 -0
- data/app/views/test_report/index.html.erb +6 -0
- data/app/views/test_report/index.pdf.prawn +50 -0
- data/app/views/test_report/index.xlsx.axlsx +28 -0
- data/app/views/users/_user.html.erb +57 -0
- data/app/views/users/_user_details.html.erb +15 -0
- data/app/views/users/_user_details_for_list.html.erb +1 -0
- data/app/views/users/_user_form.html.erb +13 -0
- data/app/views/users/disable_confirm.html.erb +19 -0
- data/app/views/users/edit.html.erb +15 -0
- data/app/views/users/index.html.erb +9 -0
- data/app/views/users/new.html.erb +10 -0
- data/app/views/users/show.html.erb +46 -0
- data/bin/rails +12 -0
- data/config/routes.rb +3 -0
- data/db/migrate/20160617172539_create_access_groups.rb +10 -0
- data/db/migrate/20160617172725_create_users.rb +26 -0
- data/db/migrate/20160617172833_create_user_login_histories.rb +12 -0
- data/db/migrate/20160622151720_create_access_group_user_members.rb +9 -0
- data/db/migrate/20160622151925_create_access_group_group_members.rb +9 -0
- data/db/migrate/20160701005706_create_ldap_access_groups.rb +11 -0
- data/db/migrate/20161108155029_create_system_configs.rb +11 -0
- data/db/seeds/barkest_core_01_create_users.rb +42 -0
- data/db/seeds.rb +53 -0
- data/lib/barkest_core/concerns/association_with_defaults.rb +55 -0
- data/lib/barkest_core/concerns/boolean_parser.rb +88 -0
- data/lib/barkest_core/concerns/date_parser.rb +181 -0
- data/lib/barkest_core/concerns/email_tester.rb +55 -0
- data/lib/barkest_core/concerns/encrypted_fields.rb +156 -0
- data/lib/barkest_core/concerns/named_model.rb +73 -0
- data/lib/barkest_core/concerns/number_parser.rb +145 -0
- data/lib/barkest_core/concerns/utc_conversion.rb +60 -0
- data/lib/barkest_core/engine.rb +105 -0
- data/lib/barkest_core/extensions/active_record_extensions.rb +120 -0
- data/lib/barkest_core/extensions/application_configuration_extensions.rb +38 -0
- data/lib/barkest_core/extensions/application_extensions.rb +50 -0
- data/lib/barkest_core/extensions/axlsx_extenstions.rb +157 -0
- data/lib/barkest_core/extensions/fixture_set_extensions.rb +107 -0
- data/lib/barkest_core/extensions/generator_extensions.rb +271 -0
- data/lib/barkest_core/extensions/main_app_extensions.rb +35 -0
- data/lib/barkest_core/extensions/prawn_document_extensions.rb +367 -0
- data/lib/barkest_core/extensions/prawn_table_extensions.rb +131 -0
- data/lib/barkest_core/extensions/router_extensions.rb +106 -0
- data/lib/barkest_core/extensions/simple_formatter_extensions.rb +66 -0
- data/lib/barkest_core/extensions/test_case_extensions.rb +348 -0
- data/lib/barkest_core/extensions/time_extensions.rb +164 -0
- data/lib/barkest_core/handlers/csv_handler.rb +30 -0
- data/lib/barkest_core/version.rb +3 -0
- data/lib/barkest_core.rb +324 -0
- data/lib/generators/barkest/install_generator.rb +102 -0
- data/lib/generators/barkest_core/actions/01_patch_application_controller.rb +55 -0
- data/lib/generators/barkest_core/actions/02_patch_application_mailer.rb +56 -0
- data/lib/generators/barkest_core/actions/03_patch_assets.rb +62 -0
- data/lib/generators/barkest_core/actions/04_patch_layouts.rb +36 -0
- data/lib/generators/barkest_core/actions/05_patch_routes.rb +93 -0
- data/lib/generators/barkest_core/actions/06_patch_seeds.rb +60 -0
- data/lib/generators/barkest_core/actions/07_copy_migrations.rb +51 -0
- data/lib/generators/barkest_core/actions/08_configure_database.rb +52 -0
- data/lib/generators/barkest_core/actions/09_configure_secrets.rb +29 -0
- data/lib/generators/barkest_core/actions/99_patch_gitignore.rb +57 -0
- data/lib/generators/barkest_core/install_generator.rb +17 -0
- data/test/barkest_core_test.rb +83 -0
- data/test/controllers/access_groups_controller_test.rb +53 -0
- data/test/controllers/contact_controller_test.rb +10 -0
- data/test/controllers/sessions_controller_test.rb +10 -0
- data/test/controllers/users_controller_test.rb +10 -0
- data/test/dummy/.gitignore +10 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +14 -0
- data/test/dummy/app/assets/stylesheets/application.css +16 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/mailers/.keep +0 -0
- data/test/dummy/app/mailers/application_mailer.rb +3 -0
- data/test/dummy/app/models/.keep +0 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +1 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +1 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/app/views/system_config/show_fake.html.erb +3 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config/application.rb +27 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +47 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +44 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/db_updater_ext.rb +33 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/sys_config_ext.rb +12 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +60 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/schema.rb +95 -0
- data/test/dummy/db/seeds/barkest_core_01_create_users.rb +42 -0
- data/test/dummy/db/seeds.rb +51 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/sql/my_test_view.sql +3 -0
- data/test/fixtures/access_groups.yml +21 -0
- data/test/fixtures/users.yml +71 -0
- data/test/helpers/barkest_core/sessions_helper_test.rb +22 -0
- data/test/integration/access_group_mgmt_test.rb +33 -0
- data/test/integration/access_test.rb +24 -0
- data/test/integration/account_activations_access_test.rb +12 -0
- data/test/integration/contact_test.rb +98 -0
- data/test/integration/extra_partial_test.rb +41 -0
- data/test/integration/log_view_access_test.rb +12 -0
- data/test/integration/password_resets_test.rb +101 -0
- data/test/integration/reports_test.rb +53 -0
- data/test/integration/status_access_test.rb +27 -0
- data/test/integration/system_config_access_test.rb +24 -0
- data/test/integration/system_update_access_test.rb +19 -0
- data/test/integration/users_access_test.rb +34 -0
- data/test/integration/users_edit_test.rb +178 -0
- data/test/integration/users_index_test.rb +62 -0
- data/test/integration/users_login_test.rb +67 -0
- data/test/integration/users_signup_test.rb +54 -0
- data/test/mailers/.keep +0 -0
- data/test/mailers/barkest_core/contact_form_test.rb +28 -0
- data/test/mailers/barkest_core/user_mailer_test.rb +43 -0
- data/test/mailers/previews/barkest_core/contact_form_preview.rb +17 -0
- data/test/mailers/previews/barkest_core/user_mailer_preview.rb +26 -0
- data/test/models/access_group_group_member_test.rb +28 -0
- data/test/models/access_group_test.rb +114 -0
- data/test/models/access_group_user_member_test.rb +28 -0
- data/test/models/barkest_core/auth_config_test.rb +57 -0
- data/test/models/barkest_core/bool_parser_test.rb +28 -0
- data/test/models/barkest_core/contact_message_test.rb +61 -0
- data/test/models/barkest_core/database_config_test.rb +33 -0
- data/test/models/barkest_core/date_parser_test.rb +110 -0
- data/test/models/barkest_core/email_config_test.rb +57 -0
- data/test/models/barkest_core/global_status_test.rb +50 -0
- data/test/models/barkest_core/ms_sql_db_updater_test.rb +115 -0
- data/test/models/barkest_core/ms_sql_definition_test.rb +102 -0
- data/test/models/barkest_core/ms_sql_function_test.rb +131 -0
- data/test/models/barkest_core/number_parser_test.rb +29 -0
- data/test/models/barkest_core/self_update_config_test.rb +29 -0
- data/test/models/barkest_core/user_alert_test.rb +19 -0
- data/test/models/barkest_core/user_manager_test.rb +34 -0
- data/test/models/barkest_core/work_path_test.rb +26 -0
- data/test/models/disable_user_test.rb +27 -0
- data/test/models/generic_time_test.rb +66 -0
- data/test/models/ldap_access_group_test.rb +31 -0
- data/test/models/pdf_table_builder_test.rb +6 -0
- data/test/models/system_config_test.rb +78 -0
- data/test/models/user_login_history_test.rb +37 -0
- data/test/models/user_test.rb +130 -0
- data/test/test_helper.rb +63 -0
- metadata +798 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
require 'net/ssh'
|
|
2
|
+
require 'barkest_ssh'
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
|
|
5
|
+
##
|
|
6
|
+
# An automatic update controller.
|
|
7
|
+
#
|
|
8
|
+
# This is performed via an SSH shell to the host to login as the configured user and then
|
|
9
|
+
# performing the various steps necessary to update the app from GIT, update the database, and precompile
|
|
10
|
+
# the assets. When that is all finished, it notifies Passenger to reload the application.
|
|
11
|
+
#
|
|
12
|
+
# The status is tracked using the SystemStatusController.
|
|
13
|
+
#
|
|
14
|
+
class SystemUpdateController < ApplicationController
|
|
15
|
+
|
|
16
|
+
before_action :require_admin
|
|
17
|
+
|
|
18
|
+
##
|
|
19
|
+
# Perform a system update.
|
|
20
|
+
#
|
|
21
|
+
def new
|
|
22
|
+
cfg = BarkestCore::SelfUpdateConfig.load
|
|
23
|
+
|
|
24
|
+
if cfg.valid? || Rails.env.test?
|
|
25
|
+
|
|
26
|
+
@file_path = Rails.root.to_s
|
|
27
|
+
@app_root_url = root_path
|
|
28
|
+
|
|
29
|
+
show_system_status(
|
|
30
|
+
main_status: 'Updating application',
|
|
31
|
+
url_on_completion: system_update_url
|
|
32
|
+
) do |status|
|
|
33
|
+
if status
|
|
34
|
+
unless Rails.env.test?
|
|
35
|
+
begin
|
|
36
|
+
File.open(BarkestCore::WorkPath.system_status_file, 'wt') do |f|
|
|
37
|
+
@status_log = f
|
|
38
|
+
|
|
39
|
+
log_header 'Creating session'
|
|
40
|
+
|
|
41
|
+
begin
|
|
42
|
+
BarkestSsh::SecureShell.new(
|
|
43
|
+
host: cfg.host,
|
|
44
|
+
user: cfg.user,
|
|
45
|
+
password: cfg.password,
|
|
46
|
+
port: cfg.port
|
|
47
|
+
) do |shell|
|
|
48
|
+
|
|
49
|
+
log_data "Session has been created.\n"
|
|
50
|
+
|
|
51
|
+
tmp_data = shell.exec('which ruby')
|
|
52
|
+
log_data "[WARNING: Global ruby]\n" if tmp_data == '/usr/bin/ruby' || tmp_data == '/usr/local/bin/ruby'
|
|
53
|
+
log_data "Ruby Path: #{tmp_data}\n"
|
|
54
|
+
|
|
55
|
+
tmp_data = shell.exec('ruby -v')
|
|
56
|
+
tmp_v = /^ruby ([0-9]+\.[0-9]+)\..*$/.match(tmp_data)[1].to_s.to_f
|
|
57
|
+
log_data "[WARNING: Ruby less than 2.2.0]\n" if tmp_v < 2.2
|
|
58
|
+
log_data "Ruby Version: #{tmp_data}\n"
|
|
59
|
+
|
|
60
|
+
shell.exec "cd \"#{@file_path}\""
|
|
61
|
+
|
|
62
|
+
if Rails.env.production?
|
|
63
|
+
|
|
64
|
+
rtlog = Proc.new do |data, _|
|
|
65
|
+
log_data data
|
|
66
|
+
nil
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
send(:before_update, shell) if respond_to?(:before_update)
|
|
70
|
+
log_header 'Resetting app files'
|
|
71
|
+
shell.exec('git reset --hard origin/master', &rtlog)
|
|
72
|
+
shell.exec('git clean -fd', &rtlog)
|
|
73
|
+
|
|
74
|
+
send(:before_file_update, shell) if respond_to?(:before_file_update)
|
|
75
|
+
log_header 'Updating app files'
|
|
76
|
+
shell.exec('git pull origin master', &rtlog)
|
|
77
|
+
# Ensure bin files are executable.
|
|
78
|
+
# Files stored by git from WSL don't seem to always get the exec bit stored.
|
|
79
|
+
shell.exec('chmod +x bin/*', &rtlog)
|
|
80
|
+
|
|
81
|
+
send(:before_bundle, shell) if respond_to?(:before_bundle)
|
|
82
|
+
log_header 'Bundling gems'
|
|
83
|
+
shell.exec('bundle install --deployment', &rtlog)
|
|
84
|
+
|
|
85
|
+
send(:before_db_update, shell) if respond_to?(:before_db_update)
|
|
86
|
+
log_header 'Updating database'
|
|
87
|
+
%w(db:create db:migrate).each do |cmd|
|
|
88
|
+
cmd = "bundle exec rake #{cmd} RAILS_ENV=production"
|
|
89
|
+
shell.exec(cmd, &rtlog)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
send(:before_db_seed, shell) if respond_to?(:before_db_seed)
|
|
93
|
+
log_header 'Seeding database'
|
|
94
|
+
cmd = 'db:seed'
|
|
95
|
+
cmd = "bundle exec rake #{cmd} RAILS_ENV=production"
|
|
96
|
+
shell.exec(cmd, &rtlog)
|
|
97
|
+
send(:after_db_seed, shell) if respond_to?(:after_db_seed)
|
|
98
|
+
|
|
99
|
+
log_header 'Generating assets'
|
|
100
|
+
cmd = "bundle exec rake assets:precompile RAILS_ENV=production RAILS_GROUPS=assets RAILS_RELATIVE_URL_ROOT=\"#{@app_root_url}\""
|
|
101
|
+
shell.exec(cmd, &rtlog)
|
|
102
|
+
send(:after_asset_gen, shell) if respond_to?(:after_asset_gen)
|
|
103
|
+
|
|
104
|
+
log_header 'Running automatic configuration'
|
|
105
|
+
cmd = "bundle exec rails generate barkest:install --force"
|
|
106
|
+
shell.exec(cmd, &rtlog)
|
|
107
|
+
send(:after_config, shell) if respond_to?(:after_config)
|
|
108
|
+
|
|
109
|
+
log_header 'Restarting app'
|
|
110
|
+
cmd = "bundle exec passenger-config restart-app \"#{@file_path}\""
|
|
111
|
+
shell.exec(cmd, &rtlog)
|
|
112
|
+
send(:after_update, shell) if respond_to?(:after_update)
|
|
113
|
+
|
|
114
|
+
else
|
|
115
|
+
log_data "Skipping actual update for non-production.\n"
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
log_data "\nUpdate process is complete.\n"
|
|
120
|
+
rescue Net::SSH::AuthenticationFailed => _
|
|
121
|
+
log_data "Failed to login to the session.\nPlease verify the update credentials in your configuration.\nUpdate is aborting.\n"
|
|
122
|
+
rescue StandardError => error
|
|
123
|
+
log_data "An unexpected error occurred.\n#{error}\nUpdate is aborting.\nManual application update may be required to restore functionality.\n"
|
|
124
|
+
rescue => error
|
|
125
|
+
log_data "A really unexpected error has occurred.\n#{error}\nUpdate is aborting.\nManual application update may be required to restore functionality.\n"
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
ensure
|
|
129
|
+
@status_log = nil
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
else
|
|
135
|
+
flash[:danger] = 'The "Self Update Settings" need to be configured before a system update can be performed.'
|
|
136
|
+
redirect_to system_config_self_update_url
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
##
|
|
142
|
+
# Shows current information about the app.
|
|
143
|
+
#
|
|
144
|
+
def index
|
|
145
|
+
app_gem_name = Rails.application.class.parent_name.underscore
|
|
146
|
+
@additional = BarkestCore.gem_list(app_gem_name, true)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
private
|
|
150
|
+
|
|
151
|
+
def require_admin
|
|
152
|
+
authorize! true
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def log_header(label)
|
|
156
|
+
@status_log.write "\n" + ('=' * 20) + label.center(24) + ('=' * 20) + "\n"
|
|
157
|
+
@status_log.flush
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def log_data(data)
|
|
161
|
+
@status_log.write data
|
|
162
|
+
@status_log.flush
|
|
163
|
+
end
|
|
164
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
##
|
|
2
|
+
# A controller used specifically to test authentication and authorization.
|
|
3
|
+
class TestAccessController < ApplicationController
|
|
4
|
+
|
|
5
|
+
before_action :valid_user
|
|
6
|
+
|
|
7
|
+
##
|
|
8
|
+
# Tests an action that doesn't require a user to be logged in.
|
|
9
|
+
def allow_anon
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
##
|
|
13
|
+
# Tests an action that requires a user to be logged in.
|
|
14
|
+
def require_user
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# Tests an action that requires a user that is an administrator to be logged in.
|
|
19
|
+
def require_admin
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
##
|
|
23
|
+
# Tests an action that requires a user that is a member of one of the groups to be logged in.
|
|
24
|
+
#
|
|
25
|
+
# The valid groups are 'group 1', 'group 2', and 'group 3'.
|
|
26
|
+
def require_group_x
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def valid_user
|
|
32
|
+
case action_name.to_sym
|
|
33
|
+
when :require_user
|
|
34
|
+
authorize!
|
|
35
|
+
when :require_admin
|
|
36
|
+
authorize! true
|
|
37
|
+
when :require_group_x
|
|
38
|
+
authorize! 'group 1', 'group 2', 'group 3'
|
|
39
|
+
else
|
|
40
|
+
true
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
class TestReportController < ApplicationController
|
|
2
|
+
|
|
3
|
+
class SampleObject
|
|
4
|
+
include ActiveModel::Model
|
|
5
|
+
|
|
6
|
+
attr_accessor :code, :name, :email, :date_of_birth, :hire_date, :pay_rate, :hours
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
private_constant :SampleObject
|
|
10
|
+
|
|
11
|
+
before_action :require_admin
|
|
12
|
+
before_action :load_sample_data
|
|
13
|
+
|
|
14
|
+
def index
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Test result: "Code,Name,Email,Date of Birth,Hire Date,Pay Rate,Hours\nSMIJOH,John Smith,j.smith@example.com,1980-01-01 00:00:00 UTC,2010-05-01 00:00:00 UTC,15.5,2260\n"
|
|
19
|
+
def csv
|
|
20
|
+
render formats: [ :csv ]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def xlsx
|
|
24
|
+
render formats: [ :xlsx ]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def pdf
|
|
28
|
+
render formats: [ :pdf ]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def require_admin
|
|
34
|
+
authorize! true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def load_sample_data
|
|
38
|
+
@data = []
|
|
39
|
+
|
|
40
|
+
if Rails.env.development? && params[:one].blank?
|
|
41
|
+
while @data.length < 100
|
|
42
|
+
fn = Faker::Name.first_name
|
|
43
|
+
ln = Faker::Name.last_name
|
|
44
|
+
code = ln[0...3] + fn[0...3]
|
|
45
|
+
bd = Faker::Date.between(65.years.ago, 19.years.ago).to_time
|
|
46
|
+
hd = Faker::Date.between(bd + 18.years, 6.months.ago).to_time
|
|
47
|
+
pr = (Random.rand(5600) + 900).to_f / 100
|
|
48
|
+
hr = (Random.rand(2000) + 1000)
|
|
49
|
+
|
|
50
|
+
@data << SampleObject.new(
|
|
51
|
+
code: code.upcase,
|
|
52
|
+
name: "#{fn} #{ln}",
|
|
53
|
+
email: "#{code.downcase}@example.com",
|
|
54
|
+
date_of_birth: bd,
|
|
55
|
+
hire_date: hd,
|
|
56
|
+
pay_rate: pr,
|
|
57
|
+
hours: hr
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
else
|
|
61
|
+
@data << SampleObject.new(
|
|
62
|
+
code: 'SMIJOH',
|
|
63
|
+
name: 'John Smith',
|
|
64
|
+
email: 'j.smith@example.com',
|
|
65
|
+
date_of_birth: Time.utc(1980, 1, 1),
|
|
66
|
+
hire_date: Time.utc(2010, 5, 1),
|
|
67
|
+
pay_rate: 15.50,
|
|
68
|
+
hours: 2260
|
|
69
|
+
)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
@data.sort!{|a,b| a.code <=> b.code}
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
##
|
|
2
|
+
# This is a user management controller.
|
|
3
|
+
#
|
|
4
|
+
# This includes all the actions necessary to create, list, edit, disable, and destroy users.
|
|
5
|
+
#
|
|
6
|
+
class UsersController < ApplicationController
|
|
7
|
+
|
|
8
|
+
before_action :not_logged_in, only: [ :new, :create ]
|
|
9
|
+
before_action :logged_in_user, except: [:new, :create]
|
|
10
|
+
before_action :load_user, except: [:index, :new, :create]
|
|
11
|
+
before_action :correct_user, only: [:edit, :update]
|
|
12
|
+
before_action :admin_user, only: [:destroy, :disable, :disable_confirm, :enable]
|
|
13
|
+
before_action :not_current, only: [:destroy, :disable, :disable_confirm, :enable]
|
|
14
|
+
before_action :not_anon, only: [:edit, :update, :destroy, :disable, :disable_confirm, :enable]
|
|
15
|
+
before_action :not_ldap, only: [:edit, :update]
|
|
16
|
+
before_action :index_filter, only: [:index]
|
|
17
|
+
before_action :show_filter, only: [:show]
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# Shows a list of all users.
|
|
21
|
+
#
|
|
22
|
+
# Admin users are shown all users including disabled and inactive.
|
|
23
|
+
# Other users only see the enabled users.
|
|
24
|
+
#
|
|
25
|
+
def index
|
|
26
|
+
@users = (current_user.system_admin? ? User.known.sorted : User.known.enabled.sorted).paginate(page: params[:page])
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
##
|
|
30
|
+
# Shows a specific user profile.
|
|
31
|
+
#
|
|
32
|
+
def show
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
##
|
|
37
|
+
# Shows the signup form for a new user.
|
|
38
|
+
#
|
|
39
|
+
def new
|
|
40
|
+
@user = User.new
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
##
|
|
44
|
+
# Creates a new user account after verifying the user is not a robot.
|
|
45
|
+
#
|
|
46
|
+
def create
|
|
47
|
+
@user = User.new(user_params)
|
|
48
|
+
if @user.valid? && verify_recaptcha_challenge(@user)
|
|
49
|
+
if @user.save
|
|
50
|
+
@user.send_activation_email request.remote_ip
|
|
51
|
+
flash[:safe_info] = 'Your account has been created, but needs to be activated before you can use it.<br/>Please check your email to activate your account.'
|
|
52
|
+
redirect_to root_url and return
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
render 'new'
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
##
|
|
59
|
+
# Shows a form to edit the user profile.
|
|
60
|
+
#
|
|
61
|
+
def edit
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
##
|
|
66
|
+
# Updates a user profile.
|
|
67
|
+
#
|
|
68
|
+
def update
|
|
69
|
+
if @user.update_attributes(user_params)
|
|
70
|
+
flash[:success] = 'Your profile has been updated.'
|
|
71
|
+
redirect_to @user
|
|
72
|
+
else
|
|
73
|
+
render 'edit'
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
##
|
|
78
|
+
# Destroys a user account that has been disabled for at least 15 days
|
|
79
|
+
# as long as the requesting user is an admin.
|
|
80
|
+
#
|
|
81
|
+
def destroy
|
|
82
|
+
if @user.enabled?
|
|
83
|
+
flash[:danger] = 'Cannot delete an enabled user.'
|
|
84
|
+
elsif @user.disabled_at.blank? || @user.disabled_at > 15.days.ago
|
|
85
|
+
flash[:danger] = 'Cannot delete a user within 15 days of being disabled.'
|
|
86
|
+
else
|
|
87
|
+
@user.destroy
|
|
88
|
+
flash[:success] = "User #{@user.name} has been deleted."
|
|
89
|
+
end
|
|
90
|
+
redirect_to users_path
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
##
|
|
94
|
+
# Shows a form requesting a reason to disable a user and allowing
|
|
95
|
+
# the administrator a chance to cancel the action.
|
|
96
|
+
#
|
|
97
|
+
def disable_confirm
|
|
98
|
+
load_disable_user
|
|
99
|
+
unless @disable.user.enabled?
|
|
100
|
+
flash[:warning] = "User #{@disable.user.name} is already disabled."
|
|
101
|
+
redirect_to users_path
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
##
|
|
106
|
+
# Disables a user account as long as the requesting user is an administrator
|
|
107
|
+
# and provides a reason the account is being disabled.
|
|
108
|
+
#
|
|
109
|
+
def disable
|
|
110
|
+
load_disable_user
|
|
111
|
+
|
|
112
|
+
if @disable.valid?
|
|
113
|
+
if @disable.user.disable(current_user, @disable.reason)
|
|
114
|
+
flash[:success] = "User #{@disable.user.name} has been disabled."
|
|
115
|
+
redirect_to users_path and return
|
|
116
|
+
else
|
|
117
|
+
@disable.errors.add(:user, 'was unable to be updated')
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
render 'disable_confirm'
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
##
|
|
125
|
+
# Enables a previosly disabled user as long as the requesting user is an
|
|
126
|
+
# administrator.
|
|
127
|
+
#
|
|
128
|
+
def enable
|
|
129
|
+
if @user.enabled?
|
|
130
|
+
flash[:warning] = "User #{@user.name} is already enabled."
|
|
131
|
+
redirect_to users_path and return
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
if @user.enable
|
|
135
|
+
flash[:success] = "User #{@user.name} has been enabled."
|
|
136
|
+
else
|
|
137
|
+
flash[:danger] = "Failed to enable user #{@user.name}."
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
redirect_to users_path
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
private
|
|
144
|
+
|
|
145
|
+
# ensure we have an @user variable to work with.
|
|
146
|
+
def load_user
|
|
147
|
+
if system_admin?
|
|
148
|
+
@user = User.find_by(id: params[:id])
|
|
149
|
+
else
|
|
150
|
+
@user = User.where(id: params[:id], enabled: true, activated: true).first
|
|
151
|
+
end
|
|
152
|
+
@user ||= User.new(name: 'Invalid User', email: 'invalid-email')
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def load_disable_user
|
|
156
|
+
@disable = DisableUser.new(params[:disable_user] ? disable_user_params : {})
|
|
157
|
+
@disable.user = @user
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def user_params
|
|
161
|
+
params.require(:user).permit(:name, :email, :password, :password_confirmation)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def disable_user_params
|
|
165
|
+
params.require(:disable_user).permit(:reason)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def not_logged_in
|
|
169
|
+
if logged_in?
|
|
170
|
+
flash[:danger] = 'You are already logged in.'
|
|
171
|
+
redirect_to root_url
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def logged_in_user
|
|
176
|
+
unless logged_in?
|
|
177
|
+
flash[:danger] = 'Please log in.'
|
|
178
|
+
store_location_and_redirect_to login_url
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def correct_user
|
|
183
|
+
# the current user can edit their details, so can an admin.
|
|
184
|
+
redirect_to(root_url) unless current_user?(@user) || system_admin?
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def admin_user
|
|
188
|
+
redirect_to(root_url) unless system_admin?
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def not_anon
|
|
192
|
+
# anon user cannot be edited.
|
|
193
|
+
redirect_to(root_url) if @user.anonymous?
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def not_ldap
|
|
197
|
+
if @user.ldap?
|
|
198
|
+
flash[:danger] = 'LDAP accounts cannot be edited.'
|
|
199
|
+
redirect_to @user
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def not_current
|
|
204
|
+
if current_user?(@user)
|
|
205
|
+
flash[:warning] = 'You cannot perform this operation on yourself.'
|
|
206
|
+
redirect_to users_path
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def index_filter
|
|
211
|
+
admin_user if BarkestCore.lock_down_users
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def show_filter
|
|
215
|
+
correct_user if BarkestCore.lock_down_users
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
end
|