Class: RailsTemplate18f::Generators::ActiveStorageGenerator
- Inherits:
-
Rails::Generators::Base
- Object
- Rails::Generators::Base
- RailsTemplate18f::Generators::ActiveStorageGenerator
- Includes:
- Base
- Defined in:
- lib/generators/rails_template18f/active_storage/active_storage_generator.rb
Instance Method Summary collapse
- #configure_active_storage ⇒ Object
- #configure_clamav_env_var ⇒ Object
- #configure_local_clamav_runner ⇒ Object
- #create_scanned_upload_model_and_job ⇒ Object
- #generate_adr ⇒ Object
- #install_gems ⇒ Object
- #update_boundary_diagram ⇒ Object
- #update_oscal ⇒ Object
Instance Method Details
#configure_active_storage ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/generators/rails_template18f/active_storage/active_storage_generator.rb', line 15 def configure_active_storage generate "rails_template18f:cloud_gov_config", inline: true rails_command "active_storage:install", inline: true comment_lines "config/environments/production.rb", /active_storage\.service/ insert_into_file "config/environments/production.rb", "\n config.active_storage.service = :amazon", after: /active_storage\.service.*$/ environment "config.active_storage.service = :local", env: "ci" append_to_file "config/storage.yml", <<~EOYAML <% cgc = CloudGovConfig.new %> amazon: service: S3 access_key_id: <%= cgc.dig(:s3, :credentials, :access_key_id) %> secret_access_key: <%= cgc.dig(:s3, :credentials, :secret_access_key) %> region: us-gov-west-1 bucket: <%= cgc.dig(:s3, :credentials, :bucket) %> EOYAML end |
#configure_clamav_env_var ⇒ Object
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/generators/rails_template18f/active_storage/active_storage_generator.rb', line 62 def configure_clamav_env_var append_to_file ".env", <<~EOM # CLAMAV_API_URL tells FileScanJob where to send files for virus scans CLAMAV_API_URL=https://localhost:9443 EOM insert_into_file file_path("terraform/app.tf"), <<EOT, after: "environment = {\n" CLAMAV_API_URL = "https://#{app_name}-clamapi-${var.env}.apps.internal:61443" EOT end |
#configure_local_clamav_runner ⇒ Object
58 59 60 |
# File 'lib/generators/rails_template18f/active_storage/active_storage_generator.rb', line 58 def configure_local_clamav_runner append_to_file "Procfile.dev", "clamav: docker run --rm -p 9443:9443 ghcr.io/gsa-tts/clamav-rest/clamav:latest\n" end |
#create_scanned_upload_model_and_job ⇒ Object
48 49 50 51 52 53 54 55 56 |
# File 'lib/generators/rails_template18f/active_storage/active_storage_generator.rb', line 48 def create_scanned_upload_model_and_job generate :migration, "CreateFileUploads", "file:attachment", "record:references{polymorphic}", "scan_status:string", inline: true migration_file = Dir.glob(File.(File.join("db", "migrate", "[0-9]*_*.rb"), destination_root)).grep(/\d+_create_file_uploads.rb$/).first unless migration_file.nil? gsub_file migration_file, ":scan_status", ":scan_status, null: false, default: \"uploaded\"" end directory "app" directory "spec" end |
#generate_adr ⇒ Object
91 92 93 94 95 96 97 |
# File 'lib/generators/rails_template18f/active_storage/active_storage_generator.rb', line 91 def generate_adr adr_dir = File.(File.join("doc", "adr"), destination_root) if Dir.exist? adr_dir @next_adr_id = `ls #{adr_dir} | tail -n 1 | awk -F '-' '{print $1}'`.strip.to_i + 1 template "doc/adr/clamav.md", "doc/adr/#{"%04d" % @next_adr_id}-clamav-file-scanning.md" end end |
#install_gems ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/generators/rails_template18f/active_storage/active_storage_generator.rb', line 33 def install_gems faraday_installed = gem_installed?("faraday") middleware_installed = gem_installed?("faraday-multipart") sdk_installed = gem_installed?("aws-sdk-s3") return if faraday_installed && middleware_installed && sdk_installed gem "faraday", "~> 2.12" unless faraday_installed gem "faraday-multipart", "~> 1.1" unless middleware_installed unless sdk_installed gem_group :production do gem "aws-sdk-s3", "~> 1.176" end end bundle_install end |
#update_boundary_diagram ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/generators/rails_template18f/active_storage/active_storage_generator.rb', line 73 def update_boundary_diagram boundary_filename = "doc/compliance/apps/application.boundary.md" insert_into_file boundary_filename, indent(<<~EOB, 16), after: /ContainerDb\(app_db.*$\n/ Container(clamav, "File Scanning API", "ClamAV", "Internal application for scanning user uploads") ContainerDb(app_s3, "File Storage", "AWS S3", "User-uploaded file storage") EOB insert_into_file boundary_filename, <<~EOB, before: "@enduml" Rel(app, app_s3, "reads/writes file data", "https (443)") EOB if has_active_job? insert_into_file boundary_filename, <<~EOB, before: "@enduml" Rel(worker, app_s3, "reads/writes file data", "https (443)") Rel(worker, clamav, "scans files", "https (9443)") EOB end end |
#update_oscal ⇒ Object
99 100 101 |
# File 'lib/generators/rails_template18f/active_storage/active_storage_generator.rb', line 99 def update_oscal copy_oscal_component "active_storage" end |