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.
Files changed (308) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/Gemfile +22 -0
  4. data/Gemfile.lock +254 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.md +364 -0
  7. data/Rakefile +37 -0
  8. data/app/assets/fonts/barkest_core/ArchivoNarrow-Bold.ttf +0 -0
  9. data/app/assets/fonts/barkest_core/ArchivoNarrow-BoldItalic.ttf +0 -0
  10. data/app/assets/fonts/barkest_core/ArchivoNarrow-Italic.ttf +0 -0
  11. data/app/assets/fonts/barkest_core/ArchivoNarrow-Regular.ttf +0 -0
  12. data/app/assets/images/barkest_core/.keep +0 -0
  13. data/app/assets/images/barkest_core/barcode-B.svg +181 -0
  14. data/app/assets/javascripts/barkest_core/.keep +0 -0
  15. data/app/assets/javascripts/barkest_core/application.js +22 -0
  16. data/app/assets/javascripts/barkest_core/bootstrap-datepicker.js +1800 -0
  17. data/app/assets/javascripts/barkest_core/field_init.js +7 -0
  18. data/app/assets/javascripts/barkest_core/jquery.doubleScroll.js +112 -0
  19. data/app/assets/javascripts/barkest_core/masked_edit.js +25 -0
  20. data/app/assets/javascripts/barkest_core/system_status.js.erb +201 -0
  21. data/app/assets/stylesheets/barkest_core/.keep +0 -0
  22. data/app/assets/stylesheets/barkest_core/application.css +17 -0
  23. data/app/assets/stylesheets/barkest_core/custom.css.scss +264 -0
  24. data/app/assets/stylesheets/barkest_core/datepicker3.css +790 -0
  25. data/app/controllers/.keep +0 -0
  26. data/app/controllers/access_groups_controller.rb +74 -0
  27. data/app/controllers/account_activations_controller.rb +29 -0
  28. data/app/controllers/application_controller.rb +5 -0
  29. data/app/controllers/barkest_core/application_controller_base.rb +113 -0
  30. data/app/controllers/barkest_core/engine_controller_base.rb +15 -0
  31. data/app/controllers/barkest_core/testsub_controller.rb +21 -0
  32. data/app/controllers/contact_controller.rb +32 -0
  33. data/app/controllers/log_view_controller.rb +31 -0
  34. data/app/controllers/password_resets_controller.rb +126 -0
  35. data/app/controllers/sessions_controller.rb +64 -0
  36. data/app/controllers/status_controller.rb +150 -0
  37. data/app/controllers/system_config_controller.rb +238 -0
  38. data/app/controllers/system_update_controller.rb +164 -0
  39. data/app/controllers/test_access_controller.rb +44 -0
  40. data/app/controllers/test_report_controller.rb +75 -0
  41. data/app/controllers/users_controller.rb +218 -0
  42. data/app/helpers/.keep +0 -0
  43. data/app/helpers/barkest_core/application_helper.rb +134 -0
  44. data/app/helpers/barkest_core/form_helper.rb +469 -0
  45. data/app/helpers/barkest_core/html_helper.rb +70 -0
  46. data/app/helpers/barkest_core/misc_helper.rb +68 -0
  47. data/app/helpers/barkest_core/pdf_helper.rb +180 -0
  48. data/app/helpers/barkest_core/recaptcha_helper.rb +115 -0
  49. data/app/helpers/barkest_core/sessions_helper.rb +94 -0
  50. data/app/helpers/barkest_core/status_helper.rb +118 -0
  51. data/app/helpers/barkest_core/users_helper.rb +32 -0
  52. data/app/mailers/.keep +0 -0
  53. data/app/mailers/application_mailer.rb +5 -0
  54. data/app/mailers/barkest_core/application_mailer_base.rb +30 -0
  55. data/app/mailers/barkest_core/contact_form.rb +20 -0
  56. data/app/mailers/barkest_core/user_mailer.rb +44 -0
  57. data/app/models/.keep +0 -0
  58. data/app/models/access_group.rb +121 -0
  59. data/app/models/access_group_group_member.rb +13 -0
  60. data/app/models/access_group_user_member.rb +11 -0
  61. data/app/models/barkest_core/auth_config.rb +95 -0
  62. data/app/models/barkest_core/authorize_failure.rb +7 -0
  63. data/app/models/barkest_core/contact_message.rb +37 -0
  64. data/app/models/barkest_core/database_config.rb +223 -0
  65. data/app/models/barkest_core/db_table.rb +21 -0
  66. data/app/models/barkest_core/email_config.rb +132 -0
  67. data/app/models/barkest_core/global_status.rb +267 -0
  68. data/app/models/barkest_core/log_entry.rb +101 -0
  69. data/app/models/barkest_core/log_view_options.rb +51 -0
  70. data/app/models/barkest_core/ms_sql_db_definition.rb +441 -0
  71. data/app/models/barkest_core/ms_sql_definition.rb +221 -0
  72. data/app/models/barkest_core/ms_sql_function.rb +423 -0
  73. data/app/models/barkest_core/not_logged_in.rb +7 -0
  74. data/app/models/barkest_core/pdf_table_builder.rb +407 -0
  75. data/app/models/barkest_core/self_update_config.rb +37 -0
  76. data/app/models/barkest_core/user_alert.rb +29 -0
  77. data/app/models/barkest_core/user_alert_generators.rb +58 -0
  78. data/app/models/barkest_core/user_manager.rb +404 -0
  79. data/app/models/barkest_core/work_path.rb +74 -0
  80. data/app/models/disable_user.rb +18 -0
  81. data/app/models/ldap_access_group.rb +15 -0
  82. data/app/models/system_config.rb +99 -0
  83. data/app/models/user.rb +405 -0
  84. data/app/models/user_login_history.rb +11 -0
  85. data/app/views/.keep +0 -0
  86. data/app/views/access_groups/_form.html.erb +19 -0
  87. data/app/views/access_groups/edit.html.erb +2 -0
  88. data/app/views/access_groups/index.html.erb +32 -0
  89. data/app/views/access_groups/new.html.erb +2 -0
  90. data/app/views/access_groups/show.html.erb +4 -0
  91. data/app/views/barkest_core/contact_form/contact.html.erb +16 -0
  92. data/app/views/barkest_core/contact_form/contact.text.erb +13 -0
  93. data/app/views/barkest_core/testsub/_links.html.erb +5 -0
  94. data/app/views/barkest_core/testsub/page1.html.erb +3 -0
  95. data/app/views/barkest_core/testsub/page2.html.erb +2 -0
  96. data/app/views/barkest_core/testsub/page3.html.erb +2 -0
  97. data/app/views/barkest_core/user_mailer/account_activation.html.erb +7 -0
  98. data/app/views/barkest_core/user_mailer/account_activation.text.erb +6 -0
  99. data/app/views/barkest_core/user_mailer/invalid_password_reset.html.erb +3 -0
  100. data/app/views/barkest_core/user_mailer/invalid_password_reset.text.erb +5 -0
  101. data/app/views/barkest_core/user_mailer/password_reset.html.erb +8 -0
  102. data/app/views/barkest_core/user_mailer/password_reset.text.erb +7 -0
  103. data/app/views/contact/index.html.erb +24 -0
  104. data/app/views/layouts/_footer_copyright.html.erb +1 -0
  105. data/app/views/layouts/_menu_admin.html.erb +5 -0
  106. data/app/views/layouts/_menu_anon.html.erb +0 -0
  107. data/app/views/layouts/_menu_auth.html.erb +3 -0
  108. data/app/views/layouts/_menu_footer.html.erb +1 -0
  109. data/app/views/layouts/_nav_logo.html.erb +1 -0
  110. data/app/views/layouts/application.html.erb +2 -0
  111. data/app/views/layouts/barkest_core/_application.html.erb +24 -0
  112. data/app/views/layouts/barkest_core/_footer.html.erb +18 -0
  113. data/app/views/layouts/barkest_core/_header.html.erb +38 -0
  114. data/app/views/layouts/barkest_core/_html_mailer.html.erb +11 -0
  115. data/app/views/layouts/barkest_core/_menu_account.html.erb +14 -0
  116. data/app/views/layouts/barkest_core/_menu_sample.html.erb +1 -0
  117. data/app/views/layouts/barkest_core/_messages.html.erb +4 -0
  118. data/app/views/layouts/barkest_core/_shim.html.erb +4 -0
  119. data/app/views/layouts/barkest_core/_subheader.html.erb +1 -0
  120. data/app/views/layouts/barkest_core/_text_mailer.text.erb +4 -0
  121. data/app/views/layouts/mailer.html.erb +1 -0
  122. data/app/views/layouts/mailer.text.erb +1 -0
  123. data/app/views/log_view/index.html.erb +100 -0
  124. data/app/views/password_resets/edit.html.erb +20 -0
  125. data/app/views/password_resets/new.html.erb +14 -0
  126. data/app/views/sessions/new.html.erb +27 -0
  127. data/app/views/shared/_error_messages.html.erb +29 -0
  128. data/app/views/shared/_generic_user_alert.html.erb +4 -0
  129. data/app/views/status/current.html.erb +34 -0
  130. data/app/views/status/test.html.erb +50 -0
  131. data/app/views/system_config/index.html.erb +25 -0
  132. data/app/views/system_config/show_auth.html.erb +28 -0
  133. data/app/views/system_config/show_database.html.erb +36 -0
  134. data/app/views/system_config/show_email.html.erb +21 -0
  135. data/app/views/system_config/show_self_update.html.erb +13 -0
  136. data/app/views/system_update/index.html.erb +31 -0
  137. data/app/views/system_update/new.html.erb +2 -0
  138. data/app/views/test_access/allow_anon.html.erb +2 -0
  139. data/app/views/test_access/require_admin.html.erb +2 -0
  140. data/app/views/test_access/require_group_x.html.erb +2 -0
  141. data/app/views/test_access/require_user.html.erb +2 -0
  142. data/app/views/test_report/index.csv.csvrb +23 -0
  143. data/app/views/test_report/index.html.erb +6 -0
  144. data/app/views/test_report/index.pdf.prawn +50 -0
  145. data/app/views/test_report/index.xlsx.axlsx +28 -0
  146. data/app/views/users/_user.html.erb +57 -0
  147. data/app/views/users/_user_details.html.erb +15 -0
  148. data/app/views/users/_user_details_for_list.html.erb +1 -0
  149. data/app/views/users/_user_form.html.erb +13 -0
  150. data/app/views/users/disable_confirm.html.erb +19 -0
  151. data/app/views/users/edit.html.erb +15 -0
  152. data/app/views/users/index.html.erb +9 -0
  153. data/app/views/users/new.html.erb +10 -0
  154. data/app/views/users/show.html.erb +46 -0
  155. data/bin/rails +12 -0
  156. data/config/routes.rb +3 -0
  157. data/db/migrate/20160617172539_create_access_groups.rb +10 -0
  158. data/db/migrate/20160617172725_create_users.rb +26 -0
  159. data/db/migrate/20160617172833_create_user_login_histories.rb +12 -0
  160. data/db/migrate/20160622151720_create_access_group_user_members.rb +9 -0
  161. data/db/migrate/20160622151925_create_access_group_group_members.rb +9 -0
  162. data/db/migrate/20160701005706_create_ldap_access_groups.rb +11 -0
  163. data/db/migrate/20161108155029_create_system_configs.rb +11 -0
  164. data/db/seeds/barkest_core_01_create_users.rb +42 -0
  165. data/db/seeds.rb +53 -0
  166. data/lib/barkest_core/concerns/association_with_defaults.rb +55 -0
  167. data/lib/barkest_core/concerns/boolean_parser.rb +88 -0
  168. data/lib/barkest_core/concerns/date_parser.rb +181 -0
  169. data/lib/barkest_core/concerns/email_tester.rb +55 -0
  170. data/lib/barkest_core/concerns/encrypted_fields.rb +156 -0
  171. data/lib/barkest_core/concerns/named_model.rb +73 -0
  172. data/lib/barkest_core/concerns/number_parser.rb +145 -0
  173. data/lib/barkest_core/concerns/utc_conversion.rb +60 -0
  174. data/lib/barkest_core/engine.rb +105 -0
  175. data/lib/barkest_core/extensions/active_record_extensions.rb +120 -0
  176. data/lib/barkest_core/extensions/application_configuration_extensions.rb +38 -0
  177. data/lib/barkest_core/extensions/application_extensions.rb +50 -0
  178. data/lib/barkest_core/extensions/axlsx_extenstions.rb +157 -0
  179. data/lib/barkest_core/extensions/fixture_set_extensions.rb +107 -0
  180. data/lib/barkest_core/extensions/generator_extensions.rb +271 -0
  181. data/lib/barkest_core/extensions/main_app_extensions.rb +35 -0
  182. data/lib/barkest_core/extensions/prawn_document_extensions.rb +367 -0
  183. data/lib/barkest_core/extensions/prawn_table_extensions.rb +131 -0
  184. data/lib/barkest_core/extensions/router_extensions.rb +106 -0
  185. data/lib/barkest_core/extensions/simple_formatter_extensions.rb +66 -0
  186. data/lib/barkest_core/extensions/test_case_extensions.rb +348 -0
  187. data/lib/barkest_core/extensions/time_extensions.rb +164 -0
  188. data/lib/barkest_core/handlers/csv_handler.rb +30 -0
  189. data/lib/barkest_core/version.rb +3 -0
  190. data/lib/barkest_core.rb +324 -0
  191. data/lib/generators/barkest/install_generator.rb +102 -0
  192. data/lib/generators/barkest_core/actions/01_patch_application_controller.rb +55 -0
  193. data/lib/generators/barkest_core/actions/02_patch_application_mailer.rb +56 -0
  194. data/lib/generators/barkest_core/actions/03_patch_assets.rb +62 -0
  195. data/lib/generators/barkest_core/actions/04_patch_layouts.rb +36 -0
  196. data/lib/generators/barkest_core/actions/05_patch_routes.rb +93 -0
  197. data/lib/generators/barkest_core/actions/06_patch_seeds.rb +60 -0
  198. data/lib/generators/barkest_core/actions/07_copy_migrations.rb +51 -0
  199. data/lib/generators/barkest_core/actions/08_configure_database.rb +52 -0
  200. data/lib/generators/barkest_core/actions/09_configure_secrets.rb +29 -0
  201. data/lib/generators/barkest_core/actions/99_patch_gitignore.rb +57 -0
  202. data/lib/generators/barkest_core/install_generator.rb +17 -0
  203. data/test/barkest_core_test.rb +83 -0
  204. data/test/controllers/access_groups_controller_test.rb +53 -0
  205. data/test/controllers/contact_controller_test.rb +10 -0
  206. data/test/controllers/sessions_controller_test.rb +10 -0
  207. data/test/controllers/users_controller_test.rb +10 -0
  208. data/test/dummy/.gitignore +10 -0
  209. data/test/dummy/README.rdoc +28 -0
  210. data/test/dummy/Rakefile +6 -0
  211. data/test/dummy/app/assets/images/.keep +0 -0
  212. data/test/dummy/app/assets/javascripts/application.js +14 -0
  213. data/test/dummy/app/assets/stylesheets/application.css +16 -0
  214. data/test/dummy/app/controllers/application_controller.rb +5 -0
  215. data/test/dummy/app/controllers/concerns/.keep +0 -0
  216. data/test/dummy/app/helpers/application_helper.rb +2 -0
  217. data/test/dummy/app/mailers/.keep +0 -0
  218. data/test/dummy/app/mailers/application_mailer.rb +3 -0
  219. data/test/dummy/app/models/.keep +0 -0
  220. data/test/dummy/app/models/concerns/.keep +0 -0
  221. data/test/dummy/app/views/layouts/application.html.erb +1 -0
  222. data/test/dummy/app/views/layouts/mailer.html.erb +1 -0
  223. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  224. data/test/dummy/app/views/system_config/show_fake.html.erb +3 -0
  225. data/test/dummy/bin/bundle +3 -0
  226. data/test/dummy/bin/rails +4 -0
  227. data/test/dummy/bin/rake +4 -0
  228. data/test/dummy/bin/setup +29 -0
  229. data/test/dummy/config/application.rb +27 -0
  230. data/test/dummy/config/boot.rb +5 -0
  231. data/test/dummy/config/environment.rb +5 -0
  232. data/test/dummy/config/environments/development.rb +47 -0
  233. data/test/dummy/config/environments/production.rb +79 -0
  234. data/test/dummy/config/environments/test.rb +44 -0
  235. data/test/dummy/config/initializers/assets.rb +11 -0
  236. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  237. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  238. data/test/dummy/config/initializers/db_updater_ext.rb +33 -0
  239. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  240. data/test/dummy/config/initializers/inflections.rb +16 -0
  241. data/test/dummy/config/initializers/mime_types.rb +4 -0
  242. data/test/dummy/config/initializers/session_store.rb +3 -0
  243. data/test/dummy/config/initializers/sys_config_ext.rb +12 -0
  244. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  245. data/test/dummy/config/locales/en.yml +23 -0
  246. data/test/dummy/config/routes.rb +60 -0
  247. data/test/dummy/config.ru +4 -0
  248. data/test/dummy/db/schema.rb +95 -0
  249. data/test/dummy/db/seeds/barkest_core_01_create_users.rb +42 -0
  250. data/test/dummy/db/seeds.rb +51 -0
  251. data/test/dummy/lib/assets/.keep +0 -0
  252. data/test/dummy/log/.keep +0 -0
  253. data/test/dummy/public/404.html +67 -0
  254. data/test/dummy/public/422.html +67 -0
  255. data/test/dummy/public/500.html +66 -0
  256. data/test/dummy/public/favicon.ico +0 -0
  257. data/test/dummy/sql/my_test_view.sql +3 -0
  258. data/test/fixtures/access_groups.yml +21 -0
  259. data/test/fixtures/users.yml +71 -0
  260. data/test/helpers/barkest_core/sessions_helper_test.rb +22 -0
  261. data/test/integration/access_group_mgmt_test.rb +33 -0
  262. data/test/integration/access_test.rb +24 -0
  263. data/test/integration/account_activations_access_test.rb +12 -0
  264. data/test/integration/contact_test.rb +98 -0
  265. data/test/integration/extra_partial_test.rb +41 -0
  266. data/test/integration/log_view_access_test.rb +12 -0
  267. data/test/integration/password_resets_test.rb +101 -0
  268. data/test/integration/reports_test.rb +53 -0
  269. data/test/integration/status_access_test.rb +27 -0
  270. data/test/integration/system_config_access_test.rb +24 -0
  271. data/test/integration/system_update_access_test.rb +19 -0
  272. data/test/integration/users_access_test.rb +34 -0
  273. data/test/integration/users_edit_test.rb +178 -0
  274. data/test/integration/users_index_test.rb +62 -0
  275. data/test/integration/users_login_test.rb +67 -0
  276. data/test/integration/users_signup_test.rb +54 -0
  277. data/test/mailers/.keep +0 -0
  278. data/test/mailers/barkest_core/contact_form_test.rb +28 -0
  279. data/test/mailers/barkest_core/user_mailer_test.rb +43 -0
  280. data/test/mailers/previews/barkest_core/contact_form_preview.rb +17 -0
  281. data/test/mailers/previews/barkest_core/user_mailer_preview.rb +26 -0
  282. data/test/models/access_group_group_member_test.rb +28 -0
  283. data/test/models/access_group_test.rb +114 -0
  284. data/test/models/access_group_user_member_test.rb +28 -0
  285. data/test/models/barkest_core/auth_config_test.rb +57 -0
  286. data/test/models/barkest_core/bool_parser_test.rb +28 -0
  287. data/test/models/barkest_core/contact_message_test.rb +61 -0
  288. data/test/models/barkest_core/database_config_test.rb +33 -0
  289. data/test/models/barkest_core/date_parser_test.rb +110 -0
  290. data/test/models/barkest_core/email_config_test.rb +57 -0
  291. data/test/models/barkest_core/global_status_test.rb +50 -0
  292. data/test/models/barkest_core/ms_sql_db_updater_test.rb +115 -0
  293. data/test/models/barkest_core/ms_sql_definition_test.rb +102 -0
  294. data/test/models/barkest_core/ms_sql_function_test.rb +131 -0
  295. data/test/models/barkest_core/number_parser_test.rb +29 -0
  296. data/test/models/barkest_core/self_update_config_test.rb +29 -0
  297. data/test/models/barkest_core/user_alert_test.rb +19 -0
  298. data/test/models/barkest_core/user_manager_test.rb +34 -0
  299. data/test/models/barkest_core/work_path_test.rb +26 -0
  300. data/test/models/disable_user_test.rb +27 -0
  301. data/test/models/generic_time_test.rb +66 -0
  302. data/test/models/ldap_access_group_test.rb +31 -0
  303. data/test/models/pdf_table_builder_test.rb +6 -0
  304. data/test/models/system_config_test.rb +78 -0
  305. data/test/models/user_login_history_test.rb +37 -0
  306. data/test/models/user_test.rb +130 -0
  307. data/test/test_helper.rb +63 -0
  308. metadata +798 -0
@@ -0,0 +1,28 @@
1
+ xlsx_package.simple('Test Report') do |sheet,styles|
2
+
3
+ sheet.workbook.package.core.created = Time.zone.local(2016, 12, 8, 15, 0)
4
+
5
+ # add the header row.
6
+ sheet.add_combined_row [
7
+ [ 'Code', :bold ],
8
+ [ 'Name', :bold ],
9
+ [ 'Email', :bold ],
10
+ [ 'Date of Birth', :bold ],
11
+ [ 'Hire Date', :bold ],
12
+ [ 'Pay Rate', :bold ],
13
+ [ 'Hours', :bold ]
14
+ ]
15
+
16
+ # now the data rows.
17
+ @data.each do |row|
18
+ sheet.add_combined_row [
19
+ row.code,
20
+ row.name,
21
+ row.email,
22
+ [ row.date_of_birth, :date ],
23
+ [ row.hire_date, :date ],
24
+ [ row.pay_rate, :currency ],
25
+ [ row.hours, :integer ]
26
+ ]
27
+ end
28
+ end
@@ -0,0 +1,57 @@
1
+ <%
2
+ display_class =
3
+ if current_user?(user)
4
+ 'class="success"'
5
+ elsif user.enabled?
6
+ if user.failed_login_streak.count >= 10
7
+ 'class="danger"'
8
+ elsif user.failed_login_streak.count >= 5
9
+ 'class="warning"'
10
+ else
11
+ ''
12
+ end
13
+ else
14
+ 'class="info"'
15
+ end.html_safe
16
+ %>
17
+ <li <%= display_class %>>
18
+ <% if current_user.system_admin? %>
19
+ <div style="width: 5em;">
20
+ <% if current_user?(user) %>
21
+ &nbsp;
22
+ <% else %>
23
+ <ul>
24
+ <% if user.enabled? %>
25
+ <%= link_to glyph('remove'), disable_user_path(user), class: 'btn btn-danger btn-xs', title: 'Disable user' %>
26
+ <% else %>
27
+ <%= link_to glyph('plus'), enable_user_path(user), class: 'btn btn-primary btn-xs', method: :patch, title: 'Enable user' %>
28
+ <%= link_to glyph('trash'), user, method: :delete, class: 'btn btn-danger btn-xs', title: 'Delete user', data: { confirm: "Are you sure you want to permanently delete #{user.name}?" } %>
29
+ <% end %>
30
+ </ul>
31
+ <% end %>
32
+ </div>
33
+ <% end %>
34
+ <%= gravatar_for user, size: 50 %>
35
+ <%= link_to user.name, user %>
36
+ <p style="width: 35%;">
37
+ <% if user.enabled? %>
38
+ <% if user.failed_login_streak.count > 1 %>
39
+ Failed Login Streak: <%= user.failed_login_streak.count %><br />
40
+ Most Recent Attempt: <%= user.last_failed_login.created_at.in_time_zone.strftime('%m/%d/%Y') %> from <%= user.last_failed_login.ip_address %><br />
41
+ <% elsif user.failed_login_streak.count == 1 %>
42
+ Failed Login Attempt: <%= user.last_failed_login.created_at.in_time_zone.strftime('%m/%d/%Y') %> from <%= user.last_failed_login.ip_address %><br />
43
+ <% end %>
44
+ <% if user.last_successful_login %>
45
+ Most Recent Login: <%= user.last_successful_login.created_at.in_time_zone.strftime('%m/%d/%Y') %> from <%= user.last_successful_login.ip_address %>
46
+ <% else %>
47
+ Most Recent Login: Never
48
+ <% end %>
49
+ <% else %>
50
+ Disabled <%= user.disabled_at ? user.disabled_at.in_time_zone.strftime('%m/%d/%Y') : 'some time in the past' %> by <%= user.disabled_by ? user.disabled_by.name : 'Unknown User' %>.<br />
51
+ <%= user.disabled_reason %>
52
+ <% end %>
53
+ </p>
54
+ <p style="width: 35%;">
55
+ <%= render 'users/user_details_for_list' %>
56
+ </p>
57
+ </li>
@@ -0,0 +1,15 @@
1
+ <label>Email</label>
2
+ <p><%= user.email %></p>
3
+
4
+ <label>Account Created</label>
5
+ <p><%= user.created_at.in_time_zone.strftime('%Y-%m-%d %H:%M') %></p>
6
+
7
+ <label>Account Type</label>
8
+ <p><%= user.ldap? ? 'Directory' : 'Local' %></p>
9
+
10
+ <p>
11
+ This section can be filled in with whatever information you desire.
12
+ Simply create a <code>users/_user_details.html.erb</code> view and fill in your information.
13
+ Within this view you can access the user's details via the <code>user</code> variable.
14
+ </p>
15
+
@@ -0,0 +1 @@
1
+ <!-- Fill in this section by editing the 'users/_user_details_for_list.html.erb' view. -->
@@ -0,0 +1,13 @@
1
+ <%= form_for(@user) do |f| %>
2
+ <%= text_form_group f, :name, field_maxlength: '100' %>
3
+
4
+ <%= text_form_group f, :email, field_type: 'email' %>
5
+
6
+ <%= text_form_group f, :password, field_type: 'password' %>
7
+
8
+ <%= text_form_group f, :password_confirmation, field_type: 'password' %>
9
+
10
+ <%= @user.new_record? ? add_recaptcha_challenge : '' %>
11
+
12
+ <%= f.submit current_user?(@user) ? (@user.new_record? ? 'Create my account' : 'Update my account') : 'Update account', class: 'btn btn-primary' %>
13
+ <% end %>
@@ -0,0 +1,19 @@
1
+ <% provide(:title, 'Disable user') %>
2
+ <%= error_summary @disable %>
3
+ <div class="row">
4
+ <div class="col-md-4 col-md-offset-4">
5
+ <div class="panel panel-default">
6
+ <div class="panel-heading">
7
+ <h4 class="panel-title">Disable <%= @user.name %></h4>
8
+ </div>
9
+ <div class="panel-body">
10
+ <%= form_for @disable, url: disable_user_path(@user), method: :patch do |f| %>
11
+ <%= textarea_form_group f, :reason %>
12
+
13
+ <%= f.submit 'Disable', class: 'btn btn-danger' %>
14
+ <%= link_to 'Cancel', users_path, class: 'btn btn-default' %>
15
+ <% end %>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ </div>
@@ -0,0 +1,15 @@
1
+ <% provide(:title, 'Edit profile') %>
2
+ <h1>Update <%= current_user?(@user) ? 'your' : '' %> profile</h1>
3
+
4
+ <%= error_summary(@user) %>
5
+
6
+ <div class="row">
7
+ <div class="col-md-4 col-md-offset-4">
8
+ <%= render 'user_form' %>
9
+
10
+ <div class="gravatar_edit">
11
+ <%= gravatar_for @user %><br />
12
+ <a href="https://gravatar.com/emails" target="_blank" title="Change your image">change</a>
13
+ </div>
14
+ </div>
15
+ </div>
@@ -0,0 +1,9 @@
1
+ <% provide(:title, 'All users') %>
2
+ <h1>All users</h1>
3
+
4
+ <%= will_paginate %>
5
+ <ul class="users">
6
+ <%= render @users %>
7
+ </ul>
8
+ <%= will_paginate %>
9
+
@@ -0,0 +1,10 @@
1
+ <% provide(:title, 'Sign up') %>
2
+ <h1>Sign up</h1>
3
+
4
+ <%= error_summary(@user) %>
5
+
6
+ <div class="row">
7
+ <div class="col-md-4 col-md-offset-4">
8
+ <%= render 'user_form' %>
9
+ </div>
10
+ </div>
@@ -0,0 +1,46 @@
1
+ <% provide(:title, @user.name) %>
2
+
3
+ <div class="row">
4
+ <h1>
5
+ <%= gravatar_for @user %>
6
+ <%= @user.name %>
7
+ </h1>
8
+ </div>
9
+
10
+ <div class="row">
11
+ <div class="col-md-6 col-md-offset-2">
12
+ <%= render 'users/user_details', user: @user %>
13
+ </div>
14
+ <div class="col-md-4">
15
+ <div class="panel panel-default">
16
+ <div class="panel-heading">
17
+ <h4 class="panel-title">Login History</h4>
18
+ </div>
19
+ <% hist = @user.login_histories.order(created_at: :desc).limit(10).to_a %>
20
+ <table class="table table-condensed">
21
+ <thead>
22
+ <tr>
23
+ <th>Date/Time</th>
24
+ <th>IP Address</th>
25
+ <th>Success</th>
26
+ <th>Notes</th>
27
+ </tr>
28
+ </thead>
29
+ <tbody>
30
+ <% if hist && hist.count > 0 %>
31
+ <% hist.each do |rec| %>
32
+ <tr>
33
+ <td><%= rec.created_at.in_time_zone.strftime("%Y-%m-%d %H:%M:%S") %></td>
34
+ <td><%= rec.ip_address %></td>
35
+ <td><%= check_if rec.successful %></td>
36
+ <td><%= rec.message %></td>
37
+ </tr>
38
+ <% end %>
39
+ <% else %>
40
+ <tr><td colspan="4" style="text-align: center;">No History</td></tr>
41
+ <% end %>
42
+ </tbody>
43
+ </table>
44
+ </div>
45
+ </div>
46
+ </div>
data/bin/rails ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
3
+
4
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
5
+ ENGINE_PATH = File.expand_path('../../lib/barkest_core/engine', __FILE__)
6
+
7
+ # Set up gems listed in the Gemfile.
8
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
9
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
10
+
11
+ require 'rails/all'
12
+ require 'rails/engine/commands'
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ Rails.application.routes.draw do
2
+
3
+ end
@@ -0,0 +1,10 @@
1
+ class CreateAccessGroups < ActiveRecord::Migration
2
+ def change
3
+ create_table :access_groups do |t|
4
+ t.string :name, null: false, limit: 100
5
+
6
+ t.timestamps null: false
7
+ end
8
+ add_index :access_groups, :name, unique: true, name: :unique_access_groups
9
+ end
10
+ end
@@ -0,0 +1,26 @@
1
+ class CreateUsers < ActiveRecord::Migration
2
+ def change
3
+ create_table :users do |t|
4
+ t.string :name, null: false, limit: 100
5
+ t.string :email, null: false, limit: 255
6
+ t.boolean :ldap, default: false
7
+ t.boolean :activated, default: false
8
+ t.boolean :enabled, default: true
9
+ t.boolean :system_admin, default: false
10
+ t.string :activation_digest
11
+ t.string :password_digest
12
+ t.string :remember_digest
13
+ t.string :reset_digest
14
+ t.datetime :activated_at
15
+ t.datetime :reset_sent_at
16
+ t.integer :disabled_by_id
17
+ t.datetime :disabled_at
18
+ t.string :disabled_reason, limit: 200
19
+ t.datetime :last_login
20
+ t.string :last_ip, limit: 64
21
+
22
+ t.timestamps null: false
23
+ end
24
+ add_index :users, :email, unique: true, name: :unique_users
25
+ end
26
+ end
@@ -0,0 +1,12 @@
1
+ class CreateUserLoginHistories < ActiveRecord::Migration
2
+ def change
3
+ create_table :user_login_histories do |t|
4
+ t.integer :user_id, null: false, index: true
5
+ t.string :ip_address, null: false, limit: 64
6
+ t.boolean :successful
7
+ t.string :message, limit: 200
8
+
9
+ t.timestamps null: false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ class CreateAccessGroupUserMembers < ActiveRecord::Migration
2
+ def change
3
+ create_table :access_group_user_members do |t|
4
+ t.integer :group_id, null: false, index: true
5
+ t.integer :member_id, null: false, index: true
6
+ end
7
+ add_index :access_group_user_members, [:group_id, :member_id], unique: true, name: :unique_access_group_user_members
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class CreateAccessGroupGroupMembers < ActiveRecord::Migration
2
+ def change
3
+ create_table :access_group_group_members do |t|
4
+ t.integer :group_id, null: false, index: true
5
+ t.integer :member_id, null: false, index: true
6
+ end
7
+ add_index :access_group_group_members, [ :group_id, :member_id ], unique: true, name: :unique_access_group_group_members
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ class CreateLdapAccessGroups < ActiveRecord::Migration
2
+ def change
3
+ create_table :ldap_access_groups do |t|
4
+ t.integer :group_id, null: false
5
+ t.string :name, null: false, limit: 200
6
+
7
+ t.timestamps null: false
8
+ end
9
+ add_index :ldap_access_groups, [:group_id, :name], unique: true, name: :unique_ldap_access_groups
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ class CreateSystemConfigs < ActiveRecord::Migration
2
+ def change
3
+ create_table :system_configs do |t|
4
+ t.string :key, null: false, limit: 128
5
+ t.text :value
6
+
7
+ t.timestamps null: false
8
+ end
9
+ add_index :system_configs, :key, unique: true, name: :unique_system_configs
10
+ end
11
+ end
@@ -0,0 +1,42 @@
1
+ # Create the default admin if no other enabled admin exists.
2
+ User.ensure_admin_exists!
3
+
4
+ # For development purposes, we want to add a bunch of enabled users and a handful of disabled users.
5
+ if Rails.env.development?
6
+ admin_user = User.where(system_admin: true, enabled: true).first
7
+ unless User.where(enabled: true).count >= 100
8
+ print "Creating enabled test users...\n"
9
+ 100.times do |n|
10
+ name = Faker::Name.name
11
+ email = "user-#{n+1}@barkerest.com"
12
+ password = 'password'
13
+ User.create!(
14
+ name: name,
15
+ email: email,
16
+ password: password,
17
+ password_confirmation: password,
18
+ activated: (n % 5 < 3),
19
+ activated_at: (n % 5 < 3) ? Time.zone.now : nil
20
+ )
21
+ end
22
+ end
23
+ unless User.where(enabled: false).count >= 5
24
+ print "Creating disabled test users...\n"
25
+ 5.times do |n|
26
+ name = Faker::Name.name
27
+ email = "disabled-#{n+1}@barkerest.com"
28
+ password = 'password'
29
+ User.create!(
30
+ name: name,
31
+ email: email,
32
+ password: password,
33
+ password_confirmation: password,
34
+ enabled: false,
35
+ disabled_by_id: admin_user.id,
36
+ disabled_at: Time.zone.now - (n + 1).weeks,
37
+ disabled_reason: 'For testing'
38
+ )
39
+ end
40
+ end
41
+ end
42
+
data/db/seeds.rb ADDED
@@ -0,0 +1,53 @@
1
+ ##
2
+ # This class initializes the seeds for the database.
3
+ # To seed your database tables, create files in the db/seeds directory.
4
+ #
5
+ # Make sure the seeds can be reseeded safely.
6
+ # ie - After a migration we may want to add more seeded data, but previously seeded data should
7
+ # not be reprocessed.
8
+ #
9
+ # Seed files should be named as such #{library}_#{index}_#{desc} where #{index} is a number that
10
+ # can be sorted to ensure the order is processed correctly. For instance, you would want to use
11
+ # a 2-digit number ('00' => '99') if you have more than 10 seed files to process.
12
+ # "barkest_core_01_create_users" => { :library => 'barkest_core', :index => 1, :desc => 'create users' }
13
+ #
14
+ class Seeds
15
+ # :nodoc:
16
+ def self.process
17
+ list = []
18
+ BarkestCore.send(:db_seed_path_registry) { |path| list += Dir.glob(path) }
19
+ list.sort do |a,b|
20
+ a = File.basename(a)
21
+ b = File.basename(b)
22
+ a_core = (a.index('barkest_core') == 0)
23
+ b_core = (b.index('barkest_core') == 0)
24
+ if a_core && b_core
25
+ a <=> b
26
+ elsif a_core
27
+ -1
28
+ elsif b_core
29
+ 1
30
+ else
31
+ a <=> b
32
+ end
33
+ end.each do |seed_file|
34
+ file_name = File.basename(seed_file)[0...-3]
35
+ data = /^(?<library>[^\d_][^_]*(_[^\d_][^_]*)*)_(?<index>\d+)_(?<desc>.*)$/.match(file_name)
36
+ label_prefix = '== ' +
37
+ if data
38
+ data['library'].camelcase + ' (' + data['desc'].humanize + ')'
39
+ else
40
+ file_name.camelcase
41
+ end
42
+ label = label_prefix + ': seeding '
43
+ puts label + ('=' * (79 - label.length))
44
+ start_time = Time.now
45
+ require seed_file
46
+ elapsed_time = Time.now - start_time
47
+ label = label_prefix + sprintf(': seeded (%0.4fs) ', elapsed_time)
48
+ puts label + ('=' * (79 - label.length))
49
+ end
50
+ end
51
+ end
52
+
53
+ Seeds.process