diff --git a/.idea/altmedia.iml b/.idea/altmedia.iml index 5bf66084..f9d23e9e 100644 --- a/.idea/altmedia.iml +++ b/.idea/altmedia.iml @@ -29,196 +29,194 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.ruby-version b/.ruby-version index 0ddaf4dd..593162e8 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -~> 3.3 +~> 3.4 diff --git a/Dockerfile b/Dockerfile index 6be9d60f..aa7f95e4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ # The base stage scaffolds elements which are common to building and running # the application, such as installing ca-certificates, creating the app user, # and installing runtime system dependencies. -FROM ruby:3.3-slim AS base +FROM ruby:3.4-slim AS base # ------------------------------------------------------------ # Declarative metadata @@ -99,7 +99,7 @@ RUN apt-get install -y --no-install-recommends \ USER $APP_USER # Base image ships with an older version of bundler -RUN gem install bundler --version 2.7.2 +RUN gem install bundler --version 4.0.15 # Install gems. We don't enforce the validity of the Gemfile.lock until the # final (production) stage. diff --git a/Gemfile b/Gemfile index 10a77654..e3fe5c06 100644 --- a/Gemfile +++ b/Gemfile @@ -32,7 +32,7 @@ gem 'pg', '~> 1.2' gem 'prawn', '~> 2.4' gem 'puma', '~> 7.2' gem 'puma-plugin-delayed_stop', '~> 0.1.2' -gem 'rails', '~> 8.0.5' +gem 'rails', '~> 8.1.3' gem 'recaptcha', '~> 4.13' gem 'sassc-rails' gem 'sprockets', '~> 4.0' diff --git a/Gemfile.lock b/Gemfile.lock index 00bd32d7..33ece107 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,29 +1,31 @@ GEM remote: https://rubygems.org/ specs: - actioncable (8.0.5) - actionpack (= 8.0.5) - activesupport (= 8.0.5) + action_text-trix (2.1.19) + railties + actioncable (8.1.3) + actionpack (= 8.1.3) + activesupport (= 8.1.3) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (8.0.5) - actionpack (= 8.0.5) - activejob (= 8.0.5) - activerecord (= 8.0.5) - activestorage (= 8.0.5) - activesupport (= 8.0.5) + actionmailbox (8.1.3) + actionpack (= 8.1.3) + activejob (= 8.1.3) + activerecord (= 8.1.3) + activestorage (= 8.1.3) + activesupport (= 8.1.3) mail (>= 2.8.0) - actionmailer (8.0.5) - actionpack (= 8.0.5) - actionview (= 8.0.5) - activejob (= 8.0.5) - activesupport (= 8.0.5) + actionmailer (8.1.3) + actionpack (= 8.1.3) + actionview (= 8.1.3) + activejob (= 8.1.3) + activesupport (= 8.1.3) mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (8.0.5) - actionview (= 8.0.5) - activesupport (= 8.0.5) + actionpack (8.1.3) + actionview (= 8.1.3) + activesupport (= 8.1.3) nokogiri (>= 1.8.5) rack (>= 2.2.4) rack-session (>= 1.0.1) @@ -31,42 +33,43 @@ GEM rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) useragent (~> 0.16) - actiontext (8.0.5) - actionpack (= 8.0.5) - activerecord (= 8.0.5) - activestorage (= 8.0.5) - activesupport (= 8.0.5) + actiontext (8.1.3) + action_text-trix (~> 2.1.15) + actionpack (= 8.1.3) + activerecord (= 8.1.3) + activestorage (= 8.1.3) + activesupport (= 8.1.3) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (8.0.5) - activesupport (= 8.0.5) + actionview (8.1.3) + activesupport (= 8.1.3) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - activejob (8.0.5) - activesupport (= 8.0.5) + activejob (8.1.3) + activesupport (= 8.1.3) globalid (>= 0.3.6) - activemodel (8.0.5) - activesupport (= 8.0.5) - activerecord (8.0.5) - activemodel (= 8.0.5) - activesupport (= 8.0.5) + activemodel (8.1.3) + activesupport (= 8.1.3) + activerecord (8.1.3) + activemodel (= 8.1.3) + activesupport (= 8.1.3) timeout (>= 0.4.0) - activestorage (8.0.5) - actionpack (= 8.0.5) - activejob (= 8.0.5) - activerecord (= 8.0.5) - activesupport (= 8.0.5) + activestorage (8.1.3) + actionpack (= 8.1.3) + activejob (= 8.1.3) + activerecord (= 8.1.3) + activesupport (= 8.1.3) marcel (~> 1.0) - activesupport (8.0.5) + activesupport (8.1.3) base64 - benchmark (>= 0.3) bigdecimal concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + json logger (>= 1.4.2) minitest (>= 5.1) securerandom (>= 0.3) @@ -142,12 +145,12 @@ GEM regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) colorize (1.1.0) - concurrent-ruby (1.3.6) + concurrent-ruby (1.3.7) connection_pool (3.0.2) crack (1.0.1) bigdecimal rexml - crass (1.0.6) + crass (1.0.7) csv (3.2.9) database_cleaner-active_record (2.2.2) activerecord (>= 5.a) @@ -166,11 +169,11 @@ GEM erubi (1.13.1) et-orbi (1.4.0) tzinfo - faraday (2.14.2) + faraday (2.14.3) faraday-net_http (>= 2.0, < 3.5) json logger - faraday-net_http (3.4.3) + faraday-net_http (3.4.4) net-http (~> 0.5) ffi (1.17.3-aarch64-linux-gnu) ffi (1.17.3-arm64-darwin) @@ -178,7 +181,7 @@ GEM fugit (1.12.1) et-orbi (~> 1.4) raabro (~> 1.4) - globalid (1.3.0) + globalid (1.4.0) activesupport (>= 6.1) good_job (4.13.3) activejob (>= 6.1.0) @@ -193,12 +196,12 @@ GEM http-accept (1.7.0) http-cookie (1.1.0) domain_name (~> 0.5) - i18n (1.14.8) + i18n (1.15.2) concurrent-ruby (~> 1.0) ice_nine (0.11.2) io-console (0.8.2) ipaddress (0.8.3) - irb (1.17.0) + irb (1.18.0) pp (>= 0.6.0) prism (>= 1.3.0) rdoc (>= 4.0.0) @@ -210,7 +213,7 @@ GEM thor (>= 0.14, < 2.0) jquery-ui-rails (8.0.0) railties (>= 3.2.16) - json (2.19.7) + json (2.20.0) jsonpath (0.5.8) multi_json jwt (2.10.3) @@ -230,7 +233,7 @@ GEM loofah (2.25.1) crass (~> 1.0.2) nokogiri (>= 1.12.0) - mail (2.9.0) + mail (2.9.1) logger mini_mime (>= 0.1.1) net-imap @@ -246,14 +249,14 @@ GEM mime-types-data (~> 3.2025, >= 3.2025.0507) mime-types-data (3.2026.0303) mini_mime (1.1.5) - minitest (6.0.2) + minitest (6.0.6) drb (~> 2.0) prism (~> 1.5) multi_json (1.19.1) mutex_m (0.3.0) net-http (0.9.1) uri (>= 0.11.1) - net-imap (0.6.4) + net-imap (0.6.4.1) date net-protocol net-pop (0.1.2) @@ -266,13 +269,13 @@ GEM netaddr (1.5.3) netrc (0.11.0) nio4r (2.7.5) - nokogiri (1.19.3-aarch64-linux-gnu) + nokogiri (1.19.4-aarch64-linux-gnu) racc (~> 1.4) - nokogiri (1.19.3-arm64-darwin) + nokogiri (1.19.4-arm64-darwin) racc (~> 1.4) - nokogiri (1.19.3-x86_64-linux-gnu) + nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) - oj (3.16.16) + oj (3.17.3) bigdecimal (>= 3.0) ostruct (>= 0.2) okcomputer (1.19.1) @@ -302,7 +305,7 @@ GEM pg (1.6.3-arm64-darwin) pg (1.6.3-x86_64-linux) popper_js (2.11.8) - pp (0.6.3) + pp (0.6.4) prettyprint prawn (2.5.0) matrix (~> 0.4) @@ -310,11 +313,8 @@ GEM ttfunk (~> 1.8) prettyprint (0.2.0) prism (1.9.0) - psych (5.3.1) - date - stringio public_suffix (7.0.5) - puma (7.2.0) + puma (7.2.1) nio4r (~> 2.0) puma-plugin-delayed_stop (0.1.2) puma (>= 5.0, < 8) @@ -332,20 +332,20 @@ GEM rack (>= 1.3) rackup (2.3.1) rack (>= 3) - rails (8.0.5) - actioncable (= 8.0.5) - actionmailbox (= 8.0.5) - actionmailer (= 8.0.5) - actionpack (= 8.0.5) - actiontext (= 8.0.5) - actionview (= 8.0.5) - activejob (= 8.0.5) - activemodel (= 8.0.5) - activerecord (= 8.0.5) - activestorage (= 8.0.5) - activesupport (= 8.0.5) + rails (8.1.3) + actioncable (= 8.1.3) + actionmailbox (= 8.1.3) + actionmailer (= 8.1.3) + actionpack (= 8.1.3) + actiontext (= 8.1.3) + actionview (= 8.1.3) + activejob (= 8.1.3) + activemodel (= 8.1.3) + activerecord (= 8.1.3) + activestorage (= 8.1.3) + activesupport (= 8.1.3) bundler (>= 1.15.0) - railties (= 8.0.5) + railties (= 8.1.3) rails-dom-testing (2.3.0) activesupport (>= 5.0.0) minitest @@ -353,9 +353,9 @@ GEM rails-html-sanitizer (1.7.0) loofah (~> 2.25) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) - railties (8.0.5) - actionpack (= 8.0.5) - activesupport (= 8.0.5) + railties (8.1.3) + actionpack (= 8.1.3) + activesupport (= 8.1.3) irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) @@ -363,14 +363,19 @@ GEM tsort (>= 0.2) zeitwerk (~> 2.6) rainbow (3.1.1) - rake (13.3.1) + rake (13.4.2) rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) + rbs (4.0.3) + logger + prism (>= 1.6.0) + tsort rchardet (1.10.0) - rdoc (7.2.0) + rdoc (8.0.0) erb - psych (>= 4.0.0) + prism (>= 1.6.0) + rbs (>= 4.0.0) tsort recaptcha (4.14.0) json @@ -483,7 +488,6 @@ GEM actionpack (>= 6.1) activesupport (>= 6.1) sprockets (>= 3.0.0) - stringio (3.2.0) thor (1.5.0) tilt (2.7.0) timeout (0.6.1) @@ -507,13 +511,13 @@ GEM crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) websocket (1.2.11) - websocket-driver (0.8.0) + websocket-driver (0.8.2) base64 websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.7.5) + zeitwerk (2.8.2) PLATFORMS aarch64-linux-gnu @@ -557,7 +561,7 @@ DEPENDENCIES prawn (~> 2.4) puma (~> 7.2) puma-plugin-delayed_stop (~> 0.1.2) - rails (~> 8.0.5) + rails (~> 8.1.3) recaptcha (~> 4.13) roo (~> 2.8) rspec (~> 3.13) @@ -580,7 +584,7 @@ DEPENDENCIES webmock RUBY VERSION - ruby 3.3.10p183 + ruby 3.4.10 BUNDLED WITH - 2.7.2 + 4.0.15 diff --git a/app/models/location_request.rb b/app/models/location_request.rb index ad2adecc..ab01487a 100644 --- a/app/models/location_request.rb +++ b/app/models/location_request.rb @@ -36,13 +36,13 @@ class LocationRequest < ActiveRecord::Base class << self # Creates a new LocationRequest, validates the attached input file, and # creates location records for each OCLC number. - def create_from(**options) + def create_from(**) # This awkwardness is b/c we need the rollback to cancel # creating associated LocationRecords, but we still want # to return the created request request = nil transaction(requires_new: true) do - request = create_with_records(**options) + request = create_with_records(**) raise ActiveRecord::Rollback if request.errors.any? end request @@ -73,10 +73,10 @@ def clean_up(request) end # @return LocationRequest the request - def create_with_records(input_file: nil, user: nil, **options) + def create_with_records(input_file: nil, user: nil, **) filename = filename_from(input_file) - create(filename:, input_file:, **options).tap do |request| + create(filename:, input_file:, **).tap do |request| ensure_location_records(request, input_file:) ensure_admin_if_immediate(request, user:) end diff --git a/bin/bundler-audit b/bin/bundler-audit new file mode 100755 index 00000000..e2ef2269 --- /dev/null +++ b/bin/bundler-audit @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby +require_relative "../config/boot" +require "bundler/audit/cli" + +ARGV.concat %w[ --config config/bundler-audit.yml ] if ARGV.empty? || ARGV.include?("check") +Bundler::Audit::CLI.start diff --git a/bin/ci b/bin/ci new file mode 100755 index 00000000..4137ad5b --- /dev/null +++ b/bin/ci @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby +require_relative "../config/boot" +require "active_support/continuous_integration" + +CI = ActiveSupport::ContinuousIntegration +require_relative "../config/ci.rb" diff --git a/bin/rubocop b/bin/rubocop index 40330c0f..5a205047 100755 --- a/bin/rubocop +++ b/bin/rubocop @@ -2,7 +2,7 @@ require "rubygems" require "bundler/setup" -# explicit rubocop config increases performance slightly while avoiding config confusion. +# Explicit RuboCop config increases performance slightly while avoiding config confusion. ARGV.unshift("--config", File.expand_path("../.rubocop.yml", __dir__)) load Gem.bin_path("rubocop", "rubocop") diff --git a/bin/setup b/bin/setup index be3db3c0..81be011e 100755 --- a/bin/setup +++ b/bin/setup @@ -22,6 +22,7 @@ FileUtils.chdir APP_ROOT do puts "\n== Preparing database ==" system! "bin/rails db:prepare" + system! "bin/rails db:reset" if ARGV.include?("--reset") puts "\n== Removing old logs and tempfiles ==" system! "bin/rails log:clear tmp:clear" diff --git a/config/application.rb b/config/application.rb index 0a69a08f..578f31b7 100644 --- a/config/application.rb +++ b/config/application.rb @@ -51,7 +51,7 @@ def log_active_storage_root!(active_storage_root) end - config.load_defaults 8.0 + config.load_defaults 8.1 # Please, add to the `ignore` list any other `lib` subdirectories that do # not contain `.rb` files, or that should not be reloaded or eager loaded. diff --git a/config/bundler-audit.yml b/config/bundler-audit.yml new file mode 100644 index 00000000..e74b3af9 --- /dev/null +++ b/config/bundler-audit.yml @@ -0,0 +1,5 @@ +# Audit all gems listed in the Gemfile for known security problems by running bin/bundler-audit. +# CVEs that are not relevant to the application can be enumerated on the ignore list below. + +ignore: + - CVE-THAT-DOES-NOT-APPLY diff --git a/config/ci.rb b/config/ci.rb new file mode 100644 index 00000000..a75ee71c --- /dev/null +++ b/config/ci.rb @@ -0,0 +1,24 @@ +# Run using bin/ci + +CI.run do + step 'Setup', 'bin/setup --skip-server' + + step 'Style: Ruby', 'bin/rubocop' + + step 'Security: Gem audit', 'bin/bundler-audit' + step 'Security: Importmap vulnerability audit', 'bin/importmap audit' + step 'Security: Brakeman code analysis', 'bin/brakeman --quiet --no-pager --exit-on-warn --exit-on-error' + step 'Tests: Rails', 'bin/rails test' + step 'Tests: Seeds', 'env RAILS_ENV=test bin/rails db:seed:replant' + + # Optional: Run system tests + # step 'Tests: System', 'bin/rails test:system' + + # Optional: set a green GitHub commit status to unblock PR merge. + # Requires the `gh` CLI and `gh extension install basecamp/gh-signoff`. + # if success? + # step 'Signoff: All systems go. Ready for merge and deploy.', 'gh signoff' + # else + # failure 'Signoff: CI failed. Do not merge or deploy.', 'Fix the issues and try again.' + # end +end diff --git a/config/environments/development.rb b/config/environments/development.rb index 9eb84da4..70890adf 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -39,20 +39,18 @@ config.active_storage.service = :local # Don't care if the mailer can't send. - config.action_mailer.delivery_method = :test + config.action_mailer.raise_delivery_errors = false # Make template changes take effect immediately. config.action_mailer.perform_caching = false + # Configure the default host - this is used by Stack Pass's mailer, to create a link + # back to the application (directly to the approval form for an pass request): + config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } + # Print deprecation notices to the Rails logger. config.active_support.deprecation = :log - # Raise exceptions for disallowed deprecations. - config.active_support.disallowed_deprecation = :raise - - # Tell Active Support which deprecation messages to disallow. - config.active_support.disallowed_deprecation_warnings = [] - # Raise an error on page load if there are pending migrations. config.active_record.migration_error = :page_load @@ -65,6 +63,9 @@ # Highlight code that enqueued background job in logs. config.active_job.verbose_enqueue_logs = true + # Highlight code that triggered redirect in logs. + config.action_dispatch.verbose_redirect_logs = true + # Debug mode disables concatenation and preprocessing of assets. # This option may cause significant delays in view rendering with a large # number of complex assets. @@ -84,8 +85,4 @@ # Raise error when a before_action's only/except options reference missing actions. config.action_controller.raise_on_missing_callback_actions = true - - # Configure the default host - this is used by Stack Pass's mailer, to create a link - # back to the application (directly to the approval form for an pass request): - config.action_mailer.default_url_options = { host: 'localhost:3000' } end diff --git a/config/environments/production.rb b/config/environments/production.rb index 8d08ab6f..b9cc2dc8 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -34,9 +34,12 @@ # Prepend all log lines with the following tags. config.log_tags = [:request_id] - # Change to "debug" to log everything (including potentially personally-identifiable information!) + # Change to "debug" to log everything (including potentially personally-identifiable information!). config.log_level = ENV.fetch('RAILS_LOG_LEVEL', 'info') + # Don't log any deprecations. + config.active_support.report_deprecations = false + # Replace the default in-process memory cache store with a durable alternative. # config.cache_store = :mem_cache_store @@ -51,9 +54,6 @@ # the I18n.default_locale when a translation cannot be found). config.i18n.fallbacks = true - # Send deprecation notices to registered listeners. - config.active_support.deprecation = :notify - # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index 198224b6..852ad20b 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -20,6 +20,10 @@ # config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s } # config.content_security_policy_nonce_directives = %w(script-src style-src) # +# # Automatically add `nonce` to `javascript_tag`, `javascript_include_tag`, and `stylesheet_link_tag` +# # if the corresponding directives are specified in `content_security_policy_nonce_directives`. +# # config.content_security_policy_nonce_auto = true +# # # Report violations without enforcing the policy. # # config.content_security_policy_report_only = true # end diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb index 04a37c60..0fa091f4 100644 --- a/config/initializers/filter_parameter_logging.rb +++ b/config/initializers/filter_parameter_logging.rb @@ -3,4 +3,4 @@ # Configure parameters to be partially matched (e.g. passw matches password) and filtered from the log file. # Use this to limit dissemination of sensitive information. # See the ActiveSupport::ParameterFilter documentation for supported notations and behaviors. -Rails.application.config.filter_parameters += %i[passw secret token _key crypt salt certificate otp ssn] +Rails.application.config.filter_parameters += %i[passw secret token _key crypt salt certificate otp ssn cvv cvc] diff --git a/config/puma.rb b/config/puma.rb index f0ef191a..5dc64ed0 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -7,7 +7,8 @@ # # You can control the number of workers using ENV["WEB_CONCURRENCY"]. You # should only set this value when you want to run 2 or more workers. The -# default is already 1. +# default is already 1. You can set it to `auto` to automatically start a worker +# for each available processor. # # The ideal number of threads per worker depends both on how much time the # application spends waiting for IO operations and on how much you wish to diff --git a/public/400.html b/public/400.html new file mode 100644 index 00000000..640de033 --- /dev/null +++ b/public/400.html @@ -0,0 +1,135 @@ + + + + + + + The server cannot process the request due to a client error (400 Bad Request) + + + + + + + + + + + + + +
+
+ +
+
+

The server cannot process the request due to a client error. Please check the request and try again. If you're the application owner check the logs for more information.

+
+
+ + + + diff --git a/public/404.html b/public/404.html index 2be3af26..d7f0f142 100644 --- a/public/404.html +++ b/public/404.html @@ -1,67 +1,135 @@ - - - - The page you were looking for doesn't exist (404) - - - - - - -
-
-

The page you were looking for doesn't exist.

-

You may have mistyped the address or the page may have moved.

-
-

If you are the application owner check the logs for more information.

-
- + + + + + + + The page you were looking for doesn't exist (404 Not found) + + + + + + + + + + + + + +
+
+ +
+
+

The page you were looking for doesn't exist. You may have mistyped the address or the page may have moved. If you're the application owner check the logs for more information.

+
+
+ + + diff --git a/public/422.html b/public/422.html index c08eac0d..f12fb4aa 100644 --- a/public/422.html +++ b/public/422.html @@ -1,67 +1,135 @@ - - - - The change you wanted was rejected (422) - - - - - - -
-
-

The change you wanted was rejected.

-

Maybe you tried to change something you didn't have access to.

-
-

If you are the application owner check the logs for more information.

-
- + + + + + + + The change you wanted was rejected (422 Unprocessable Entity) + + + + + + + + + + + + + +
+
+ +
+
+

The change you wanted was rejected. Maybe you tried to change something you didn't have access to. If you're the application owner check the logs for more information.

+
+
+ + + diff --git a/public/500.html b/public/500.html index 78a030af..e4eb18a7 100644 --- a/public/500.html +++ b/public/500.html @@ -1,66 +1,135 @@ - - - - We're sorry, but something went wrong (500) - - - - - - -
-
-

We're sorry, but something went wrong.

-
-

If you are the application owner check the logs for more information.

-
- + + + + + + + We're sorry, but something went wrong (500 Internal Server Error) + + + + + + + + + + + + + +
+
+ +
+
+

We're sorry, but something went wrong.
If you're the application owner check the logs for more information.

+
+
+ + + diff --git a/public/icon.png b/public/icon.png new file mode 100644 index 00000000..c4c9dbfb Binary files /dev/null and b/public/icon.png differ diff --git a/public/icon.svg b/public/icon.svg new file mode 100644 index 00000000..04b34bf8 --- /dev/null +++ b/public/icon.svg @@ -0,0 +1,3 @@ + + +