neeto-commons-backend 1.0.89
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.eslintignore +14 -0
- data/.eslintrc.js +87 -0
- data/.husky/helpers/verify_neeto_audit.sh +18 -0
- data/.husky/pre-push +5 -0
- data/.neetoci/neetoci.yml +26 -0
- data/.prettierrc.js +15 -0
- data/.rubocop.yml +626 -0
- data/.ruby-version +1 -0
- data/.semaphore/semaphore.yml +32 -0
- data/.semaphore/staging-deploy.yml +23 -0
- data/Gemfile +92 -0
- data/Gemfile.lock +461 -0
- data/README.md +286 -0
- data/Rakefile +18 -0
- data/app/controllers/api/base_controller.rb +6 -0
- data/app/controllers/neeto_commons_backend/api/base_controller.rb +9 -0
- data/app/controllers/neeto_commons_backend/api/direct_uploads_controller.rb +57 -0
- data/app/controllers/neeto_commons_backend/app_versions_controller.rb +20 -0
- data/app/controllers/neeto_commons_backend/failures_controller.rb +29 -0
- data/app/controllers/neeto_commons_backend/health_check_controller.rb +9 -0
- data/app/controllers/neeto_commons_backend/well_knowns_controller.rb +13 -0
- data/app/mailers/neeto_commons_backend/application_mailer.rb +22 -0
- data/app/models/concerns/neeto_commons_backend/sluggable.rb +27 -0
- data/app/models/concerns/neeto_commons_backend/soft_deletable.rb +20 -0
- data/app/services/neeto_commons_backend/sample_data/common/admin_service.rb +26 -0
- data/app/services/neeto_commons_backend/sample_data/common/app_organization_service.rb +11 -0
- data/app/services/neeto_commons_backend/sample_data/common/base.rb +49 -0
- data/app/services/neeto_commons_backend/sample_data/common/database_cleanup_service.rb +13 -0
- data/app/services/neeto_commons_backend/sample_data/common/loader_service.rb +30 -0
- data/app/services/neeto_commons_backend/sample_data/common/neeto_team_members_service.rb +16 -0
- data/app/services/neeto_commons_backend/sample_data/common/organization_base.rb +36 -0
- data/app/services/neeto_commons_backend/sample_data/common/organization_service.rb +11 -0
- data/app/services/neeto_commons_backend/source_map_publish_service.rb +47 -0
- data/app/views/neeto_commons_backend/failures/show.html.erb +1 -0
- data/app/views/shared/_common.html.erb +8 -0
- data/app/views/shared/_neeto_engineering_replay_widget.html.erb +31 -0
- data/app/views/shared/_neeto_widget.html.erb +30 -0
- data/app/workers/neeto_commons_backend/base_workers/auth.rb +9 -0
- data/app/workers/neeto_commons_backend/base_workers/base.rb +52 -0
- data/app/workers/neeto_commons_backend/base_workers/default.rb +8 -0
- data/app/workers/neeto_commons_backend/base_workers/low.rb +9 -0
- data/app/workers/neeto_commons_backend/base_workers/urgent.rb +9 -0
- data/app/workers/neeto_commons_backend/purge_unattached_files_worker.rb +11 -0
- data/babel.config.js +47 -0
- data/bin/console +15 -0
- data/bin/rails +16 -0
- data/bin/setup +8 -0
- data/config/brakeman.ignore +52 -0
- data/config/locales/en.yml +5 -0
- data/docs/carriers/README.md +5 -0
- data/docs/controller_concerns/README.md +34 -0
- data/docs/controllers/README.md +27 -0
- data/docs/gemfiles/README.md +5 -0
- data/docs/helpers/README.md +21 -0
- data/docs/mailers/README.md +5 -0
- data/docs/model_concerns/README.md +39 -0
- data/docs/routes/README.md +44 -0
- data/docs/scripts/README.md +5 -0
- data/docs/semaphore/README.md +5 -0
- data/docs/services/README.md +23 -0
- data/docs/workers/README.md +32 -0
- data/docs/workflows/README.md +9 -0
- data/lib/Rakefile +4 -0
- data/lib/neeto-commons-backend.rb +62 -0
- data/lib/neeto_commons_backend/.circleci/config.yml +84 -0
- data/lib/neeto_commons_backend/.slugignore +17 -0
- data/lib/neeto_commons_backend/carriers/app_url_carrier.rb +71 -0
- data/lib/neeto_commons_backend/common_files/.bundler-version +1 -0
- data/lib/neeto_commons_backend/common_files/.editorconfig +10 -0
- data/lib/neeto_commons_backend/common_files/.erb-lint.yml +20 -0
- data/lib/neeto_commons_backend/common_files/.eslintignore +14 -0
- data/lib/neeto_commons_backend/common_files/.eslintrc.js +2 -0
- data/lib/neeto_commons_backend/common_files/.gitignore +132 -0
- data/lib/neeto_commons_backend/common_files/.husky/helpers/lint_staged.sh +5 -0
- data/lib/neeto_commons_backend/common_files/.husky/helpers/prevent_conflict_markers.sh +35 -0
- data/lib/neeto_commons_backend/common_files/.husky/helpers/prevent_pushing_to_main.sh +24 -0
- data/lib/neeto_commons_backend/common_files/.husky/helpers/verify_neeto_audit.sh +17 -0
- data/lib/neeto_commons_backend/common_files/.husky/pre-commit +9 -0
- data/lib/neeto_commons_backend/common_files/.husky/pre-push +7 -0
- data/lib/neeto_commons_backend/common_files/.node-version +1 -0
- data/lib/neeto_commons_backend/common_files/.nvmrc +1 -0
- data/lib/neeto_commons_backend/common_files/.postcssrc.yml +6 -0
- data/lib/neeto_commons_backend/common_files/.prettierrc.js +1 -0
- data/lib/neeto_commons_backend/common_files/.rubocop.yml +625 -0
- data/lib/neeto_commons_backend/common_files/.ruby-version +1 -0
- data/lib/neeto_commons_backend/common_files/.semaphore/commands/run_eslint_on_modified_files.sh +5 -0
- data/lib/neeto_commons_backend/common_files/.vscode/extensions.json +10 -0
- data/lib/neeto_commons_backend/common_files/.vscode/settings.json +21 -0
- data/lib/neeto_commons_backend/common_files/Dockerfile.dev +50 -0
- data/lib/neeto_commons_backend/common_files/app/javascript/jsconfig.json +62 -0
- data/lib/neeto_commons_backend/common_files/app/javascript/src/types.d.ts +36 -0
- data/lib/neeto_commons_backend/common_files/babel.config.js +1 -0
- data/lib/neeto_commons_backend/common_files/bin/bundle +5 -0
- data/lib/neeto_commons_backend/common_files/bin/rails +6 -0
- data/lib/neeto_commons_backend/common_files/bin/rake +6 -0
- data/lib/neeto_commons_backend/common_files/bin/setup +40 -0
- data/lib/neeto_commons_backend/common_files/bin/update +33 -0
- data/lib/neeto_commons_backend/common_files/bin/webpacker +17 -0
- data/lib/neeto_commons_backend/common_files/bin/webpacker-dev-server +17 -0
- data/lib/neeto_commons_backend/common_files/bin/yarn +19 -0
- data/lib/neeto_commons_backend/common_files/cypress-tests/.eslintrc.js +57 -0
- data/lib/neeto_commons_backend/common_files/cypress-tests/cypress/plugins/index.js +63 -0
- data/lib/neeto_commons_backend/common_files/github/workflows/auto_update_prs_with_latest_master.yml +21 -0
- data/lib/neeto_commons_backend/common_files/neeto_gems/github/workflows/bump_version.yml +51 -0
- data/lib/neeto_commons_backend/common_files/newrelic.yml +31 -0
- data/lib/neeto_commons_backend/common_files/package-common.json +119 -0
- data/lib/neeto_commons_backend/common_files/roles.yml +34 -0
- data/lib/neeto_commons_backend/common_files/semaphore/semaphore.yml +58 -0
- data/lib/neeto_commons_backend/common_files/sitemap.xml +15 -0
- data/lib/neeto_commons_backend/common_files/test/support/assertion_support.rb +9 -0
- data/lib/neeto_commons_backend/common_files/webpacker.yml +90 -0
- data/lib/neeto_commons_backend/config/secrets.yml +169 -0
- data/lib/neeto_commons_backend/controllers/concerns/api_exceptions.rb +83 -0
- data/lib/neeto_commons_backend/controllers/concerns/api_helpers.rb +9 -0
- data/lib/neeto_commons_backend/controllers/concerns/api_responders.rb +33 -0
- data/lib/neeto_commons_backend/controllers/concerns/authenticatable.rb +51 -0
- data/lib/neeto_commons_backend/controllers/concerns/honeybadger_context.rb +17 -0
- data/lib/neeto_commons_backend/controllers/concerns/store_user_location.rb +23 -0
- data/lib/neeto_commons_backend/cypress/cypress.review.json +13 -0
- data/lib/neeto_commons_backend/cypress/jsconfig.json +17 -0
- data/lib/neeto_commons_backend/cypress/package.json +51 -0
- data/lib/neeto_commons_backend/cypress/resolve.js +16 -0
- data/lib/neeto_commons_backend/cypress/webpack.config.js +21 -0
- data/lib/neeto_commons_backend/engine.rb +6 -0
- data/lib/neeto_commons_backend/environments/application.rb +33 -0
- data/lib/neeto_commons_backend/environments/development.rb +46 -0
- data/lib/neeto_commons_backend/environments/heroku.rb +35 -0
- data/lib/neeto_commons_backend/environments/production.rb +45 -0
- data/lib/neeto_commons_backend/environments/staging.rb +43 -0
- data/lib/neeto_commons_backend/environments/test.rb +29 -0
- data/lib/neeto_commons_backend/gemfiles/Gemfile.common.rb +240 -0
- data/lib/neeto_commons_backend/helpers/auth_server_api.rb +92 -0
- data/lib/neeto_commons_backend/helpers/favicon.rb +18 -0
- data/lib/neeto_commons_backend/helpers/global_props.rb +76 -0
- data/lib/neeto_commons_backend/helpers/neeto_widget_helper.rb +19 -0
- data/lib/neeto_commons_backend/helpers/test_helper.rb +90 -0
- data/lib/neeto_commons_backend/initializers/_enable_extension_hack.rb +32 -0
- data/lib/neeto_commons_backend/initializers/assets.rb +11 -0
- data/lib/neeto_commons_backend/initializers/bullet.rb +26 -0
- data/lib/neeto_commons_backend/initializers/cache_store.rb +27 -0
- data/lib/neeto_commons_backend/initializers/common.rb +33 -0
- data/lib/neeto_commons_backend/initializers/cookies_serializer.rb +11 -0
- data/lib/neeto_commons_backend/initializers/cors.rb +16 -0
- data/lib/neeto_commons_backend/initializers/database_cleaner.rb +11 -0
- data/lib/neeto_commons_backend/initializers/datetime.rb +14 -0
- data/lib/neeto_commons_backend/initializers/email_setup.rb +25 -0
- data/lib/neeto_commons_backend/initializers/filter_parameter_logging.rb +11 -0
- data/lib/neeto_commons_backend/initializers/honeybadger.rb +23 -0
- data/lib/neeto_commons_backend/initializers/kaminari_config.rb +13 -0
- data/lib/neeto_commons_backend/initializers/mime_types.rb +12 -0
- data/lib/neeto_commons_backend/initializers/mini_profiler.rb +14 -0
- data/lib/neeto_commons_backend/initializers/neeto_email_prefixer.rb +40 -0
- data/lib/neeto_commons_backend/initializers/neeto_mail_interceptor.rb +35 -0
- data/lib/neeto_commons_backend/initializers/post_compilation.rb +17 -0
- data/lib/neeto_commons_backend/initializers/rack_attack.rb +38 -0
- data/lib/neeto_commons_backend/initializers/rack_deflater.rb +11 -0
- data/lib/neeto_commons_backend/initializers/rack_timeout.rb +15 -0
- data/lib/neeto_commons_backend/initializers/rails_email_preview.rb +21 -0
- data/lib/neeto_commons_backend/initializers/redis_client_patch.rb +18 -0
- data/lib/neeto_commons_backend/initializers/remove_backtrace_silencers.rb +11 -0
- data/lib/neeto_commons_backend/initializers/session_store.rb +21 -0
- data/lib/neeto_commons_backend/initializers/shared_redis.rb +13 -0
- data/lib/neeto_commons_backend/initializers/sidekiq.rb +46 -0
- data/lib/neeto_commons_backend/initializers/strong_migrations.rb +13 -0
- data/lib/neeto_commons_backend/initializers/wrap_parameters.rb +13 -0
- data/lib/neeto_commons_backend/models/concerns/devise_validator.rb +19 -0
- data/lib/neeto_commons_backend/railtie.rb +20 -0
- data/lib/neeto_commons_backend/routes/catch_all.rb +9 -0
- data/lib/neeto_commons_backend/routes/devise.rb +16 -0
- data/lib/neeto_commons_backend/routes/direct_uploads.rb +9 -0
- data/lib/neeto_commons_backend/routes/draw.rb +29 -0
- data/lib/neeto_commons_backend/routes/email_previews.rb +5 -0
- data/lib/neeto_commons_backend/routes/errors.rb +7 -0
- data/lib/neeto_commons_backend/routes/health.rb +8 -0
- data/lib/neeto_commons_backend/routes/letter_opener.rb +5 -0
- data/lib/neeto_commons_backend/routes/sidekiq.rb +22 -0
- data/lib/neeto_commons_backend/routes/well_knowns.rb +10 -0
- data/lib/neeto_commons_backend/scripts/sync_with_wheel.sh +54 -0
- data/lib/neeto_commons_backend/secrets_management.rb +41 -0
- data/lib/neeto_commons_backend/services/custom_domain_service.rb +40 -0
- data/lib/neeto_commons_backend/tasks/assets.rake +27 -0
- data/lib/neeto_commons_backend/tasks/before_assets_precompile.rake +13 -0
- data/lib/neeto_commons_backend/tasks/simplecov_coverage.rake +25 -0
- data/lib/neeto_commons_backend/version.rb +5 -0
- data/neeto-commons-backend.gemspec +52 -0
- data/package.json +31 -0
- data/yarn.lock +2530 -0
- metadata +497 -0
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "sidekiq"
|
4
|
+
require "sidekiq-cron"
|
5
|
+
|
6
|
+
module NeetoCommonsBackend
|
7
|
+
module Initializers
|
8
|
+
class << self
|
9
|
+
def sidekiq
|
10
|
+
if Rails.env.test? || Rails.env.heroku?
|
11
|
+
require "sidekiq/testing"
|
12
|
+
Sidekiq::Testing.inline!
|
13
|
+
end
|
14
|
+
|
15
|
+
Sidekiq.logger.level = Logger::WARN if Rails.env.test?
|
16
|
+
|
17
|
+
Sidekiq.configure_server do |config|
|
18
|
+
# Reference:
|
19
|
+
# 1. https://github.com/mperham/sidekiq/wiki/Using-Redis#complete-control
|
20
|
+
# 2. https://elements.heroku.com/addons/heroku-redis Max connection 20
|
21
|
+
config.redis = {
|
22
|
+
url: Rails.application.secrets.redis_url,
|
23
|
+
size: 18,
|
24
|
+
reconnect_attempts: 2
|
25
|
+
}
|
26
|
+
|
27
|
+
unless Rails.env.test? || Rails.env.production? || Rails.env.staging?
|
28
|
+
schedule_file = "config/scheduled_jobs.yml"
|
29
|
+
if File.exist?(schedule_file)
|
30
|
+
Sidekiq::Cron::Job.load_from_hash! YAML.load_file(schedule_file, aliases: true)[Rails.env] ||
|
31
|
+
YAML.load_file(schedule_file)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Sidekiq.configure_client do |config|
|
37
|
+
config.redis = {
|
38
|
+
url: Rails.application.secrets.redis_url,
|
39
|
+
size: 2,
|
40
|
+
reconnect_attempts: 2
|
41
|
+
}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
module Initializers
|
5
|
+
class << self
|
6
|
+
def strong_migrations
|
7
|
+
StrongMigrations.lock_timeout = 10.seconds
|
8
|
+
StrongMigrations.statement_timeout = 1.hour
|
9
|
+
StrongMigrations.auto_analyze = true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
module DeviseValidator
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
VALID_EMAIL_REGEX = /\b[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}\z/.freeze
|
8
|
+
|
9
|
+
included do
|
10
|
+
validates :email, presence: true
|
11
|
+
validates :email, uniqueness: {
|
12
|
+
allow_blank: true, scope: :organization_id, if: :email_changed?, case_sensitive: false,
|
13
|
+
message: "is already taken"
|
14
|
+
}
|
15
|
+
validates :email, format: { with: VALID_EMAIL_REGEX, allow_blank: true, if: :email_changed? }
|
16
|
+
validates :password, presence: true, on: :create
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "neeto-commons-backend"
|
4
|
+
require "rails"
|
5
|
+
require "neeto_commons_backend/initializers/post_compilation.rb"
|
6
|
+
|
7
|
+
module NeetoCommonsBackend
|
8
|
+
class Railtie < Rails::Railtie
|
9
|
+
railtie_name :neeto_commons_backend
|
10
|
+
|
11
|
+
rake_tasks do
|
12
|
+
path = File.expand_path(__dir__)
|
13
|
+
Dir.glob("#{path}/tasks/*.rake").each { |f| load f }
|
14
|
+
end
|
15
|
+
|
16
|
+
initializer "neeto_commons_backend.post_compilation" do
|
17
|
+
NeetoCommonsBackend::Initializers::PostCompilation.run
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Rails.application.routes.draw do
|
4
|
+
devise_for :users, controllers: {
|
5
|
+
sessions: "users/sessions",
|
6
|
+
registrations: "users/registrations",
|
7
|
+
omniauth_callbacks: "users/omniauth_callbacks"
|
8
|
+
}, skip: [:session]
|
9
|
+
|
10
|
+
devise_scope :user do
|
11
|
+
get "login", to: "users/sessions#new", as: :new_user_session
|
12
|
+
get "login", to: "users/sessions#new", as: :login
|
13
|
+
get "logout", controller: "users/sessions", action: "destroy"
|
14
|
+
post "/login", controller: "users/sessions", action: "create", as: :user_session
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
module Routes
|
5
|
+
class << self
|
6
|
+
def draw(routes_name)
|
7
|
+
load_draw(routes_name)
|
8
|
+
end
|
9
|
+
|
10
|
+
def neeto_routes(routes_name)
|
11
|
+
Rails.root.join("config/routes/#{routes_name}.rb")
|
12
|
+
end
|
13
|
+
|
14
|
+
def commons_routes(routes_name)
|
15
|
+
"#{File.dirname(__FILE__)}/#{routes_name}.rb"
|
16
|
+
end
|
17
|
+
|
18
|
+
def load_draw(routes_name)
|
19
|
+
if File.exist?(neeto_routes(routes_name))
|
20
|
+
Rails.application.routes.draw do
|
21
|
+
instance_eval(File.read(NeetoCommonsBackend::Routes.neeto_routes(routes_name)))
|
22
|
+
end
|
23
|
+
else
|
24
|
+
instance_eval(File.read(commons_routes(routes_name)))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Rails.application.routes.draw do
|
4
|
+
require "sidekiq/web"
|
5
|
+
require "sidekiq/cron/web"
|
6
|
+
|
7
|
+
def _secure_compare(s1, s2)
|
8
|
+
ActiveSupport::SecurityUtils.secure_compare(::Digest::SHA256.hexdigest(s1), ::Digest::SHA256.hexdigest(s2))
|
9
|
+
end
|
10
|
+
|
11
|
+
if %w[staging production].include?(Rails.env)
|
12
|
+
Sidekiq::Web.use Rack::Auth::Basic do |username, password|
|
13
|
+
_secure_compare(username, "sidekiq") & _secure_compare(password, Rails.application.secrets.sidekiq_web_password)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
if Rails.env.development?
|
18
|
+
mount Sidekiq::Web, at: "/sidekiq"
|
19
|
+
else
|
20
|
+
mount Sidekiq::Web, at: "/sidekiq", constraints: { method: "GET" }
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Rails.application.routes.draw do
|
4
|
+
defaults format: :json do
|
5
|
+
scope ".well-known" do
|
6
|
+
get "assetlinks", to: "well_knowns#assetlinks"
|
7
|
+
get "apple-app-site-association", to: "well_knowns#apple_app_site_association"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# For executing this script, run the following from your terminal:
|
2
|
+
# curl -s -L "https://raw.githubusercontent.com/bigbinary/wheel/main/.scripts/sync_with_wheel.sh" | bash
|
3
|
+
yarn remove babel-eslint 2> /dev/null
|
4
|
+
yarn add -D @babel/eslint-parser
|
5
|
+
yarn add -D prettier
|
6
|
+
yarn add -D eslint \
|
7
|
+
eslint-plugin-react-hooks@4.2.1-alpha-13455d26d-20211104 \
|
8
|
+
eslint-plugin-import \
|
9
|
+
eslint-config-prettier \
|
10
|
+
eslint-plugin-prettier \
|
11
|
+
eslint-plugin-json \
|
12
|
+
eslint-plugin-react \
|
13
|
+
eslint-plugin-promise \
|
14
|
+
eslint-plugin-jam3 \
|
15
|
+
eslint-plugin-cypress \
|
16
|
+
eslint-plugin-unused-imports \
|
17
|
+
prettier-plugin-tailwindcss
|
18
|
+
|
19
|
+
raw_base_url="https://raw.githubusercontent.com/bigbinary/wheel/main"
|
20
|
+
declare -a configs=(
|
21
|
+
".eslintrc.js"
|
22
|
+
".eslintignore"
|
23
|
+
".eslint-rules/helpers/index.js"
|
24
|
+
".eslint-rules/imports/enforced.js"
|
25
|
+
".eslint-rules/imports/order.js"
|
26
|
+
".eslint-rules/globals.js"
|
27
|
+
".eslint-rules/overrides.js"
|
28
|
+
".eslint-rules/promise.js"
|
29
|
+
".eslint-rules/react.js"
|
30
|
+
".rubocop.yml"
|
31
|
+
".prettierrc.js"
|
32
|
+
".editorconfig"
|
33
|
+
".vscode/extensions.json"
|
34
|
+
".vscode/settings.json"
|
35
|
+
"cypress-tests/.eslintrc.js"
|
36
|
+
".semaphore/commands/run_eslint_on_modified_files.sh"
|
37
|
+
".node-version"
|
38
|
+
".nvmrc"
|
39
|
+
".ruby-version"
|
40
|
+
".erb-lint.yml"
|
41
|
+
"bin/bundle"
|
42
|
+
"bin/rails"
|
43
|
+
"bin/rake"
|
44
|
+
"bin/setup"
|
45
|
+
"bin/update"
|
46
|
+
"bin/webpack"
|
47
|
+
"bin/webpack-dev-server"
|
48
|
+
"bin/yarn"
|
49
|
+
)
|
50
|
+
|
51
|
+
for config in "${configs[@]}"; do
|
52
|
+
echo "Downloading ${config}..."
|
53
|
+
curl --create-dirs -o "${config}" "${raw_base_url}/${config}"
|
54
|
+
done
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
module SecretsManagement
|
5
|
+
def neeto_secrets
|
6
|
+
@_neeto_secrets ||= begin
|
7
|
+
secrets = ActiveSupport::OrderedOptions.new
|
8
|
+
secrets.deep_merge! common_secrets
|
9
|
+
secrets.deep_merge! host_app_secrets
|
10
|
+
|
11
|
+
# Fallback to config.secret_key_base if secrets.secret_key_base isn't set
|
12
|
+
secrets.secret_key_base ||= config.secret_key_base
|
13
|
+
|
14
|
+
secrets
|
15
|
+
end
|
16
|
+
|
17
|
+
@secrets = @_neeto_secrets
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def host_app_secrets
|
23
|
+
files = config.paths["config/secrets"].existent
|
24
|
+
files = files.reject { |path| path.end_with?(".enc") } unless config.read_encrypted_secrets
|
25
|
+
_read_secrets files
|
26
|
+
end
|
27
|
+
|
28
|
+
def common_secrets
|
29
|
+
_read_secrets [File.join(__dir__, "config/secrets.yml")]
|
30
|
+
end
|
31
|
+
|
32
|
+
def _read_secrets(files)
|
33
|
+
Rails::Secrets.parse(files, env: Rails.env)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class Rails::Application
|
39
|
+
include NeetoCommonsBackend::SecretsManagement
|
40
|
+
alias_method :secrets, :neeto_secrets
|
41
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NeetoCommonsBackend
|
4
|
+
module Services
|
5
|
+
class CustomDomain
|
6
|
+
attr_reader :domain_name, :default_url
|
7
|
+
|
8
|
+
def initialize(domain_name)
|
9
|
+
@domain_name = domain_name
|
10
|
+
@default_url = "https://api.heroku.com/apps/#{Rails.application.secrets.heroku[:app_name]}/domains"
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
params = { hostname: domain_name, sni_endpoint: Rails.application.secrets.heroku[:certificate_name] }
|
15
|
+
uri = URI(default_url)
|
16
|
+
req = Net::HTTP::Post.new(uri)
|
17
|
+
make_api_request(req, params, uri)
|
18
|
+
end
|
19
|
+
|
20
|
+
def delete
|
21
|
+
uri = URI("#{default_url}/#{domain_name}")
|
22
|
+
req = Net::HTTP::Delete.new(uri)
|
23
|
+
make_api_request(req, nil, uri)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def make_api_request(req, params, uri)
|
29
|
+
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
|
30
|
+
req.body = JSON[params] if params
|
31
|
+
req["Content-Type"] = "application/json"
|
32
|
+
req["Accept"] = "application/vnd.heroku+json; version=3"
|
33
|
+
req["Authorization"] = "Bearer #{Rails.application.secrets.heroku[:auth_token]}"
|
34
|
+
http.request(req)
|
35
|
+
end
|
36
|
+
JSON.parse(response.body)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rake"
|
4
|
+
require "json"
|
5
|
+
|
6
|
+
namespace :assets do
|
7
|
+
desc "Remove 'node_modules' folder"
|
8
|
+
task rm_node_modules: :environment do
|
9
|
+
Rails.logger.info "Removing node_modules folder"
|
10
|
+
FileUtils.remove_dir("node_modules", true)
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "Upload sourcemap to Honeybadger"
|
14
|
+
task publish_sourcemap: :environment do
|
15
|
+
Rails.logger.info "Publishing sourcemap"
|
16
|
+
NeetoCommonsBackend::SourceMapPublishService.new.process!
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "Remove 'node_modules' folder and upload sourcemap to Honeybadger"
|
20
|
+
task post_compilation: :environment do
|
21
|
+
skip_clean = %w[no false n f].include?(ENV["WEBPACKER_PRECOMPILE"])
|
22
|
+
unless skip_clean
|
23
|
+
Rake::Task["assets:rm_node_modules"].invoke
|
24
|
+
Rake::Task["assets:publish_sourcemap"].invoke if Rails.env.production? || Rails.env.staging?
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rake"
|
4
|
+
require "json"
|
5
|
+
|
6
|
+
desc "Engines webpack compilation"
|
7
|
+
task before_assets_precompile: :environment do
|
8
|
+
Rake::Task["neeto:area51:webpacker:compile"].invoke if Rake::Task.task_defined?("neeto:area51:webpacker:compile")
|
9
|
+
end
|
10
|
+
|
11
|
+
# every time you execute 'rake assets:precompile'
|
12
|
+
# run 'before_assets_precompile' first
|
13
|
+
Rake::Task["assets:precompile"].enhance ["before_assets_precompile"] if Rake::Task.task_defined?("assets:precompile")
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
require "net/http"
|
5
|
+
|
6
|
+
namespace :simplecov_coverage do
|
7
|
+
desc "Publish simplecov coverage"
|
8
|
+
task :publish do
|
9
|
+
branch = `git rev-parse --abbrev-ref HEAD`.chomp.strip
|
10
|
+
next unless branch == "main"
|
11
|
+
|
12
|
+
repo = `git rev-parse --show-toplevel`.split("/").last.chomp.strip
|
13
|
+
coverage_json = JSON.parse(File.read("#{Rails.root}/coverage/.last_run.json"))
|
14
|
+
coverage = { app_name: repo, value: coverage_json.dig("result", "line") }
|
15
|
+
|
16
|
+
uri = URI("https://neeto-library-stable-versions.herokuapp.com/neeto_test_coverage_data/upload")
|
17
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
18
|
+
http.use_ssl = (uri.scheme == "https")
|
19
|
+
|
20
|
+
request = Net::HTTP::Post.new(uri, "Content-Type" => "application/json")
|
21
|
+
request.body = { coverage_data: coverage }.to_json
|
22
|
+
response = http.request(request)
|
23
|
+
raise "Simplecov coverage upload failed" unless response.is_a?(Net::HTTPSuccess)
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/neeto_commons_backend/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "neeto-commons-backend"
|
7
|
+
spec.version = NeetoCommonsBackend::VERSION
|
8
|
+
spec.authors = ["Prasanth Chaduvula"]
|
9
|
+
spec.email = ["prasanth.chaduvula@bigbinary.com"]
|
10
|
+
|
11
|
+
spec.summary = "Keeps all the common code of neeto products at one place"
|
12
|
+
spec.homepage = "https://github.com/bigbinary/neeto-commons-backend"
|
13
|
+
spec.required_ruby_version = ">= 3.1.2"
|
14
|
+
|
15
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
16
|
+
spec.metadata["source_code_uri"] = "https://github.com/bigbinary/neeto-commons-backend"
|
17
|
+
|
18
|
+
# Specify which files should be added to the gem when it is released.
|
19
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
20
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
21
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
22
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
23
|
+
end
|
24
|
+
end
|
25
|
+
spec.bindir = "bin"
|
26
|
+
spec.require_paths = ["lib"]
|
27
|
+
|
28
|
+
# Uncomment to register a new dependency of your gem
|
29
|
+
# spec.add_dependency "example-gem", "~> 1.0"
|
30
|
+
spec.add_dependency "actionview"
|
31
|
+
spec.add_dependency "bullet"
|
32
|
+
spec.add_dependency "database_cleaner"
|
33
|
+
spec.add_dependency "honeybadger"
|
34
|
+
spec.add_dependency "kaminari"
|
35
|
+
spec.add_dependency "premailer-rails"
|
36
|
+
spec.add_dependency "rack-attack"
|
37
|
+
spec.add_dependency "rack-cors"
|
38
|
+
spec.add_dependency "rack-mini-profiler"
|
39
|
+
spec.add_dependency "rack-timeout"
|
40
|
+
spec.add_dependency "rails_email_preview"
|
41
|
+
spec.add_dependency "rake"
|
42
|
+
spec.add_dependency "redis"
|
43
|
+
spec.add_dependency "sidekiq"
|
44
|
+
spec.add_dependency "sidekiq-cron"
|
45
|
+
spec.add_dependency "sidekiq-failures"
|
46
|
+
spec.add_dependency "omniauth-google-oauth2"
|
47
|
+
spec.add_dependency "pundit"
|
48
|
+
spec.add_dependency "webmock"
|
49
|
+
|
50
|
+
# For more information and examples about making a new gem, checkout our
|
51
|
+
# guide at: https://bundler.io/guides/creating_gem.html
|
52
|
+
end
|
data/package.json
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
{
|
2
|
+
"name": "neeto-commons",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"license": "UNLICENSED",
|
5
|
+
"devDependencies": {
|
6
|
+
"@babel/core": "7.17.10",
|
7
|
+
"@babel/eslint-parser": "7.17.0",
|
8
|
+
"@babel/plugin-transform-runtime": "7.17.10",
|
9
|
+
"@babel/preset-env": "7.17.10",
|
10
|
+
"@babel/preset-react": "7.16.7",
|
11
|
+
"@bigbinary/eslint-plugin-neeto": "1.0.46",
|
12
|
+
"@bigbinary/neeto-commons-frontend": "2.0.73",
|
13
|
+
"eslint": "8.14.0",
|
14
|
+
"eslint-config-prettier": "8.5.0",
|
15
|
+
"eslint-plugin-cypress": "2.12.1",
|
16
|
+
"eslint-plugin-import": "2.26.0",
|
17
|
+
"eslint-plugin-jam3": "0.2.3",
|
18
|
+
"eslint-plugin-json": "3.1.0",
|
19
|
+
"eslint-plugin-prettier": "4.0.0",
|
20
|
+
"eslint-plugin-promise": "6.0.0",
|
21
|
+
"eslint-plugin-react": "7.29.4",
|
22
|
+
"eslint-plugin-react-hooks": "4.5.0",
|
23
|
+
"eslint-plugin-unused-imports": "2.0.0",
|
24
|
+
"prettier": "2.6.2",
|
25
|
+
"prettier-plugin-tailwindcss": "0.1.10",
|
26
|
+
"husky": "^7.0.0"
|
27
|
+
},
|
28
|
+
"scripts": {
|
29
|
+
"prepare": "husky install"
|
30
|
+
}
|
31
|
+
}
|