From: Lucas Di Pentima Date: Fri, 31 Jul 2020 17:38:20 +0000 (-0300) Subject: 16470: File updates & additions from 'rake rails:update' X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/0b04e71f1e01ba5d935a1c358a89fd462f25738f?hp=2bd46f7e8729bdb39402ea6655f3299f458ae531 16470: File updates & additions from 'rake rails:update' Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- diff --git a/services/api/Gemfile b/services/api/Gemfile index 481cf5b42f..1e12d6a4ce 100644 --- a/services/api/Gemfile +++ b/services/api/Gemfile @@ -22,8 +22,12 @@ group :test, :development do gem 'simplecov-rcov', require: false gem 'mocha', require: false gem 'byebug' + gem 'listen' end +# Fast app boot times +gem 'bootsnap', require: false + gem 'pg', '~> 1.0' gem 'multi_json' diff --git a/services/api/Gemfile.lock b/services/api/Gemfile.lock index 34863158d6..4279151899 100644 --- a/services/api/Gemfile.lock +++ b/services/api/Gemfile.lock @@ -86,6 +86,8 @@ GEM addressable (>= 2.3.1) extlib (>= 0.9.15) multi_json (>= 1.0.0) + bootsnap (1.4.7) + msgpack (~> 1.0) builder (3.2.4) byebug (11.0.1) capistrano (2.15.9) @@ -130,6 +132,9 @@ GEM launchy (2.4.3) addressable (~> 2.3) libv8 (3.16.14.19) + listen (3.2.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) lograge (0.10.0) actionpack (>= 4) activesupport (>= 4) @@ -152,6 +157,7 @@ GEM minitest (5.10.3) mocha (1.8.0) metaclass (~> 0.0.1) + msgpack (1.3.3) multi_json (1.14.1) multi_xml (0.6.0) multipart-post (2.1.1) @@ -289,10 +295,12 @@ DEPENDENCIES acts_as_api andand arvados! + bootsnap byebug factory_bot_rails httpclient jquery-rails + listen lograge logstash-event minitest (= 5.10.3) diff --git a/services/api/app/controllers/application_controller.rb b/services/api/app/controllers/application_controller.rb index c3996f0a0a..2644a06579 100644 --- a/services/api/app/controllers/application_controller.rb +++ b/services/api/app/controllers/application_controller.rb @@ -360,7 +360,7 @@ class ApplicationController < ActionController::Base %w(created_at modified_by_client_uuid modified_by_user_uuid modified_at).each do |x| @attrs.delete x.to_sym end - @attrs = @attrs.symbolize_keys if @attrs.is_a? HashWithIndifferentAccess + @attrs = @attrs.symbolize_keys if @attrs.is_a? ActiveSupport::HashWithIndifferentAccess @attrs end diff --git a/services/api/bin/bundle b/services/api/bin/bundle index 044b5ca231..00d640cf7c 100755 --- a/services/api/bin/bundle +++ b/services/api/bin/bundle @@ -4,5 +4,5 @@ # # SPDX-License-Identifier: AGPL-3.0 -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) load Gem.bin_path('bundler', 'bundle') diff --git a/services/api/bin/setup b/services/api/bin/setup index 2e4d28c58d..c9142b942e 100755 --- a/services/api/bin/setup +++ b/services/api/bin/setup @@ -4,12 +4,11 @@ # # SPDX-License-Identifier: AGPL-3.0 -require 'pathname' require 'fileutils' include FileUtils # path to your application root. -APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) +APP_ROOT = File.expand_path('..', __dir__) def system!(*args) system(*args) || abort("\n== Command #{args} failed ==") diff --git a/services/api/bin/update b/services/api/bin/update index 07a3df93e4..201287ef61 100755 --- a/services/api/bin/update +++ b/services/api/bin/update @@ -4,12 +4,11 @@ # # SPDX-License-Identifier: AGPL-3.0 -require 'pathname' require 'fileutils' include FileUtils # path to your application root. -APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) +APP_ROOT = File.expand_path('..', __dir__) def system!(*args) system(*args) || abort("\n== Command #{args} failed ==") diff --git a/services/api/bin/yarn b/services/api/bin/yarn new file mode 100755 index 0000000000..cc54a3ba55 --- /dev/null +++ b/services/api/bin/yarn @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby + +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + +APP_ROOT = File.expand_path('..', __dir__) +Dir.chdir(APP_ROOT) do + begin + exec "yarnpkg", *ARGV + rescue Errno::ENOENT + $stderr.puts "Yarn executable was not detected in the system." + $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install" + exit 1 + end +end diff --git a/services/api/config/application.rb b/services/api/config/application.rb index b6174a0d89..6bffc9a630 100644 --- a/services/api/config/application.rb +++ b/services/api/config/application.rb @@ -2,13 +2,14 @@ # # SPDX-License-Identifier: AGPL-3.0 -require File.expand_path('../boot', __FILE__) +require_relative 'boot' require "rails" # Pick only the frameworks we need: require "active_model/railtie" require "active_job/railtie" require "active_record/railtie" +# require "active_storage/engine" require "action_controller/railtie" require "action_mailer/railtie" require "action_view/railtie" diff --git a/services/api/config/boot.rb b/services/api/config/boot.rb index 717101c2b2..9605b584e9 100644 --- a/services/api/config/boot.rb +++ b/services/api/config/boot.rb @@ -5,4 +5,5 @@ # Set up gems listed in the Gemfile. ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) -require 'bundler/setup' +require 'bundler/setup' # Set up gems listed in the Gemfile. +require 'bootsnap/setup' # Speed up boot time by caching expensive operations. \ No newline at end of file diff --git a/services/api/config/environments/development.rb.example b/services/api/config/environments/development.rb.example index 56a4ed6dcd..f5ab77a4df 100644 --- a/services/api/config/environments/development.rb.example +++ b/services/api/config/environments/development.rb.example @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: AGPL-3.0 -Server::Application.configure do +Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb # In the development environment your application's code is reloaded on diff --git a/services/api/config/environments/production.rb.example b/services/api/config/environments/production.rb.example index 6c48dcd019..c8194057cc 100644 --- a/services/api/config/environments/production.rb.example +++ b/services/api/config/environments/production.rb.example @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: AGPL-3.0 -Server::Application.configure do +Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb # Code is not reloaded between requests diff --git a/services/api/config/environments/test.rb.example b/services/api/config/environments/test.rb.example index 6b550587cb..9cdf5d9cd1 100644 --- a/services/api/config/environments/test.rb.example +++ b/services/api/config/environments/test.rb.example @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: AGPL-3.0 -Server::Application.configure do +Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb # The test environment is used exclusively to run your application's diff --git a/services/api/config/initializers/content_security_policy.rb b/services/api/config/initializers/content_security_policy.rb new file mode 100644 index 0000000000..853ecdeec4 --- /dev/null +++ b/services/api/config/initializers/content_security_policy.rb @@ -0,0 +1,29 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + +# Be sure to restart your server when you modify this file. + +# Define an application-wide content security policy +# For further information see the following documentation +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy + +# Rails.application.config.content_security_policy do |policy| +# policy.default_src :self, :https +# policy.font_src :self, :https, :data +# policy.img_src :self, :https, :data +# policy.object_src :none +# policy.script_src :self, :https +# policy.style_src :self, :https + +# # Specify URI for violation reports +# # policy.report_uri "/csp-violation-report-endpoint" +# end + +# If you are using UJS then enable automatic nonce generation +# Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) } + +# Report CSP violations to a specified URI +# For further information see the following documentation: +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only +# Rails.application.config.content_security_policy_report_only = true diff --git a/services/api/config/initializers/new_framework_defaults_5_2.rb b/services/api/config/initializers/new_framework_defaults_5_2.rb new file mode 100644 index 0000000000..93a8d52406 --- /dev/null +++ b/services/api/config/initializers/new_framework_defaults_5_2.rb @@ -0,0 +1,42 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + +# Be sure to restart your server when you modify this file. +# +# This file contains migration options to ease your Rails 5.2 upgrade. +# +# Once upgraded flip defaults one by one to migrate to the new default. +# +# Read the Guide for Upgrading Ruby on Rails for more info on each option. + +# Make Active Record use stable #cache_key alongside new #cache_version method. +# This is needed for recyclable cache keys. +# Rails.application.config.active_record.cache_versioning = true + +# Use AES-256-GCM authenticated encryption for encrypted cookies. +# Also, embed cookie expiry in signed or encrypted cookies for increased security. +# +# This option is not backwards compatible with earlier Rails versions. +# It's best enabled when your entire app is migrated and stable on 5.2. +# +# Existing cookies will be converted on read then written with the new scheme. +# Rails.application.config.action_dispatch.use_authenticated_cookie_encryption = true + +# Use AES-256-GCM authenticated encryption as default cipher for encrypting messages +# instead of AES-256-CBC, when use_authenticated_message_encryption is set to true. +# Rails.application.config.active_support.use_authenticated_message_encryption = true + +# Add default protection from forgery to ActionController::Base instead of in +# ApplicationController. +# Rails.application.config.action_controller.default_protect_from_forgery = true + +# Store boolean values are in sqlite3 databases as 1 and 0 instead of 't' and +# 'f' after migrating old data. +# Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true + +# Use SHA-1 instead of MD5 to generate non-sensitive digests, such as the ETag header. +# Rails.application.config.active_support.use_sha1_digests = true + +# Make `form_with` generate id attributes for any generated HTML tags. +# Rails.application.config.action_view.form_with_generates_ids = true diff --git a/services/api/config/initializers/wrap_parameters.rb b/services/api/config/initializers/wrap_parameters.rb index 976777723a..6fb9786504 100644 --- a/services/api/config/initializers/wrap_parameters.rb +++ b/services/api/config/initializers/wrap_parameters.rb @@ -9,7 +9,7 @@ # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. ActiveSupport.on_load(:action_controller) do - wrap_parameters :format => [:json] + wrap_parameters format: [:json] end # Disable root element in JSON by default. diff --git a/services/api/config/routes.rb b/services/api/config/routes.rb index 8afd22192a..6975858035 100644 --- a/services/api/config/routes.rb +++ b/services/api/config/routes.rb @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: AGPL-3.0 -Server::Application.routes.draw do +Rails.application.routes.draw do themes_for_rails # OPTIONS requests are not allowed at routes that use cookies. diff --git a/services/api/config/secrets.yml b/services/api/config/secrets.yml new file mode 100644 index 0000000000..62e1f27cd5 --- /dev/null +++ b/services/api/config/secrets.yml @@ -0,0 +1,36 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rails secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +# Shared secrets are available across all environments. + +# shared: +# api_key: a1B2c3D4e5F6 + +# Environmental secrets are only available for that specific environment. + +development: + secret_key_base: 5b710df613166e048853346d14a1837593db4463b5a778a0b747346d4758a0b4fce9f136c3063f37d92def51917fd42d137f94190de2262ebf3fe25c1f16748a + +test: + secret_key_base: 52392a8314cf1d49f2a81478541578e9be2db70d2be0047492d5ce6b7c7234303e01ff8742fc4c90775fa1fbee2dc3e85d7ecb17a50c36e2b0e29943f82d0804 + +# Do not keep production secrets in the unencrypted secrets file. +# Instead, either read values from the environment. +# Or, use `bin/rails secrets:setup` to configure encrypted secrets +# and move the `production:` environment over there. + +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/services/api/config/storage.yml b/services/api/config/storage.yml new file mode 100644 index 0000000000..5b2c94c43e --- /dev/null +++ b/services/api/config/storage.yml @@ -0,0 +1,38 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + +test: + service: Disk + root: <%= Rails.root.join("tmp/storage") %> + +local: + service: Disk + root: <%= Rails.root.join("storage") %> + +# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key) +# amazon: +# service: S3 +# access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %> +# secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %> +# region: us-east-1 +# bucket: your_own_bucket + +# Remember not to checkin your GCS keyfile to a repository +# google: +# service: GCS +# project: your_project +# credentials: <%= Rails.root.join("path/to/gcs.keyfile") %> +# bucket: your_own_bucket + +# Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key) +# microsoft: +# service: AzureStorage +# storage_account_name: your_account_name +# storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %> +# container: your_container_name + +# mirror: +# service: Mirror +# primary: local +# mirrors: [ amazon, google, microsoft ]