rockstart 0.1.0 → 0.1.1
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 +4 -4
- data/README.md +6 -0
- data/lib/generators/rockstart/authorization/USAGE +9 -0
- data/lib/generators/rockstart/authorization/auth0/USAGE +10 -0
- data/lib/generators/rockstart/authorization/auth0/auth0_generator.rb +49 -0
- data/lib/generators/rockstart/authorization/auth0/templates/app/controllers/auth_controller.rb.tt +47 -0
- data/lib/generators/rockstart/authorization/auth0/templates/app/controllers/concerns/session_auth.rb +23 -0
- data/lib/generators/rockstart/authorization/auth0/templates/app/models/user.rb.tt +82 -0
- data/lib/generators/rockstart/authorization/auth0/templates/app/views/auth/new.html.erb +3 -0
- data/lib/generators/rockstart/authorization/auth0/templates/app/views/auth/sign_out.html.erb +1 -0
- data/lib/generators/rockstart/authorization/auth0/templates/auth0.en.yml +5 -0
- data/lib/generators/rockstart/authorization/auth0/templates/auth0_initializer.rb +27 -0
- data/lib/generators/rockstart/authorization/auth0/templates/auth0_util.rb.tt +38 -0
- data/lib/generators/rockstart/authorization/auth0/templates/auth0_util_spec.rb +21 -0
- data/lib/generators/rockstart/authorization/auth0/templates/spec/factories/users.rb.tt +32 -0
- data/lib/generators/rockstart/authorization/auth0/templates/spec/models/user_spec.rb.tt +91 -0
- data/lib/generators/rockstart/authorization/auth0/templates/spec/requests/auth_spec.rb +94 -0
- data/lib/generators/rockstart/authorization/auth0/templates/spec/support/auth_request_helper.rb +27 -0
- data/lib/generators/rockstart/authorization/authorization_generator.rb +29 -0
- data/lib/generators/rockstart/{devise → authorization/devise}/USAGE +3 -1
- data/lib/generators/rockstart/authorization/devise/devise_generator.rb +208 -0
- data/lib/generators/rockstart/authorization/devise/templates/add_devise_to_users_migration.rb.tt +50 -0
- data/lib/generators/rockstart/{devise → authorization/devise}/templates/controllers/passwords_controller.rb +0 -0
- data/lib/generators/rockstart/{devise → authorization/devise}/templates/controllers/registrations_controller.rb +0 -0
- data/lib/generators/rockstart/{devise → authorization/devise}/templates/controllers/sessions_controller.rb +0 -0
- data/lib/generators/rockstart/{devise → authorization/devise}/templates/create_user_migration.rb.tt +0 -0
- data/lib/generators/rockstart/{devise → authorization/devise}/templates/models/user.rb +14 -2
- data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/factories/users.rb +0 -0
- data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/models/user_spec.rb +9 -21
- data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/requests/users/passwords_spec.rb +0 -0
- data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/requests/users/registrations_spec.rb +2 -11
- data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/requests/users/sessions_spec.rb +1 -38
- data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/support/devise_request_spec_helper.rb +0 -0
- data/lib/generators/rockstart/{devise → authorization/devise}/templates/translations.en.yml +0 -0
- data/lib/generators/rockstart/{pundit → authorization/pundit}/USAGE +1 -1
- data/lib/generators/rockstart/authorization/pundit/pundit_generator.rb +41 -0
- data/lib/generators/rockstart/{pundit → authorization/pundit}/templates/app/controllers/concerns/pundit_error_handling.rb +0 -0
- data/lib/generators/rockstart/{pundit → authorization/pundit}/templates/app/policies/application_policy.rb +0 -0
- data/lib/generators/rockstart/{pundit/templates/app/policies/user_policy.rb → authorization/pundit/templates/app/policies/user_policy.rb.tt} +4 -0
- data/lib/generators/rockstart/{pundit → authorization/pundit}/templates/config/locales/pundit.en.yml +0 -0
- data/lib/generators/rockstart/authorization/pundit/templates/lib/admin_constraint.rb +11 -0
- data/lib/generators/rockstart/{pundit/templates/lib/templates/pundit/policy/policy.rb → authorization/pundit/templates/scaffold/policy.rb.tt} +0 -0
- data/lib/generators/rockstart/{pundit/templates/lib/templates/rspec/policy/policy_spec.rb → authorization/pundit/templates/scaffold/policy_spec.rb.tt} +0 -0
- data/lib/generators/rockstart/{pundit/templates/spec/policies/user_policy_spec.rb → authorization/pundit/templates/spec/policies/user_policy_spec.rb.tt} +43 -5
- data/lib/generators/rockstart/{pundit → authorization/pundit}/templates/spec/support/pundit_matchers.rb +0 -0
- data/lib/generators/rockstart/deployment/USAGE +8 -0
- data/lib/generators/rockstart/deployment/deployment_generator.rb +78 -0
- data/lib/generators/rockstart/{docker → deployment/docker}/USAGE +0 -0
- data/lib/generators/rockstart/deployment/docker/docker_generator.rb +70 -0
- data/lib/generators/rockstart/{docker → deployment/docker}/templates/app/Dockerfile-app +6 -5
- data/lib/generators/rockstart/{docker → deployment/docker}/templates/docker-compose.test.yml +5 -2
- data/lib/generators/rockstart/deployment/docker/templates/docker-compose.yml +74 -0
- data/lib/generators/rockstart/{docker → deployment/docker}/templates/dockerignore +0 -0
- data/lib/generators/rockstart/deployment/docker/templates/dotenv.docker-db.tt +3 -0
- data/lib/generators/rockstart/deployment/docker/templates/dotenv.docker.tt +20 -0
- data/lib/generators/rockstart/{docker → deployment/docker}/templates/web/Dockerfile-web +0 -0
- data/lib/generators/rockstart/{docker → deployment/docker}/templates/web/nginx.conf +24 -1
- data/lib/generators/rockstart/deployment/heroku/USAGE +9 -0
- data/lib/generators/rockstart/deployment/heroku/heroku_generator.rb +50 -0
- data/lib/generators/rockstart/deployment/heroku/templates/Procfile.tt +5 -0
- data/lib/generators/rockstart/deployment/heroku/templates/app.json.tt +50 -0
- data/lib/generators/rockstart/deployment/heroku/templates/deploy-heroku.tt +42 -0
- data/lib/generators/rockstart/deployment/heroku/templates/heroku.rake.tt +25 -0
- data/lib/generators/rockstart/deployment/heroku/templates/slugignore +3 -0
- data/lib/generators/rockstart/deployment/nginx/USAGE +8 -0
- data/lib/generators/rockstart/deployment/nginx/nginx_generator.rb +20 -0
- data/lib/generators/rockstart/deployment/templates/hooks-postdeploy.tt +22 -0
- data/lib/generators/rockstart/deployment/templates/hooks-release.tt +17 -0
- data/lib/generators/rockstart/deployment/templates/rack_deflater_spec.rb +28 -0
- data/lib/generators/rockstart/deployment/templates/web.tt +3 -0
- data/lib/generators/rockstart/deployment/templates/worker.tt +3 -0
- data/lib/generators/rockstart/development/USAGE +10 -0
- data/lib/generators/rockstart/development/audited/USAGE +10 -0
- data/lib/generators/rockstart/development/audited/audited_generator.rb +35 -0
- data/lib/generators/rockstart/development/audited/templates/audit.rb.tt +35 -0
- data/lib/generators/rockstart/development/audited/templates/audit_spec.rb.tt +54 -0
- data/lib/generators/rockstart/development/audited/templates/audited_initializer.rb +5 -0
- data/lib/generators/rockstart/development/audited/templates/audited_support.rb +3 -0
- data/lib/generators/rockstart/development/audited/templates/install_audited.rb.tt +45 -0
- data/lib/generators/rockstart/development/development_generator.rb +42 -0
- data/lib/generators/rockstart/development/env/USAGE +8 -0
- data/lib/generators/rockstart/development/env/env_generator.rb +17 -0
- data/lib/generators/rockstart/development/env/templates/dotenv.development.tt +4 -0
- data/lib/generators/rockstart/development/friendly_id/USAGE +8 -0
- data/lib/generators/rockstart/development/friendly_id/friendly_id_generator.rb +15 -0
- data/lib/generators/rockstart/development/friendly_id/templates/friendly_id_initializer.rb +52 -0
- data/lib/generators/rockstart/development/generator_overrides/USAGE +8 -0
- data/lib/generators/rockstart/development/generator_overrides/generator_overrides_generator.rb +31 -0
- data/lib/generators/rockstart/development/generator_overrides/templates/resource_route_generator.rb.tt +54 -0
- data/lib/generators/rockstart/development/localhost_setup/USAGE +8 -0
- data/lib/generators/rockstart/development/localhost_setup/localhost_setup_generator.rb +34 -0
- data/lib/generators/rockstart/{docker → development/localhost_setup}/templates/localhost_domains.ext.tt +0 -0
- data/lib/generators/rockstart/{docker → development/localhost_setup}/templates/setup-localhost.tt +5 -5
- data/lib/generators/rockstart/development/readme/USAGE +8 -0
- data/lib/generators/rockstart/development/readme/readme_generator.rb +18 -0
- data/lib/generators/rockstart/development/readme/templates/README.md +74 -0
- data/lib/generators/rockstart/development/rebuild/USAGE +8 -0
- data/lib/generators/rockstart/development/rebuild/rebuild_generator.rb +21 -0
- data/lib/generators/rockstart/development/rebuild/templates/rockstart.tt +28 -0
- data/lib/generators/rockstart/{scaffold_templates → development/scaffolds}/USAGE +1 -1
- data/lib/generators/rockstart/development/scaffolds/scaffolds_generator.rb +46 -0
- data/lib/generators/rockstart/{scaffold_templates → development/scaffolds}/templates/api_controller.rb.tt +15 -7
- data/lib/generators/rockstart/{scaffold_templates → development/scaffolds}/templates/controller.rb.tt +18 -9
- data/lib/generators/rockstart/development/scaffolds/templates/factory_bot/factories.erb +8 -0
- data/lib/generators/rockstart/development/scaffolds/templates/model.rb.tt +61 -0
- data/lib/generators/rockstart/development/scaffolds/templates/rspec/api_request_spec.rb.tt +142 -0
- data/lib/generators/rockstart/development/scaffolds/templates/rspec/model_spec.rb.tt +35 -0
- data/lib/generators/rockstart/development/scaffolds/templates/rspec/request_spec.rb.tt +492 -0
- data/lib/generators/rockstart/frontend_app/USAGE +10 -0
- data/lib/generators/rockstart/frontend_app/application_urls/USAGE +8 -0
- data/lib/generators/rockstart/frontend_app/application_urls/application_urls_generator.rb +28 -0
- data/lib/generators/rockstart/{frontend_helpers → frontend_app/application_urls}/templates/application_urls.rb +0 -0
- data/lib/generators/rockstart/{frontend_helpers → frontend_app/application_urls}/templates/application_urls_helper.rb +0 -0
- data/lib/generators/rockstart/frontend_app/assets/USAGE +8 -0
- data/lib/generators/rockstart/frontend_app/assets/assets_generator.rb +11 -0
- data/lib/generators/rockstart/frontend_app/assets/templates/assets.rake +22 -0
- data/lib/generators/rockstart/frontend_app/frontend_app_generator.rb +38 -0
- data/lib/generators/rockstart/frontend_app/simple_form/USAGE +8 -0
- data/lib/generators/rockstart/frontend_app/simple_form/simple_form_generator.rb +9 -0
- data/lib/generators/rockstart/frontend_app/titles/USAGE +8 -0
- data/lib/generators/rockstart/{frontend_helpers → frontend_app/titles}/templates/titles.en.yml.tt +0 -0
- data/lib/generators/rockstart/frontend_app/titles/titles_generator.rb +22 -0
- data/lib/generators/rockstart/gemset/USAGE +8 -0
- data/lib/generators/rockstart/gemset/gemset_generator.rb +129 -0
- data/lib/generators/rockstart/mailers/USAGE +8 -0
- data/lib/generators/rockstart/mailers/mailers_generator.rb +7 -0
- data/lib/generators/rockstart/{smtp_mailer → mailers/smtp_mailer}/USAGE +0 -0
- data/lib/generators/rockstart/mailers/smtp_mailer/smtp_mailer_generator.rb +36 -0
- data/lib/generators/rockstart/{smtp_mailer/templates/config/initializers/action_mailer.rb → mailers/smtp_mailer/templates/action_mailer_initializer.rb} +0 -0
- data/lib/generators/rockstart/monitoring/USAGE +8 -0
- data/lib/generators/rockstart/{logging → monitoring/lograge}/USAGE +1 -1
- data/lib/generators/rockstart/monitoring/lograge/lograge_generator.rb +19 -0
- data/lib/generators/rockstart/monitoring/lograge/templates/lograge_initializer.rb +44 -0
- data/lib/generators/rockstart/monitoring/lograge/templates/lograge_util.rb +42 -0
- data/lib/generators/rockstart/monitoring/monitoring_generator.rb +35 -0
- data/lib/generators/rockstart/monitoring/okcomputer/USAGE +8 -0
- data/lib/generators/rockstart/monitoring/okcomputer/okcomputer_generator.rb +28 -0
- data/lib/generators/rockstart/monitoring/okcomputer/templates/okcomputer.en.yml +5 -0
- data/lib/generators/rockstart/monitoring/okcomputer/templates/okcomputer_initializer.rb.tt +34 -0
- data/lib/generators/rockstart/monitoring/okcomputer/templates/okcomputer_spec.rb +62 -0
- data/lib/generators/rockstart/monitoring/rollbar/USAGE +8 -0
- data/lib/generators/rockstart/monitoring/rollbar/rollbar_generator.rb +20 -0
- data/lib/generators/rockstart/monitoring/rollbar/templates/rollbar_initializer.rb.tt +80 -0
- data/lib/generators/rockstart/monitoring/sidekiq_ui/USAGE +8 -0
- data/lib/generators/rockstart/monitoring/sidekiq_ui/sidekiq_ui_generator.rb +38 -0
- data/lib/generators/rockstart/monitoring/sidekiq_ui/templates/sidekiq_spec.rb +32 -0
- data/lib/generators/rockstart/quality/quality_generator.rb +5 -16
- data/lib/generators/rockstart/quality/rubocop/USAGE +11 -0
- data/lib/generators/rockstart/quality/rubocop/rubocop_generator.rb +23 -0
- data/lib/generators/rockstart/quality/rubocop/templates/rubocop.rake +19 -0
- data/lib/generators/rockstart/quality/{templates → rubocop/templates}/rubocop.yml +0 -0
- data/lib/generators/rockstart/rockstart_generator.rb +13 -65
- data/lib/generators/rockstart/run/USAGE +17 -0
- data/lib/generators/rockstart/run/run_generator.rb +73 -0
- data/lib/generators/rockstart/security/brakeman/USAGE +9 -0
- data/lib/generators/rockstart/security/brakeman/brakeman_generator.rb +15 -0
- data/lib/generators/rockstart/security/{templates → brakeman/templates}/brakeman.rake +1 -1
- data/lib/generators/rockstart/security/bundler_audit/USAGE +8 -0
- data/lib/generators/rockstart/security/bundler_audit/bundler_audit_generator.rb +11 -0
- data/lib/generators/rockstart/security/bundler_audit/templates/bundler_audit.rake +14 -0
- data/lib/generators/rockstart/security/content_security/USAGE +8 -0
- data/lib/generators/rockstart/security/content_security/content_security_generator.rb +41 -0
- data/lib/generators/rockstart/security/{templates → content_security/templates}/content_security_policy_initializer.rb.tt +2 -2
- data/lib/generators/rockstart/security/{templates → content_security/templates}/content_security_spec.rb.tt +12 -13
- data/lib/generators/rockstart/security/{templates/csp_violations_controller.rb → content_security/templates/csp_violations_controller.rb.tt} +14 -6
- data/lib/generators/rockstart/security/{templates → content_security/templates}/session_store_initializer.rb.tt +1 -2
- data/lib/generators/rockstart/security/rack_attack/USAGE +8 -0
- data/lib/generators/rockstart/security/rack_attack/rack_attack_generator.rb +37 -0
- data/lib/generators/rockstart/security/{templates → rack_attack/templates}/cache_support.rb +1 -1
- data/lib/generators/rockstart/security/{templates/rack_attack.rb → rack_attack/templates/rack_attack_initializer.rb.tt} +34 -1
- data/lib/generators/rockstart/security/rack_attack/templates/rack_attack_spec.rb.tt +116 -0
- data/lib/generators/rockstart/security/security_generator.rb +20 -84
- data/lib/generators/rockstart/storage/USAGE +8 -0
- data/lib/generators/rockstart/storage/active_storage/USAGE +8 -0
- data/lib/generators/rockstart/storage/active_storage/active_storage_generator.rb +59 -0
- data/lib/generators/rockstart/storage/active_storage/templates/active_storage_initializer.rb +9 -0
- data/lib/generators/rockstart/storage/active_storage/templates/better_s3_service.rb +27 -0
- data/lib/generators/rockstart/storage/active_storage/templates/cloudcube_util.rb +30 -0
- data/lib/generators/rockstart/storage/active_storage/templates/cloudcube_util_spec.rb +73 -0
- data/lib/generators/rockstart/storage/active_storage/templates/storage.yml.tt +15 -0
- data/lib/generators/rockstart/storage/memcached/USAGE +8 -0
- data/lib/generators/rockstart/storage/memcached/memcached_generator.rb +27 -0
- data/lib/generators/rockstart/{postgres → storage/postgres}/USAGE +1 -1
- data/lib/generators/rockstart/storage/postgres/postgres_generator.rb +20 -0
- data/lib/generators/rockstart/{postgres → storage/postgres}/templates/config/database.yml.tt +6 -0
- data/lib/generators/rockstart/{postgres → storage/postgres}/templates/migration.rb.tt +0 -0
- data/lib/generators/rockstart/storage/storage_generator.rb +26 -0
- data/lib/generators/rockstart/testing/USAGE +9 -0
- data/lib/generators/rockstart/testing/env/USAGE +8 -0
- data/lib/generators/rockstart/testing/env/env_generator.rb +24 -0
- data/lib/generators/rockstart/testing/env/templates/climate_control_helpers_support.rb +14 -0
- data/lib/generators/rockstart/testing/env/templates/dotenv.test.tt +8 -0
- data/lib/generators/rockstart/{rspec → testing/rspec}/USAGE +1 -1
- data/lib/generators/rockstart/testing/rspec/rspec_generator.rb +52 -0
- data/lib/generators/rockstart/{rspec → testing/rspec}/templates/support/factory_bot.rb +0 -0
- data/lib/generators/rockstart/{rspec → testing/rspec}/templates/support/shoulda_matchers.rb +0 -0
- data/lib/generators/rockstart/{rspec → testing/rspec}/templates/support/test_helpers.rb +0 -0
- data/lib/generators/rockstart/testing/rspec/templates/support/vcr.rb +11 -0
- data/lib/generators/rockstart/testing/simplecov/USAGE +9 -0
- data/lib/generators/rockstart/testing/simplecov/simplecov_generator.rb +11 -0
- data/lib/generators/rockstart/testing/testing_generator.rb +24 -0
- data/lib/generators/rockstart/workers/USAGE +8 -0
- data/lib/generators/rockstart/workers/sidekiq/USAGE +9 -0
- data/lib/generators/rockstart/workers/sidekiq/sidekiq_generator.rb +29 -0
- data/lib/generators/rockstart/workers/sidekiq/templates/sidekiq.yml.tt +5 -0
- data/lib/generators/rockstart/workers/sidekiq/templates/sidekiq_initializer.rb +5 -0
- data/lib/generators/rockstart/workers/workers_generator.rb +18 -0
- data/lib/rockstart/base_generator.rb +4 -5
- data/lib/rockstart/env.rb +3 -1
- data/lib/rockstart/generators/class_option_helpers.rb +154 -0
- data/lib/rockstart/generators/content_security_options.rb +61 -0
- data/lib/rockstart/generators/migration_helpers.rb +30 -0
- data/lib/rockstart/generators/system_helpers.rb +14 -0
- data/lib/rockstart/generators/template_helpers.rb +27 -0
- data/lib/rockstart/version.rb +1 -1
- metadata +212 -83
- data/lib/generators/rockstart/devise/devise_generator.rb +0 -258
- data/lib/generators/rockstart/docker/docker_generator.rb +0 -86
- data/lib/generators/rockstart/docker/templates/docker-compose.yml +0 -47
- data/lib/generators/rockstart/docker/templates/dotenv.docker.tt +0 -4
- data/lib/generators/rockstart/frontend_helpers/USAGE +0 -8
- data/lib/generators/rockstart/frontend_helpers/frontend_helpers_generator.rb +0 -65
- data/lib/generators/rockstart/logging/logging_generator.rb +0 -12
- data/lib/generators/rockstart/logging/templates/rockstart/lograge_initializer.rb +0 -50
- data/lib/generators/rockstart/postgres/postgres_generator.rb +0 -32
- data/lib/generators/rockstart/pundit/pundit_generator.rb +0 -32
- data/lib/generators/rockstart/quality/templates/rubocop.rake +0 -4
- data/lib/generators/rockstart/rspec/rspec_generator.rb +0 -70
- data/lib/generators/rockstart/rspec/templates/dotenv.development +0 -1
- data/lib/generators/rockstart/rspec/templates/dotenv.test +0 -1
- data/lib/generators/rockstart/rspec/templates/rspec_templates/model/model_spec.rb +0 -13
- data/lib/generators/rockstart/scaffold_templates/scaffold_templates_generator.rb +0 -39
- data/lib/generators/rockstart/scaffold_templates/templates/rspec/scaffold/api_request_spec.rb +0 -139
- data/lib/generators/rockstart/scaffold_templates/templates/rspec/scaffold/request_spec.rb +0 -408
- data/lib/generators/rockstart/security/templates/bundler_audit.rake +0 -4
- data/lib/generators/rockstart/smtp_mailer/smtp_mailer_generator.rb +0 -30
- data/lib/generators/rockstart/tailwindcss/USAGE +0 -8
- data/lib/generators/rockstart/tailwindcss/tailwindcss_generator.rb +0 -30
- data/lib/generators/rockstart/tailwindcss/templates/application.css +0 -3
- data/lib/generators/rockstart/tailwindcss/templates/postcss.config.js +0 -32
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_helper"
|
|
4
|
+
|
|
5
|
+
RSpec.describe "Auth", type: :request do
|
|
6
|
+
describe "GET /auth/sign_in" do
|
|
7
|
+
context "as a guest" do
|
|
8
|
+
it "renders a login form" do
|
|
9
|
+
get "/auth/sign_in"
|
|
10
|
+
expect(response).to have_http_status(:success)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "as an authenticated user" do
|
|
15
|
+
let(:authenticated_user) { create(:user) }
|
|
16
|
+
|
|
17
|
+
before do
|
|
18
|
+
sign_in(authenticated_user)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "redirects to the dashboard" do
|
|
22
|
+
get "/auth/sign_in"
|
|
23
|
+
expect(response).to redirect_to url_for_user_dashboard
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "GET /auth/sign_out" do
|
|
29
|
+
it "renders a thanks for visiting page" do
|
|
30
|
+
get "/auth/sign_out"
|
|
31
|
+
expect(response).to have_http_status(:success)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context "as an authenticated user" do
|
|
35
|
+
let(:authenticated_user) { create(:user) }
|
|
36
|
+
|
|
37
|
+
before do
|
|
38
|
+
sign_in(authenticated_user)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "redirects to the dashboard" do
|
|
42
|
+
get "/auth/sign_out"
|
|
43
|
+
expect(response).to redirect_to url_for_user_dashboard
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe "POST /auth/auth0" do
|
|
49
|
+
context "with a generic error" do
|
|
50
|
+
before do
|
|
51
|
+
OmniAuth.config.mock_auth[:auth0] = :something_went_wrong
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "redirects to the sign in page with an error message" do
|
|
55
|
+
post "/auth/auth0"
|
|
56
|
+
expect(response).to redirect_to("/callback")
|
|
57
|
+
|
|
58
|
+
follow_redirect!
|
|
59
|
+
expect(response).to redirect_to "/auth/failure?message=something_went_wrong&strategy=auth0"
|
|
60
|
+
|
|
61
|
+
follow_redirect!
|
|
62
|
+
expect(response).to redirect_to(auth_sign_in_url)
|
|
63
|
+
|
|
64
|
+
follow_redirect!
|
|
65
|
+
expect(response.body).to have_content(t("auth0.omniauth_error.generic"))
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
describe "DELETE /auth/sign_out" do
|
|
71
|
+
context "as an authenticated user" do
|
|
72
|
+
let(:authenticated_user) { create(:user) }
|
|
73
|
+
|
|
74
|
+
before do
|
|
75
|
+
sign_in(authenticated_user)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "redirects back to the auth0 logout page with a redirect to the sign out page" do
|
|
79
|
+
delete "/auth/sign_out"
|
|
80
|
+
|
|
81
|
+
url_for_sign_out = CGI.escape(auth_sign_out_url)
|
|
82
|
+
expect(response).to redirect_to(
|
|
83
|
+
"https://auth0-domain/v2/logout?returnTo=#{url_for_sign_out}&client_id=auth0-client-id"
|
|
84
|
+
)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "signs out the user" do
|
|
88
|
+
delete "/auth/sign_out"
|
|
89
|
+
expect(controller).not_to be_user_signed_in
|
|
90
|
+
expect(controller.current_user).not_to be_persisted
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
data/lib/generators/rockstart/authorization/auth0/templates/spec/support/auth_request_helper.rb
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Helpers for Auth0 with request specs
|
|
4
|
+
module AuthRequestHelper
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.before(:all) do
|
|
7
|
+
OmniAuth.config.test_mode = true
|
|
8
|
+
end
|
|
9
|
+
base.after(:each) do
|
|
10
|
+
OmniAuth.config.mock_auth[:auth0] = nil
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def sign_in(resource)
|
|
15
|
+
OmniAuth.config.mock_auth[:auth0] = OmniAuth::AuthHash.new(resource.to_h)
|
|
16
|
+
post "/auth/auth0"
|
|
17
|
+
follow_redirect! # call the callback endpoint
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def sign_out(_resource)
|
|
21
|
+
delete auth_sign_out_path
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
RSpec.configure do |config|
|
|
26
|
+
config.include AuthRequestHelper, type: :request
|
|
27
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rockstart/generators/class_option_helpers"
|
|
4
|
+
|
|
5
|
+
class Rockstart::AuthorizationGenerator < Rails::Generators::Base
|
|
6
|
+
include Rockstart::Generators::ClassOptionHelpers
|
|
7
|
+
|
|
8
|
+
auth0_class_option
|
|
9
|
+
devise_class_option
|
|
10
|
+
pundit_class_option
|
|
11
|
+
|
|
12
|
+
def generate_auth0
|
|
13
|
+
return unless auth0?
|
|
14
|
+
|
|
15
|
+
generate "rockstart:authorization:auth0"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def generate_devise
|
|
19
|
+
return unless devise?
|
|
20
|
+
|
|
21
|
+
generate "rockstart:authorization:devise", pundit_option
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def generate_pundit
|
|
25
|
+
return unless pundit?
|
|
26
|
+
|
|
27
|
+
generate "rockstart:authorization:pundit", auth0_option
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -2,8 +2,10 @@ Description:
|
|
|
2
2
|
Installs Device for User Authentication
|
|
3
3
|
|
|
4
4
|
Example:
|
|
5
|
-
rails generate rockstart:devise
|
|
5
|
+
rails generate rockstart:authorization:devise
|
|
6
6
|
|
|
7
7
|
This will create:
|
|
8
8
|
A basic devise Install
|
|
9
9
|
A User model with a UUID primary key
|
|
10
|
+
Custom Controllers for managing a Session/Profile
|
|
11
|
+
Test Coverage of the Devise installation
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rockstart/base_generator"
|
|
4
|
+
require "rockstart/generators/migration_helpers"
|
|
5
|
+
|
|
6
|
+
module Rockstart::Authorization
|
|
7
|
+
class DeviseGenerator < Rockstart::BaseGenerator
|
|
8
|
+
include Rockstart::Generators::MigrationHelpers
|
|
9
|
+
|
|
10
|
+
source_root File.expand_path("templates", __dir__)
|
|
11
|
+
|
|
12
|
+
class_option :devise_layout, type: :string,
|
|
13
|
+
desc: "Custom layout used by all devise controllers",
|
|
14
|
+
default: "application"
|
|
15
|
+
|
|
16
|
+
pundit_class_option
|
|
17
|
+
|
|
18
|
+
def add_user_model
|
|
19
|
+
directory "models", "app/models"
|
|
20
|
+
migration_template "create_user_migration.rb.tt", "db/migrate/create_users.rb"
|
|
21
|
+
migration_template "add_devise_to_users_migration.rb.tt", "db/migrate/add_devise_to_users.rb"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def install_devise
|
|
25
|
+
Dir.mktmpdir do |dir|
|
|
26
|
+
generate_devise_install(dir)
|
|
27
|
+
directory File.join(dir, "config"), "config"
|
|
28
|
+
end
|
|
29
|
+
rescue LoadError
|
|
30
|
+
abort("Please install devise gem!!!") if behavior == :invoke
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def add_devise_controllers
|
|
34
|
+
Dir.mktmpdir do |dir|
|
|
35
|
+
generate_devise_controllers(dir)
|
|
36
|
+
add_pundit_support(dir) if pundit?
|
|
37
|
+
devise_controllers.each do |controller|
|
|
38
|
+
copy_file File.join(dir, controller_path(controller)), controller_path(controller)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
rescue LoadError
|
|
42
|
+
abort("Please install devise gem!!!") if behavior == :invoke
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def generate_routes
|
|
46
|
+
route <<~USER_ROUTE
|
|
47
|
+
devise_for :users, controllers: {
|
|
48
|
+
sessions: "users/sessions",
|
|
49
|
+
passwords: "users/passwords",
|
|
50
|
+
registrations: "users/registrations"
|
|
51
|
+
}
|
|
52
|
+
USER_ROUTE
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def add_rspec_coverage
|
|
56
|
+
directory "spec"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def update_application_url_concerns
|
|
60
|
+
change_application_url("url_for_authentication", "new_user_session_path")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
def generate_devise_install(dir)
|
|
66
|
+
initializer = build_devise_install_generator(dir)
|
|
67
|
+
initializer.invoke_all
|
|
68
|
+
|
|
69
|
+
update_initializer(dir)
|
|
70
|
+
make_devise_paranoid(dir)
|
|
71
|
+
send_email_on_email_change(dir)
|
|
72
|
+
send_email_on_password_change(dir)
|
|
73
|
+
add_translations(dir)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def build_devise_install_generator(dir)
|
|
77
|
+
require "generators/devise/install_generator"
|
|
78
|
+
|
|
79
|
+
initializer = ::Devise::Generators::InstallGenerator.new(
|
|
80
|
+
report_stream: StringIO.new
|
|
81
|
+
)
|
|
82
|
+
initializer.destination_root = dir
|
|
83
|
+
initializer
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def update_initializer(dir)
|
|
87
|
+
gsub_file devise_initializer(dir),
|
|
88
|
+
/config\.mailer_sender = ['"][^'"]+['']/,
|
|
89
|
+
'config.mailer_sender = ENV.fetch("DEVISE_MAILER_SENDER",' \
|
|
90
|
+
" Rails.application.credentials.devise_mailer_sender)"
|
|
91
|
+
gsub_file devise_initializer(dir),
|
|
92
|
+
/config\.secret_key = ['"][^'"]+['']/,
|
|
93
|
+
'config.secret_key = ENV.fetch("DEVISE_SECRET_KEY")'
|
|
94
|
+
gsub_file devise_initializer(dir),
|
|
95
|
+
/config\.pepper = ['"][^'"]+['']/,
|
|
96
|
+
'config.pepper = ENV.fetch("DEVISE_PEPPER")'
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def make_devise_paranoid(dir)
|
|
100
|
+
gsub_file devise_initializer(dir),
|
|
101
|
+
/config\.paranoid = (true|false)/,
|
|
102
|
+
"config.paranoid = true"
|
|
103
|
+
uncomment_lines devise_initializer(dir), /config\.paranoid = true/
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def send_email_on_email_change(dir)
|
|
107
|
+
gsub_file devise_initializer(dir),
|
|
108
|
+
/config\.send_email_changed_notification = (true|false)/,
|
|
109
|
+
"config.send_email_changed_notification = true"
|
|
110
|
+
uncomment_lines devise_initializer(dir), /config\.send_email_changed_notification = true/
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def send_email_on_password_change(dir)
|
|
114
|
+
gsub_file devise_initializer(dir),
|
|
115
|
+
/config\.send_password_change_notification = (true|false)/,
|
|
116
|
+
"config.send_password_change_notification = true"
|
|
117
|
+
uncomment_lines devise_initializer(dir), /config\.send_password_change_notification = true/
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def add_translations(dir)
|
|
121
|
+
inject_into_file File.join(dir, "config/locales/devise.en.yml"), after: /failure:$/ do
|
|
122
|
+
"\n deleted_account: " \
|
|
123
|
+
"\"You've deleted your account. Please contact support if you want to recover it!\""
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def devise_initializer(dir)
|
|
128
|
+
File.join(dir, "config", "initializers", "devise.rb")
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def generate_devise_controllers(dir)
|
|
132
|
+
require "generators/devise/controllers_generator"
|
|
133
|
+
|
|
134
|
+
initializer = build_devise_controllers_generator(dir)
|
|
135
|
+
initializer.scope = "users"
|
|
136
|
+
initializer.invoke_all
|
|
137
|
+
|
|
138
|
+
devise_controllers.each do |controller|
|
|
139
|
+
add_layout_to_controller(dir, controller)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def build_devise_controllers_generator(dir)
|
|
144
|
+
initializer = ::Devise::Generators::ControllersGenerator.new(
|
|
145
|
+
report_stream: StringIO.new
|
|
146
|
+
)
|
|
147
|
+
initializer.destination_root = dir
|
|
148
|
+
initializer.source_paths.insert(1, File.join(self.class.source_root, "controllers"))
|
|
149
|
+
initializer
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def add_layout_to_controller(dir, controller)
|
|
153
|
+
inject_into_file File.join(dir, controller_path(controller)), after: /< Devise::.*$/ do
|
|
154
|
+
"\n layout \"#{options[:devise_layout]}\"\n"
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Replace Generic resource routes with users
|
|
158
|
+
gsub_file File.join(dir, controller_path(controller)), "/resource", "/users"
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def add_pundit_support(dir)
|
|
162
|
+
use_pundit_for_update_user_details(dir)
|
|
163
|
+
add_pudit_authorize_current_user_method(dir)
|
|
164
|
+
add_pudit_authorize_current_user_callback(dir)
|
|
165
|
+
add_pudit_error_handling_concern(dir)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# rubocop:disable Layout/LineLength
|
|
169
|
+
def use_pundit_for_update_user_details(dir)
|
|
170
|
+
gsub_file File.join(dir, controller_path("registrations")),
|
|
171
|
+
/\.permit\(:account_update.*\)/,
|
|
172
|
+
".permit(:account_update, keys: policy(current_user).permitted_attributes_for_update)"
|
|
173
|
+
end
|
|
174
|
+
# rubocop:enable Layout/LineLength
|
|
175
|
+
|
|
176
|
+
def add_pudit_authorize_current_user_method(dir)
|
|
177
|
+
inject_into_file File.join(dir, controller_path("registrations")), after: "protected\n" do
|
|
178
|
+
"\n" + <<~'METHOD'.gsub(/([^\n]*)\n/, " \\1\n")
|
|
179
|
+
# Ensure the logged in user is able to update or destroy their account
|
|
180
|
+
def authorize_current_user
|
|
181
|
+
authorize current_user
|
|
182
|
+
end
|
|
183
|
+
METHOD
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def add_pudit_authorize_current_user_callback(dir)
|
|
188
|
+
inject_into_file File.join(dir, controller_path("registrations")),
|
|
189
|
+
after: /before_action :configure_account_update_params.*$/ do
|
|
190
|
+
"\n before_action :authorize_current_user, only: %i[edit update destroy]"
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def add_pudit_error_handling_concern(dir)
|
|
195
|
+
inject_into_file File.join(dir, controller_path("registrations")), after: /< Devise::.*$/ do
|
|
196
|
+
"\n include PunditErrorHandling\n"
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def controller_path(controller)
|
|
201
|
+
File.join("app", "controllers", "users", "#{controller}_controller.rb")
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def devise_controllers
|
|
205
|
+
%w[sessions passwords registrations]
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|
data/lib/generators/rockstart/authorization/devise/templates/add_devise_to_users_migration.rb.tt
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class AddDeviseToUsers < ActiveRecord::Migration<%= migration_version %>
|
|
4
|
+
def self.up
|
|
5
|
+
change_table :users do |t|
|
|
6
|
+
## Database authenticatable
|
|
7
|
+
t.string :email, null: false, default: ""
|
|
8
|
+
t.string :encrypted_password, null: false, default: ""
|
|
9
|
+
|
|
10
|
+
## Recoverable
|
|
11
|
+
t.string :reset_password_token
|
|
12
|
+
t.datetime :reset_password_sent_at
|
|
13
|
+
|
|
14
|
+
## Rememberable
|
|
15
|
+
t.datetime :remember_created_at
|
|
16
|
+
|
|
17
|
+
## Trackable
|
|
18
|
+
# t.integer :sign_in_count, default: 0, null: false
|
|
19
|
+
# t.datetime :current_sign_in_at
|
|
20
|
+
# t.datetime :last_sign_in_at
|
|
21
|
+
# t.inet :current_sign_in_ip
|
|
22
|
+
# t.inet :last_sign_in_ip
|
|
23
|
+
|
|
24
|
+
## Confirmable
|
|
25
|
+
# t.string :confirmation_token
|
|
26
|
+
# t.datetime :confirmed_at
|
|
27
|
+
# t.datetime :confirmation_sent_at
|
|
28
|
+
# t.string :unconfirmed_email # Only if using reconfirmable
|
|
29
|
+
|
|
30
|
+
## Lockable
|
|
31
|
+
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
|
|
32
|
+
# t.string :unlock_token # Only if unlock strategy is :email or :both
|
|
33
|
+
# t.datetime :locked_at
|
|
34
|
+
|
|
35
|
+
# Uncomment below if timestamps were not included in your original model.
|
|
36
|
+
# t.timestamps null: false
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
add_index :users, :email, unique: true
|
|
40
|
+
add_index :users, :reset_password_token, unique: true
|
|
41
|
+
# add_index :users, :confirmation_token, unique: true
|
|
42
|
+
# add_index :users, :unlock_token, unique: true
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.down
|
|
46
|
+
# By default, we don't want to make any assumption about how to roll back a migration when your
|
|
47
|
+
# model already existed. Please edit below which fields you would like to remove in this migration.
|
|
48
|
+
raise ActiveRecord::IrreversibleMigration
|
|
49
|
+
end
|
|
50
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/lib/generators/rockstart/{devise → authorization/devise}/templates/create_user_migration.rb.tt
RENAMED
|
File without changes
|
|
@@ -12,7 +12,19 @@ class User < ApplicationRecord
|
|
|
12
12
|
# admin:boolean
|
|
13
13
|
# deleted_at:datetime
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
# Short display name for user
|
|
16
|
+
def first_name
|
|
17
|
+
namae.given
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Display image for user
|
|
21
|
+
def image
|
|
22
|
+
return unless email?
|
|
23
|
+
|
|
24
|
+
require "digest/md5"
|
|
25
|
+
hash = Digest::MD5.hexdigest(email.downcase)
|
|
26
|
+
"https://s.gravatar.com/avatar/#{hash}?s=480"
|
|
27
|
+
end
|
|
16
28
|
|
|
17
29
|
# instead of deleting users, mark them as soft deleted
|
|
18
30
|
def soft_delete
|
|
@@ -31,7 +43,7 @@ class User < ApplicationRecord
|
|
|
31
43
|
|
|
32
44
|
def to_s
|
|
33
45
|
# Use the stored name value for labels
|
|
34
|
-
(name_changed? ? name_was : name) ||
|
|
46
|
+
(name_changed? ? name_was : name) || super
|
|
35
47
|
end
|
|
36
48
|
|
|
37
49
|
private
|