1
0
mirror of https://github.com/projekteuler/projekteuler.git synced 2026-01-27 10:38:50 +01:00

1 Commits

Author SHA1 Message Date
dependabot-preview[bot]
6f433c80a9 [Security] Bump omniauth from 1.9.1 to 2.0.0
Bumps [omniauth](https://github.com/omniauth/omniauth) from 1.9.1 to 2.0.0. **This update includes a security fix.**
- [Release notes](https://github.com/omniauth/omniauth/releases)
- [Commits](https://github.com/omniauth/omniauth/compare/v1.9.1...v2.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-14 07:28:07 +00:00
34 changed files with 392 additions and 591 deletions

View File

@@ -1,39 +0,0 @@
# See https://docs.docker.com/engine/reference/builder/#dockerignore-file for more about ignoring files.
# Ignore git directory.
/.git/
# Ignore bundler config.
/.bundle
# Ignore all default key files.
/config/master.key
/config/credentials/*.key
# Ignore all environment files.
/.env*
!/.env.example
# Ignore all logfiles and tempfiles.
/log/*
/tmp/*
!/log/.keep
!/tmp/.keep
# Ignore pidfiles, but keep the directory.
/tmp/pids/*
!/tmp/pids/
!/tmp/pids/.keep
# Ignore storage (uploaded files in development and any SQLite databases).
/storage/*
!/storage/.keep
/tmp/storage/*
!/tmp/storage/
!/tmp/storage/.keep
# Ignore assets.
/node_modules/
/app/assets/builds/*
!/app/assets/builds/.keep
/public/assets

9
.gitattributes vendored
View File

@@ -1,9 +0,0 @@
# See https://git-scm.com/docs/gitattributes for more about git attribute files.
# Mark the database schema as having been generated.
db/schema.rb linguist-generated
# Mark any vendored files as having been vendored.
vendor/* linguist-vendored
config/credentials/*.yml.enc diff=rails_credentials
config/credentials.yml.enc diff=rails_credentials

View File

@@ -1,7 +0,0 @@
version: 2
updates:
- package-ecosystem: bundler
directory: "/"
schedule:
interval: weekly
open-pull-requests-limit: 10

View File

@@ -8,18 +8,18 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
ruby: ["3.0", "3.1", "3.2"] ruby: ['2.5', '2.6', '2.7']
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v2
- name: Set up Ruby ${{ matrix.ruby }} - name: Set up Ruby ${{ matrix.ruby }}
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
with: with:
ruby-version: ${{ matrix.ruby }} ruby-version: ${{ matrix.ruby }}
bundler-cache: true bundler-cache: true
- name: Set up Node - name: Set up Node
uses: actions/setup-node@v3 uses: actions/setup-node@v2-beta
with: with:
node-version: "20" node-version: '14'
- name: Install dependencies - name: Install dependencies
run: bundle install --without production run: bundle install --without production
- name: Run tests - name: Run tests

View File

@@ -1,48 +0,0 @@
#
name: Create and publish a Docker image
# Configures this workflow to run every time a change is pushed to the branch called `release`.
on:
push:
branches: ["release"]
# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds.
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu.
jobs:
build-and-push-image:
runs-on: ubuntu-latest
# Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
permissions:
contents: read
packages: write
#
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
# This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
# It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
# It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
- name: Build and push Docker image
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

23
.gitignore vendored
View File

@@ -12,24 +12,13 @@
/db/*.sqlite3-journal /db/*.sqlite3-journal
# Ignore all logfiles and tempfiles. # Ignore all logfiles and tempfiles.
/log/* /log/*.log
/tmp/* /tmp
!/log/.keep
!/tmp/.keep
# Ignore pidfiles, but keep the directory. # Ignore coverage data generated by coveralls
/tmp/pids/* /coverage
!/tmp/pids/ # Ignore encrypted secrets key file.
!/tmp/pids/.keep config/secrets.yml.key
# Ignore storage (uploaded files in development and any SQLite databases).
/storage/*
!/storage/.keep
/tmp/storage/*
!/tmp/storage/
!/tmp/storage/.keep
/public/assets
# Ignore master key for decrypting credentials and more. # Ignore master key for decrypting credentials and more.
/config/master.key /config/master.key

View File

@@ -1 +0,0 @@
ruby-3.2.2

View File

@@ -1,77 +0,0 @@
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
ARG RUBY_VERSION=3.2.2
FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim as base
# Rails app lives here
WORKDIR /rails
# Set production environment
ENV RAILS_ENV="production" \
BUNDLE_DEPLOYMENT="1" \
BUNDLE_PATH="/usr/local/bundle" \
BUNDLE_WITHOUT="development"
# Throw-away build stage to reduce size of final image
FROM base as build
# Install packages needed to build gems and node modules
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y build-essential git libvips pkg-config curl node-gyp default-libmysqlclient-dev
# Install JavaScript dependencies
ARG NODE_VERSION=20.5.0
ARG YARN_VERSION=1.22.19
ENV PATH=/usr/local/node/bin:$PATH
RUN curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ && \
/tmp/node-build-master/bin/node-build "${NODE_VERSION}" /usr/local/node && \
npm install -g yarn@$YARN_VERSION && \
rm -rf /tmp/node-build-master
# Install application gems
COPY Gemfile Gemfile.lock ./
RUN bundle install && \
rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git && \
bundle exec bootsnap precompile --gemfile
# Install node modules
#COPY package.json yarn.lock ./
#RUN yarn install --frozen-lockfile
# Copy application code
COPY . .
# Precompile bootsnap code for faster boot times
RUN bundle exec bootsnap precompile app/ lib/
# Precompiling assets for production without requiring secret RAILS_MASTER_KEY
RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile
# Final stage for app image
FROM base
LABEL org.opencontainers.image.source=https://github.com/projekteuler/projekteuler
LABEL org.opencontainers.image.description="Projekteuler production image"
LABEL org.opencontainers.image.licenses=MIT
# Install packages needed for deployment
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y curl node-gyp default-mysql-client libvips && \
rm -rf /var/lib/apt/lists /var/cache/apt/archives
# Copy built artifacts: gems, application
COPY --from=build /usr/local/bundle /usr/local/bundle
COPY --from=build /rails /rails
# Run and own only the runtime files as a non-root user for security
RUN useradd rails --create-home --shell /bin/bash && \
chown -R rails:rails db log tmp
USER rails:rails
# Entrypoint prepares the database.
ENTRYPOINT ["/rails/bin/docker-entrypoint"]
# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
CMD ["./bin/rails", "server"]

34
Gemfile
View File

@@ -2,13 +2,11 @@ source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 7.0.6' gem 'rails', '6.1.1'
# Use Puma as the app server
gem 'puma', '~> 6.3'
# Use sqlite3 as the database for Active Record # Use sqlite3 as the database for Active Record
gem 'sqlite3', '~> 1.6.7' gem 'sqlite3', '~> 1.4.1'
gem 'mysql2', '~> 0.5.5', group: :production gem 'mysql2', '~> 0.5.2', group: :production
gem 'bootsnap', require: false gem 'bootsnap', require: false
@@ -21,38 +19,40 @@ gem 'coffee-rails', '~> 5.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes # See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby # gem 'therubyracer', platforms: :ruby
gem 'rails-i18n', '~> 7.0.7' gem 'rails-i18n', '~> 6.0.0'
gem 'rails-controller-testing' gem 'rails-controller-testing'
gem 'webmock', group: :test gem 'webmock', group: :test
# Use jquery as the JavaScript library # Use jquery as the JavaScript library
gem 'jquery-rails', '~> 4.5.1' gem 'jquery-rails', '~> 4.4.0'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks', '~> 5.2.1' gem 'turbolinks', '~> 5.2.1'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.11.3' gem 'jbuilder', '~> 2.10.1'
# bundle exec rake doc:rails generates the API under doc/api. # bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 2.6.1', group: :doc gem 'sdoc', '~> 2.0.3', group: :doc
gem 'web-console', '~> 4.2.0', group: :development gem 'web-console', '~> 4.1.0', group: :development
gem 'listen', '~> 3.8.0', group: :development gem 'listen', '~> 3.4.0', group: :development
gem 'bootstrap', '~> 5.2.3' # Use Codacy for coverage
gem "bootstrap_form", "~> 5.2" gem 'codacy-coverage', :require => false
gem 'font-awesome-sass', '~> 6.4.0'
gem 'bootstrap', '~> 4.5.3'
gem "bootstrap_form", "~> 4.5"
gem 'font-awesome-sass', '~> 5.15.1'
# Use Diffy for showing translation diffs # Use Diffy for showing translation diffs
gem 'diffy' gem 'diffy'
gem 'diff-lcs' gem 'diff-lcs'
gem 'will_paginate', '~> 3.3.1' gem 'will_paginate', '~> 3.3.0'
gem 'will_paginate-bootstrap4', '~> 0.2.2' gem 'will_paginate-bootstrap4', '~> 0.2.2'
gem 'devise', '~> 4.8.0' gem 'devise', '~> 4.7.3'
gem 'omniauth' gem 'omniauth'
gem 'omniauth-rails_csrf_protection'
gem 'omniauth-github' gem 'omniauth-github'
# Use ActiveModel has_secure_password # Use ActiveModel has_secure_password

View File

@@ -1,87 +1,83 @@
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
actioncable (7.0.6) actioncable (6.1.1)
actionpack (= 7.0.6) actionpack (= 6.1.1)
activesupport (= 7.0.6) activesupport (= 6.1.1)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (>= 0.6.1) websocket-driver (>= 0.6.1)
actionmailbox (7.0.6) actionmailbox (6.1.1)
actionpack (= 7.0.6) actionpack (= 6.1.1)
activejob (= 7.0.6) activejob (= 6.1.1)
activerecord (= 7.0.6) activerecord (= 6.1.1)
activestorage (= 7.0.6) activestorage (= 6.1.1)
activesupport (= 7.0.6) activesupport (= 6.1.1)
mail (>= 2.7.1) mail (>= 2.7.1)
net-imap actionmailer (6.1.1)
net-pop actionpack (= 6.1.1)
net-smtp actionview (= 6.1.1)
actionmailer (7.0.6) activejob (= 6.1.1)
actionpack (= 7.0.6) activesupport (= 6.1.1)
actionview (= 7.0.6)
activejob (= 7.0.6)
activesupport (= 7.0.6)
mail (~> 2.5, >= 2.5.4) mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
actionpack (7.0.6) actionpack (6.1.1)
actionview (= 7.0.6) actionview (= 6.1.1)
activesupport (= 7.0.6) activesupport (= 6.1.1)
rack (~> 2.0, >= 2.2.4) rack (~> 2.0, >= 2.0.9)
rack-test (>= 0.6.3) rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0)
actiontext (7.0.6) actiontext (6.1.1)
actionpack (= 7.0.6) actionpack (= 6.1.1)
activerecord (= 7.0.6) activerecord (= 6.1.1)
activestorage (= 7.0.6) activestorage (= 6.1.1)
activesupport (= 7.0.6) activesupport (= 6.1.1)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
actionview (7.0.6) actionview (6.1.1)
activesupport (= 7.0.6) activesupport (= 6.1.1)
builder (~> 3.1) builder (~> 3.1)
erubi (~> 1.4) erubi (~> 1.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0)
activejob (7.0.6) activejob (6.1.1)
activesupport (= 7.0.6) activesupport (= 6.1.1)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (7.0.6) activemodel (6.1.1)
activesupport (= 7.0.6) activesupport (= 6.1.1)
activerecord (7.0.6) activerecord (6.1.1)
activemodel (= 7.0.6) activemodel (= 6.1.1)
activesupport (= 7.0.6) activesupport (= 6.1.1)
activestorage (7.0.6) activestorage (6.1.1)
actionpack (= 7.0.6) actionpack (= 6.1.1)
activejob (= 7.0.6) activejob (= 6.1.1)
activerecord (= 7.0.6) activerecord (= 6.1.1)
activesupport (= 7.0.6) activesupport (= 6.1.1)
marcel (~> 1.0) marcel (~> 0.3.1)
mini_mime (>= 1.1.0) mimemagic (~> 0.3.2)
activesupport (7.0.6) activesupport (6.1.1)
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2) i18n (>= 1.6, < 2)
minitest (>= 5.1) minitest (>= 5.1)
tzinfo (~> 2.0) tzinfo (~> 2.0)
addressable (2.8.4) zeitwerk (~> 2.3)
public_suffix (>= 2.0.2, < 6.0) addressable (2.7.0)
autoprefixer-rails (10.4.13.0) public_suffix (>= 2.0.2, < 5.0)
execjs (~> 2) autoprefixer-rails (10.0.2.0)
execjs
bcrypt (3.1.16) bcrypt (3.1.16)
bindex (0.8.1) bindex (0.8.1)
bootsnap (1.16.0) bootsnap (1.5.1)
msgpack (~> 1.2) msgpack (~> 1.0)
bootstrap (5.2.3) bootstrap (4.5.3)
autoprefixer-rails (>= 9.1.0) autoprefixer-rails (>= 9.1.0)
popper_js (>= 2.11.6, < 3) popper_js (>= 1.14.3, < 2)
sassc-rails (>= 2.0.0) sassc-rails (>= 2.0.0)
bootstrap_form (5.2.3) bootstrap_form (4.5.0)
actionpack (>= 6.0) actionpack (>= 5.2)
activemodel (>= 6.0) activemodel (>= 5.2)
builder (3.2.4) builder (3.2.4)
codacy-coverage (2.2.1)
simplecov
coffee-rails (5.0.0) coffee-rails (5.0.0)
coffee-script (>= 2.2.0) coffee-script (>= 2.2.0)
railties (>= 5.2.0) railties (>= 5.2.0)
@@ -89,153 +85,134 @@ GEM
coffee-script-source coffee-script-source
execjs execjs
coffee-script-source (1.12.2) coffee-script-source (1.12.2)
concurrent-ruby (1.2.2) concurrent-ruby (1.1.7)
crack (0.4.5) crack (0.4.5)
rexml rexml
crass (1.0.6) crass (1.0.6)
date (3.3.3) devise (4.7.3)
devise (4.8.1)
bcrypt (~> 3.0) bcrypt (~> 3.0)
orm_adapter (~> 0.1) orm_adapter (~> 0.1)
railties (>= 4.1.0) railties (>= 4.1.0)
responders responders
warden (~> 1.2.3) warden (~> 1.2.3)
diff-lcs (1.5.0) diff-lcs (1.4.4)
diffy (3.4.2) diffy (3.4.0)
erubi (1.12.0) docile (1.3.2)
execjs (2.8.1) erubi (1.10.0)
faraday (2.7.4) execjs (2.7.0)
faraday-net_http (>= 2.0, < 3.1) faraday (1.3.0)
ruby2_keywords (>= 0.0.4) faraday-net_http (~> 1.0)
faraday-net_http (3.0.2) multipart-post (>= 1.2, < 3)
ffi (1.15.5) ruby2_keywords
font-awesome-sass (6.4.0) faraday-net_http (1.0.1)
sassc (~> 2.0) ffi (1.14.2)
globalid (1.1.0) font-awesome-sass (5.15.1)
activesupport (>= 5.0) sassc (>= 1.11)
globalid (0.4.2)
activesupport (>= 4.2.0)
hashdiff (1.0.1) hashdiff (1.0.1)
hashie (5.0.0) hashie (4.1.0)
i18n (1.14.1) i18n (1.8.7)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
jbuilder (2.11.5) jbuilder (2.10.1)
actionview (>= 5.0.0)
activesupport (>= 5.0.0) activesupport (>= 5.0.0)
jquery-rails (4.5.1) jquery-rails (4.4.0)
rails-dom-testing (>= 1, < 3) rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0) railties (>= 4.2.0)
thor (>= 0.14, < 2.0) thor (>= 0.14, < 2.0)
jwt (2.7.0) jwt (2.2.2)
listen (3.8.0) listen (3.4.0)
rb-fsevent (~> 0.10, >= 0.10.3) rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10) rb-inotify (~> 0.9, >= 0.9.10)
loofah (2.21.3) loofah (2.8.0)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.12.0) nokogiri (>= 1.5.9)
mail (2.8.1) mail (2.7.1)
mini_mime (>= 0.1.1) mini_mime (>= 0.1.1)
net-imap marcel (0.3.3)
net-pop mimemagic (~> 0.3.2)
net-smtp
marcel (1.0.2)
method_source (1.0.0) method_source (1.0.0)
mini_mime (1.1.2) mimemagic (0.3.5)
mini_portile2 (2.8.4) mini_mime (1.0.2)
minitest (5.18.1) mini_portile2 (2.5.0)
msgpack (1.6.0) minitest (5.14.3)
msgpack (1.3.3)
multi_json (1.15.0)
multi_xml (0.6.0) multi_xml (0.6.0)
mysql2 (0.5.5) multipart-post (2.1.1)
net-imap (0.3.6) mysql2 (0.5.3)
date nio4r (2.5.4)
net-protocol nokogiri (1.11.1)
net-pop (0.1.2) mini_portile2 (~> 2.5.0)
net-protocol
net-protocol (0.2.1)
timeout
net-smtp (0.3.3)
net-protocol
nio4r (2.5.9)
nokogiri (1.15.3)
mini_portile2 (~> 2.8.2)
racc (~> 1.4) racc (~> 1.4)
oauth2 (2.0.9) oauth2 (1.4.4)
faraday (>= 0.17.3, < 3.0) faraday (>= 0.8, < 2.0)
jwt (>= 1.0, < 3.0) jwt (>= 1.0, < 3.0)
multi_json (~> 1.3)
multi_xml (~> 0.5) multi_xml (~> 0.5)
rack (>= 1.2, < 4) rack (>= 1.2, < 3)
snaky_hash (~> 2.0) omniauth (2.0.0)
version_gem (~> 1.1)
omniauth (2.1.1)
hashie (>= 3.4.6) hashie (>= 3.4.6)
rack (>= 2.2.3) rack (>= 1.6.2, < 3)
rack-protection rack-protection
omniauth-github (2.0.1) omniauth-github (2.0.0)
omniauth (~> 2.0)
omniauth-oauth2 (~> 1.8)
omniauth-oauth2 (1.8.0)
oauth2 (>= 1.4, < 3)
omniauth (~> 2.0)
omniauth-rails_csrf_protection (1.0.1)
actionpack (>= 4.2)
omniauth (~> 2.0) omniauth (~> 2.0)
omniauth-oauth2 (~> 1.7.1)
omniauth-oauth2 (1.7.1)
oauth2 (~> 1.4)
omniauth (>= 1.9, < 3)
orm_adapter (0.5.0) orm_adapter (0.5.0)
popper_js (2.11.7) popper_js (1.16.0)
psych (5.1.0) public_suffix (4.0.6)
stringio racc (1.5.2)
public_suffix (5.0.1) rack (2.2.3)
puma (6.3.0) rack-protection (2.1.0)
nio4r (~> 2.0)
racc (1.7.1)
rack (2.2.7)
rack-protection (3.0.6)
rack rack
rack-test (2.1.0) rack-test (1.1.0)
rack (>= 1.3) rack (>= 1.0, < 3)
rails (7.0.6) rails (6.1.1)
actioncable (= 7.0.6) actioncable (= 6.1.1)
actionmailbox (= 7.0.6) actionmailbox (= 6.1.1)
actionmailer (= 7.0.6) actionmailer (= 6.1.1)
actionpack (= 7.0.6) actionpack (= 6.1.1)
actiontext (= 7.0.6) actiontext (= 6.1.1)
actionview (= 7.0.6) actionview (= 6.1.1)
activejob (= 7.0.6) activejob (= 6.1.1)
activemodel (= 7.0.6) activemodel (= 6.1.1)
activerecord (= 7.0.6) activerecord (= 6.1.1)
activestorage (= 7.0.6) activestorage (= 6.1.1)
activesupport (= 7.0.6) activesupport (= 6.1.1)
bundler (>= 1.15.0) bundler (>= 1.15.0)
railties (= 7.0.6) railties (= 6.1.1)
sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.5) rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1) actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1)
activesupport (>= 5.0.1.rc1) activesupport (>= 5.0.1.rc1)
rails-dom-testing (2.1.1) rails-dom-testing (2.0.3)
activesupport (>= 5.0.0) activesupport (>= 4.2.0)
minitest
nokogiri (>= 1.6) nokogiri (>= 1.6)
rails-html-sanitizer (1.6.0) rails-html-sanitizer (1.3.0)
loofah (~> 2.21) loofah (~> 2.3)
nokogiri (~> 1.14) rails-i18n (6.0.0)
rails-i18n (7.0.7)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8) railties (>= 6.0.0, < 7)
railties (7.0.6) railties (6.1.1)
actionpack (= 7.0.6) actionpack (= 6.1.1)
activesupport (= 7.0.6) activesupport (= 6.1.1)
method_source method_source
rake (>= 12.2) rake (>= 0.8.7)
thor (~> 1.0) thor (~> 1.0)
zeitwerk (~> 2.5) rake (13.0.3)
rake (13.0.6) rb-fsevent (0.10.4)
rb-fsevent (0.11.2)
rb-inotify (0.10.1) rb-inotify (0.10.1)
ffi (~> 1.0) ffi (~> 1.0)
rdoc (6.5.0) rdoc (6.2.1)
psych (>= 4.0.0)
responders (3.0.1) responders (3.0.1)
actionpack (>= 5.0) actionpack (>= 5.0)
railties (>= 5.0) railties (>= 5.0)
rexml (3.2.5) rexml (3.2.4)
ruby2_keywords (0.0.5) ruby2_keywords (0.0.2)
sassc (2.4.0) sassc (2.4.0)
ffi (~> 1.9) ffi (~> 1.9)
sassc-rails (2.1.2) sassc-rails (2.1.2)
@@ -244,84 +221,80 @@ GEM
sprockets (> 3.0) sprockets (> 3.0)
sprockets-rails sprockets-rails
tilt tilt
sdoc (2.6.1) sdoc (2.0.3)
rdoc (>= 5.0) rdoc (>= 5.0)
snaky_hash (2.0.1) simplecov (0.18.1)
hashie docile (~> 1.1)
version_gem (~> 1.1, >= 1.1.1) simplecov-html (~> 0.11.0)
sprockets (4.2.0) simplecov-html (0.11.0)
sprockets (4.0.2)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
rack (>= 2.2.4, < 4) rack (> 1, < 3)
sprockets-rails (3.4.2) sprockets-rails (3.2.2)
actionpack (>= 5.2) actionpack (>= 4.0)
activesupport (>= 5.2) activesupport (>= 4.0)
sprockets (>= 3.0.0) sprockets (>= 3.0.0)
sqlite3 (1.6.7) sqlite3 (1.4.2)
mini_portile2 (~> 2.8.0) thor (1.0.1)
stringio (3.0.6) tilt (2.0.10)
thor (1.2.2)
tilt (2.1.0)
timeout (0.4.0)
turbolinks (5.2.1) turbolinks (5.2.1)
turbolinks-source (~> 5.2) turbolinks-source (~> 5.2)
turbolinks-source (5.2.0) turbolinks-source (5.2.0)
tzinfo (2.0.6) tzinfo (2.0.4)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
uglifier (4.2.0) uglifier (4.2.0)
execjs (>= 0.3.0, < 3) execjs (>= 0.3.0, < 3)
version_gem (1.1.2)
warden (1.2.9) warden (1.2.9)
rack (>= 2.0.9) rack (>= 2.0.9)
web-console (4.2.0) web-console (4.1.0)
actionview (>= 6.0.0) actionview (>= 6.0.0)
activemodel (>= 6.0.0) activemodel (>= 6.0.0)
bindex (>= 0.4.0) bindex (>= 0.4.0)
railties (>= 6.0.0) railties (>= 6.0.0)
webmock (3.18.1) webmock (3.11.1)
addressable (>= 2.8.0) addressable (>= 2.3.6)
crack (>= 0.3.2) crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0) hashdiff (>= 0.4.0, < 2.0.0)
websocket-driver (0.7.5) websocket-driver (0.7.3)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5) websocket-extensions (0.1.5)
will_paginate (3.3.1) will_paginate (3.3.0)
will_paginate-bootstrap4 (0.2.2) will_paginate-bootstrap4 (0.2.2)
will_paginate (~> 3.0, >= 3.0.0) will_paginate (~> 3.0, >= 3.0.0)
zeitwerk (2.6.8) zeitwerk (2.4.2)
PLATFORMS PLATFORMS
ruby ruby
DEPENDENCIES DEPENDENCIES
bootsnap bootsnap
bootstrap (~> 5.2.3) bootstrap (~> 4.5.3)
bootstrap_form (~> 5.2) bootstrap_form (~> 4.5)
codacy-coverage
coffee-rails (~> 5.0.0) coffee-rails (~> 5.0.0)
devise (~> 4.8.0) devise (~> 4.7.3)
diff-lcs diff-lcs
diffy diffy
font-awesome-sass (~> 6.4.0) font-awesome-sass (~> 5.15.1)
jbuilder (~> 2.11.3) jbuilder (~> 2.10.1)
jquery-rails (~> 4.5.1) jquery-rails (~> 4.4.0)
listen (~> 3.8.0) listen (~> 3.4.0)
mysql2 (~> 0.5.5) mysql2 (~> 0.5.2)
omniauth omniauth
omniauth-github omniauth-github
omniauth-rails_csrf_protection rails (= 6.1.1)
puma (~> 6.3)
rails (~> 7.0.6)
rails-controller-testing rails-controller-testing
rails-i18n (~> 7.0.7) rails-i18n (~> 6.0.0)
sassc-rails (~> 2.1.2) sassc-rails (~> 2.1.2)
sdoc (~> 2.6.1) sdoc (~> 2.0.3)
sqlite3 (~> 1.6.7) sqlite3 (~> 1.4.1)
turbolinks (~> 5.2.1) turbolinks (~> 5.2.1)
tzinfo-data tzinfo-data
uglifier (~> 4.2.0) uglifier (~> 4.2.0)
web-console (~> 4.2.0) web-console (~> 4.1.0)
webmock webmock
will_paginate (~> 3.3.1) will_paginate (~> 3.3.0)
will_paginate-bootstrap4 (~> 0.2.2) will_paginate-bootstrap4 (~> 0.2.2)
BUNDLED WITH BUNDLED WITH
2.4.10 2.1.4

View File

@@ -1,17 +1,20 @@
# Projekt Euler Projekt Euler
=============
![Build Status](https://github.com/projekteuler/projekteuler/workflows/CI/badge.svg) ![Build Status](https://github.com/projekteuler/projekteuler/workflows/CI/badge.svg)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/68921bff5347435f8fff10c1d6872568)](https://www.codacy.com/app/projekteuler/projekteuler)
This is the Ruby on Rails web-app powering [projekteuler.de](https://projekteuler.de). This is the Ruby on Rails web-app powering [projekteuler.de](https://projekteuler.de).
It allows visitors to view and suggest German translations of the maths puzzles found on [projecteuler.net](https://projecteuler.net). It allows visitors to view and suggest German translations of the maths puzzles found on [projecteuler.net](https://projecteuler.net).
## Getting started ## Getting started
1. Download this repository, e.g., with `git clone`. 1. Download this repository, e.g., with `git clone`.
2. Make sure [NodeJS >= 18](https://nodejs.org) is installed. 2. Make sure [NodeJS](https://nodejs.org) is installed.
3. Navigate inside the repository folder. 3. Navigate inside the repository folder.
4. Use bundler to install all required gems. 4. Use bundler to install all required gems.
$ bundle install $ bundle install
5. Setup the database: 5. Setup the database:
$ bin/rails db:setup $ bin/rails db:setup
@@ -26,11 +29,9 @@ It allows visitors to view and suggest German translations of the maths puzzles
9. If you ever want to reset the database to the original state, run `rails db:reset`. 9. If you ever want to reset the database to the original state, run `rails db:reset`.
## Contributing ## Contributing
Do you have a suggestion for an improvement for the web app? Please create an [issue](https://github.com/projekteuler/projekteuler/issues) for it. Do you have a suggestion for an improvement for the web app? Please create an [issue](https://github.com/projekteuler/projekteuler/issues) for it.
Do you want to implement this improvement yourself? Follow these steps: Do you want to implement this improvement yourself? Follow these steps:
1. Fork this repository on GitHub. 1. Fork this repository on GitHub.
2. Create a new branch for your improvement 2. Create a new branch for your improvement
3. Implement your improvement, and create tests for it if applicable. 3. Implement your improvement, and create tests for it if applicable.
@@ -43,14 +44,12 @@ Do you want to implement this improvement yourself? Follow these steps:
3. Copy all files from this repository. 3. Copy all files from this repository.
4. Make sure the Rails environment is set to `production`. 4. Make sure the Rails environment is set to `production`.
5. Set up the following environment variables: 5. Set up the following environment variables:
- `RAILS_MASTER_KEY`: The master key for decryption of the Rails credentials * `RAILS_MASTER_KEY`: The master key for decryption of the Rails credentials
- `DATABASE_NAME`: The name of the MySQL database * `DATABASE_NAME`: The name of the MySQL database
- `DATABASE_USERNAME`: The username for the MYSQL database * `DATABASE_USERNAME`: The username for the MYSQL database
- `DATABASE_PASSWORD`: The password for the MYSQL database * `DATABASE_PASSWORD`: The password for the MYSQL database
- `DATABASE_HOST`: The host of the MYSQL database * `GITHUB_CLIENT_ID`: The client ID of your GitHub OAuth App (that you will need to create)
- `DATABASE_PORT`: The port of the MYSQL database * `GITHUB_CLIENT_SECRET`: The client secret of the GitHub OAuth App
- `GITHUB_CLIENT_ID`: The client ID of your GitHub OAuth App (that you will need to create)
- `GITHUB_CLIENT_SECRET`: The client secret of the GitHub OAuth App
6. Install all required gems with `bundle install`. 6. Install all required gems with `bundle install`.
7. Load the database schema with `bin/rails db:schema:load`. 7. Load the database schema with `bin/rails db:schema:load`.
8. Precompile all assets with `bin/rails assets:precompile`. 8. Precompile all assets with `bin/rails assets:precompile`.
@@ -59,5 +58,4 @@ Do you want to implement this improvement yourself? Follow these steps:
Anytime you update the files, you should run `bin/rails db:migrate`, `bin/rails log:clear tmp:clear`, `bin/rails assets:precompile` and then restart the server. Anytime you update the files, you should run `bin/rails db:migrate`, `bin/rails log:clear tmp:clear`, `bin/rails assets:precompile` and then restart the server.
## License ## License
This project is released under the [MIT License](https://opensource.org/licenses/MIT). This project is released under the [MIT License](https://opensource.org/licenses/MIT).

View File

@@ -18,6 +18,6 @@ App.init = ->
$(document).on "turbolinks:load", -> $(document).on "turbolinks:load", ->
App.init() App.init()
$(document).on "click", '#translationTab button[data-bs-target="#preview"]', -> $(document).on "click", '#translationTab a[href="#preview"]', ->
$('#preview .problem-content').html(cm.getValue()) $('#preview .problem-content').html(cm.getValue())
MathJax.Hub.Queue(["Typeset",MathJax.Hub]); MathJax.Hub.Queue(["Typeset",MathJax.Hub]);

View File

@@ -17,6 +17,7 @@
@import "bootstrap"; @import "bootstrap";
@import "rails_bootstrap_forms"; @import "rails_bootstrap_forms";
@import "font-awesome-sprockets";
@import "font-awesome"; @import "font-awesome";
.turbolinks-progress-bar { .turbolinks-progress-bar {

View File

@@ -7,8 +7,11 @@ module ApplicationHelper
capture do capture do
flash.each do |msg_type, message| flash.each do |msg_type, message|
concat(content_tag(:div, message, class: "alert #{bootstrap_class_for(msg_type)} alert-dismissible", role: 'alert') do concat(content_tag(:div, message, class: "alert #{bootstrap_class_for(msg_type)} alert-dismissible", role: 'alert') do
concat(content_tag(:button, class: 'close', data: { dismiss: 'alert' }) do
concat content_tag(:span, '&times;'.html_safe, 'aria-hidden' => true)
concat content_tag(:span, 'Close', class: 'sr-only')
end)
concat message concat message
concat content_tag(:button, "", class: 'btn-close', data: { 'bs-dismiss': 'alert' }, 'aria-label': 'Close')
end) end)
end end
nil nil
@@ -26,8 +29,9 @@ module ApplicationHelper
end end
def nav_link_to(body, url) def nav_link_to(body, url)
content_tag(:li, class: 'nav-item') do nav_options = { class: current_page?(url) ? 'nav-item active': 'nav-item' }
link_to body, url, class: current_page?(url) ? 'nav-link active': 'nav-link' content_tag(:li, nav_options) do
link_to body, url, class: 'nav-link'
end end
end end

View File

@@ -3,7 +3,7 @@ class TranslationContentScrubber < Rails::Html::PermitScrubber
super super
self.tags = %w( strong em b i p code pre tt samp kbd var sub self.tags = %w( strong em b i p code pre tt samp kbd var sub
sup dfn cite big small address hr br div span h1 h2 h3 h4 h5 h6 ul ol li dl dt dd abbr sup dfn cite big small address hr br div span h1 h2 h3 h4 h5 h6 ul ol li dl dt dd abbr
acronym a img blockquote del ins table th tr td thead tbody tfoot u ) acronym a img blockquote del ins table th tr td thead tbody tfoot )
self.attributes = %w( href src width height alt cite datetime title class name xml:lang abbr style self.attributes = %w( href src width height alt cite datetime title class name xml:lang abbr style
align border cellpadding cellspacing colspan ) align border cellpadding cellspacing colspan )
end end

View File

@@ -1,4 +1,4 @@
<div class="bg-light p-5 rounded"> <div class="jumbotron">
<h1 class="display-4">Willkommen auf Projekt Euler!</h1> <h1 class="display-4">Willkommen auf Projekt Euler!</h1>
<p>Diese Seite ist eine Übersetzung der englischen Rätsel-Webseite <a href="https://projecteuler.net/">projecteuler.net</a>.</p> <p>Diese Seite ist eine Übersetzung der englischen Rätsel-Webseite <a href="https://projecteuler.net/">projecteuler.net</a>.</p>
<p class="lead"> <p class="lead">
@@ -7,27 +7,26 @@
<% end %> <% end %>
</div> </div>
<div class="row g-4 py-5 row-cols-1 row-cols-lg-3"> <div class="container">
<div class="col d-flex align-items-start"> <!-- Example row of columns -->
<div> <div class="row">
<div class="col-md-4">
<h2>Ansehen</h2> <h2>Ansehen</h2>
<p>Sehen Sie sich die mathematischen Probleme in deutscher Sprache an.</p> <p>Sehen Sie sich die mathematischen Probleme in deutscher Sprache an.</p>
<p>
<%= link_to problems_path, class: 'btn btn-primary' do %> <%= link_to problems_path, class: 'btn btn-primary' do %>
Zu den Problemen &raquo; Zu den Problemen &raquo;
<% end %> <% end %>
</p>
</div> </div>
</div> <div class="col-md-4">
<div class="col d-flex align-items-start">
<div>
<h2>Übersetzen</h2> <h2>Übersetzen</h2>
<p>Bisher wurden erst <%= Problem.translated_count %> der <%= Problem.count %> Probleme übersetzt. Helfen Sie mit, Übersetzungen zu erstellen und anzupassen!</p> <p>Bisher wurden erst <%= Problem.translated_count %> der <%= Problem.count %> Probleme übersetzt. Helfen Sie mit, Übersetzungen zu erstellen und anzupassen!</p>
</div> </div>
</div> <div class="col-md-4">
<div class="col d-flex align-items-start">
<div>
<h2>Verbessern</h2> <h2>Verbessern</h2>
<p>Vermissen Sie eine Funktion auf der Webseite, oder ist Ihnen ein Fehler aufgefallen? Dann helfen Sie beim Entwickeln der Webseite in Ruby on Rails!</p> <p>Vermissen Sie eine Funktion auf der Webseite, oder ist Ihnen ein Fehler aufgefallen? Dann helfen Sie beim Entwickeln der Webseite in Ruby on Rails!</p>
<a class="btn btn-primary" href="https://github.com/projekteuler/projekteuler" target="_blank">Projekt Euler auf GitHub &raquo;</a> <p><a class="btn btn-primary" href="https://github.com/projekteuler/projekteuler" target="_blank">Projekt Euler auf GitHub &raquo;</a></p>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,46 +1,44 @@
<nav class="navbar navbar-expand-lg navbar-light bg-light"> <nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container"> <div class="container">
<%= link_to root_path, class: 'navbar-brand' do %> <%= link_to t('application.site_title'), root_path, class: 'navbar-brand' %>
<%= image_tag "favicon.ico", alt: "", width: 24, height: 24, class: "d-inline-block align-text-top" %> <%= t('application.site_title') %> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<% end %>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"> <span class="navbar-toggler-icon">
<%= icon('fas', 'bars') %> <%= icon('fas', 'bars') %>
</span> </span>
</button> </button>
<div class="collapse navbar-collapse" id="navbarSupportedContent"> <div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto"> <ul class="navbar-nav mr-auto">
<%= nav_link_to t('application.info'), about_info_path %> <%= nav_link_to t('application.info'), about_info_path %>
<%= nav_link_to Problem.model_name.human(count: 2), problems_path %> <%= nav_link_to Problem.model_name.human(count: 2), problems_path %>
<% if user_signed_in? and current_user.admin? %> <% if user_signed_in? and current_user.admin? %>
<%= nav_link_to t('admin.dashboard.index.administration'), admin_dashboard_index_path %> <%= nav_link_to t('admin.dashboard.index.administration'), admin_dashboard_index_path %>
<%= link_to admin_translations_path, class: 'nav-link' do %> <%= link_to admin_translations_path, class: 'nav-link' do %>
<%= t('admin.dashboard.index.translations') %> <span class="badge bg-secondary"><%= Translation.pending.count %></span> <%= t('admin.dashboard.index.translations') %> <span class="badge badge-secondary"><%= Translation.pending.count %></span>
<% end %> <% end %>
<% end %> <% end %>
</ul> </ul>
<ul class="navbar-nav">
<% if user_signed_in? %> <% if user_signed_in? %>
<li class="nav-item">
<span class="navbar-text"><%= t 'application.logged_in_as_html', name: current_user.name %> <span class="navbar-text"><%= t 'application.logged_in_as_html', name: current_user.name %>
<% if current_user.admin? %> <% if current_user.admin? %>
<b><%= icon('fas', 'star') %></b> <b><%= icon('fas', 'star') %></b>
<% end %> <% end %>
</span> </span>
<ul class="navbar-nav"> </li>
<li class="nav-item"> <li class="nav-item">
<%= link_to t('application.sign_out'), destroy_user_session_path, method: :delete, class: 'nav-link' %> <%= link_to t('application.sign_out'), destroy_user_session_path, method: :delete, class: 'nav-link' %>
</li> </li>
</ul>
<% else %> <% else %>
<ul class="navbar-nav">
<li class="nav-item"> <li class="nav-item">
<% if Rails.env.development? %> <% if Rails.env.development? %>
<%= link_to t('application.sign_in_with_github'), user_developer_omniauth_authorize_path, method: :post, class: 'nav-link' %> <%= link_to t('application.sign_in_with_github'), user_developer_omniauth_authorize_path, class: 'nav-link' %>
<% else %> <% else %>
<%= link_to t('application.sign_in_with_github'), user_github_omniauth_authorize_path, method: :post, class: 'nav-link' %> <%= link_to t('application.sign_in_with_github'), user_github_omniauth_authorize_path, class: 'nav-link' %>
<% end %> <% end %>
</li> </li>
</ul>
<% end %> <% end %>
</ul>
</div> </div>
</div> </div>
</nav> </nav>

View File

@@ -2,10 +2,10 @@
<%= f.text_field :title %> <%= f.text_field :title %>
<ul class="nav nav-tabs" id="translationTab" role="tablist"> <ul class="nav nav-tabs" id="translationTab" role="tablist">
<li class="nav-item"> <li class="nav-item">
<button class="nav-link active" id="source-tab" data-bs-toggle="tab" data-bs-target="#source" type="button" role="tab" aria-controls="source" aria-selected="true"><%= t('.source_code') %></button> <%= link_to t('.source_code'), '#source', data: {toggle: 'tab'}, class:'nav-link active', id:'source-tab', role:'tab', 'aria-controls':'source', 'aria-selected':'true' %>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<button class="nav-link" id="preview-tab" data-bs-toggle="tab" data-bs-target="#preview" type="button" role="tab" aria-controls="preview" aria-selected="false"><%= t('.preview') %></button> <%= link_to t('.preview'), '#preview', data: {toggle: 'tab'}, class:'nav-link', id:'preview-tab', role:'tab', 'aria-controls':'preview', 'aria-selected':'false' %>
</li> </li>
</ul> </ul>
<div class="tab-content" id="translationTabContent"> <div class="tab-content" id="translationTabContent">

View File

@@ -1,8 +0,0 @@
#!/bin/bash -e
# If running the rails server then create or migrate existing database
if [ "${*}" == "./bin/rails server" ]; then
./bin/rails db:prepare
fi
exec "${@}"

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
APP_PATH = File.expand_path("../config/application", __dir__) APP_PATH = File.expand_path('../config/application', __dir__)
require_relative "../config/boot" require_relative "../config/boot"
require "rails/commands" require "rails/commands"

View File

@@ -2,7 +2,7 @@
require "fileutils" require "fileutils"
# path to your application root. # path to your application root.
APP_ROOT = File.expand_path("..", __dir__) APP_ROOT = File.expand_path('..', __dir__)
def system!(*args) def system!(*args)
system(*args) || abort("\n== Command #{args} failed ==") system(*args) || abort("\n== Command #{args} failed ==")
@@ -13,21 +13,24 @@ FileUtils.chdir APP_ROOT do
# This script is idempotent, so that you can run it at any time and get an expectable outcome. # This script is idempotent, so that you can run it at any time and get an expectable outcome.
# Add necessary setup steps to this file. # Add necessary setup steps to this file.
puts "== Installing dependencies ==" puts '== Installing dependencies =='
system! "gem install bundler --conservative" system! 'gem install bundler --conservative'
system("bundle check") || system!("bundle install") system('bundle check') || system!('bundle install')
# Install JavaScript dependencies
# system! 'bin/yarn'
# puts "\n== Copying sample files ==" # puts "\n== Copying sample files =="
# unless File.exist?("config/database.yml") # unless File.exist?('config/database.yml')
# FileUtils.cp "config/database.yml.sample", "config/database.yml" # FileUtils.cp 'config/database.yml.sample', 'config/database.yml'
# end # end
puts "\n== Preparing database ==" puts "\n== Preparing database =="
system! "bin/rails db:prepare" system! 'bin/rails db:prepare'
puts "\n== Removing old logs and tempfiles ==" puts "\n== Removing old logs and tempfiles =="
system! "bin/rails log:clear tmp:clear" system! 'bin/rails log:clear tmp:clear'
puts "\n== Restarting application server ==" puts "\n== Restarting application server =="
system! "bin/rails restart" system! 'bin/rails restart'
end end

View File

@@ -9,7 +9,7 @@ Bundler.require(*Rails.groups)
module Projekteuler module Projekteuler
class Application < Rails::Application class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version. # Initialize configuration defaults for originally generated Rails version.
config.load_defaults 7.0 config.load_defaults 6.1
# Configuration for the application, engines, and railties goes here. # Configuration for the application, engines, and railties goes here.
# #
@@ -27,8 +27,7 @@ module Projekteuler
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
config.time_zone = "Berlin" config.time_zone = 'Berlin'
# config.eager_load_paths << Rails.root.join("extras")
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s] config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

View File

@@ -1,4 +1,4 @@
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
require "bundler/setup" # Set up gems listed in the Gemfile. require "bundler/setup" # Set up gems listed in the Gemfile.
require "bootsnap/setup" # Speed up boot time by caching expensive operations. require "bootsnap/setup" # Speed up boot time by caching expensive operations.

View File

@@ -27,5 +27,5 @@ production:
database: <%= ENV['DATABASE_NAME'] %> database: <%= ENV['DATABASE_NAME'] %>
username: <%= ENV['DATABASE_USERNAME'] %> username: <%= ENV['DATABASE_USERNAME'] %>
password: <%= ENV['DATABASE_PASSWORD'] %> password: <%= ENV['DATABASE_PASSWORD'] %>
host: <%= ENV['DATABASE_HOST'] %> host: 127.0.0.1
port: <%= ENV['DATABASE_PORT'] %> port: 3306

View File

@@ -1,19 +1,5 @@
# Load the Rails application. # Load the Rails application.
require_relative "application" require_relative "application"
# Replace when upgrading to Rails 7.1
# See https://github.com/rails/rails/issues/32947#issuecomment-1356391185
class Rails::Application
def secret_key_base
if Rails.env.development? || Rails.env.test? || ENV["SECRET_KEY_BASE_DUMMY"]
secrets.secret_key_base ||= generate_development_secret
else
validate_secret_key_base(
ENV["SECRET_KEY_BASE"] || credentials.secret_key_base || secrets.secret_key_base
)
end
end
end
# Initialize the Rails application. # Initialize the Rails application.
Rails.application.initialize! Rails.application.initialize!

View File

@@ -14,18 +14,15 @@ Rails.application.configure do
# Show full error reports. # Show full error reports.
config.consider_all_requests_local = true config.consider_all_requests_local = true
# Enable server timing
config.server_timing = true
# Enable/disable caching. By default caching is disabled. # Enable/disable caching. By default caching is disabled.
# Run rails dev:cache to toggle caching. # Run rails dev:cache to toggle caching.
if Rails.root.join("tmp/caching-dev.txt").exist? if Rails.root.join('tmp', 'caching-dev.txt').exist?
config.action_controller.perform_caching = true config.action_controller.perform_caching = true
config.action_controller.enable_fragment_cache_logging = true config.action_controller.enable_fragment_cache_logging = true
config.cache_store = :memory_store config.cache_store = :memory_store
config.public_file_server.headers = { config.public_file_server.headers = {
"Cache-Control" => "public, max-age=#{2.days.to_i}" 'Cache-Control' => "public, max-age=#{2.days.to_i}"
} }
else else
config.action_controller.perform_caching = false config.action_controller.perform_caching = false
@@ -56,6 +53,11 @@ Rails.application.configure do
# Highlight code that triggered database queries in logs. # Highlight code that triggered database queries in logs.
config.active_record.verbose_query_logs = true config.active_record.verbose_query_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.
config.assets.debug = true
# Suppress logger output for asset requests. # Suppress logger output for asset requests.
config.assets.quiet = true config.assets.quiet = true
@@ -65,6 +67,10 @@ Rails.application.configure do
# Annotate rendered view with file names. # Annotate rendered view with file names.
# config.action_view.annotate_rendered_view_with_filenames = true # config.action_view.annotate_rendered_view_with_filenames = true
# Use an evented file watcher to asynchronously detect changes in source code,
# routes, locales, etc. This feature depends on the listen gem.
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
# Uncomment if you wish to allow Action Cable access from any origin. # Uncomment if you wish to allow Action Cable access from any origin.
# config.action_cable.disable_request_forgery_protection = true # config.action_cable.disable_request_forgery_protection = true
end end

View File

@@ -18,11 +18,14 @@ Rails.application.configure do
# Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"] # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"]
# or in config/master.key. This key is used to decrypt credentials (and other encrypted files). # or in config/master.key. This key is used to decrypt credentials (and other encrypted files).
config.require_master_key = false config.require_master_key = true
# Disable serving static files from the `/public` folder by default since # Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this. # Apache or NGINX already handles this.
config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present? config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
# Compress JS using a preprocessor.
config.assets.js_compressor = :uglifier
# Compress CSS using a preprocessor. # Compress CSS using a preprocessor.
# config.assets.css_compressor = :sass # config.assets.css_compressor = :sass
@@ -31,19 +34,19 @@ Rails.application.configure do
config.assets.compile = false config.assets.compile = false
# Enable serving of images, stylesheets, and JavaScripts from an asset server. # Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.asset_host = "http://assets.example.com" # config.asset_host = 'http://assets.example.com'
# Specifies the header that your server uses for sending files. # Specifies the header that your server uses for sending files.
# config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
# config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
# Store uploaded files on the local file system (see config/storage.yml for options). # Store uploaded files on the local file system (see config/storage.yml for options).
config.active_storage.service = :local config.active_storage.service = :local
# Mount Action Cable outside main process or domain. # Mount Action Cable outside main process or domain.
# config.action_cable.mount_path = nil # config.action_cable.mount_path = nil
# config.action_cable.url = "wss://example.com/cable" # config.action_cable.url = 'wss://example.com/cable'
# config.action_cable.allowed_request_origins = [ "http://example.com", /http:\/\/example.*/ ] # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = true config.force_ssl = true
@@ -72,15 +75,21 @@ Rails.application.configure do
# the I18n.default_locale when a translation cannot be found). # the I18n.default_locale when a translation cannot be found).
config.i18n.fallbacks = true config.i18n.fallbacks = true
# Log deprecations. # Send deprecation notices to registered listeners.
config.active_support.report_deprecations = true config.active_support.deprecation = :notify
# Log disallowed deprecations.
config.active_support.disallowed_deprecation = :log
# Tell Active Support which deprecation messages to disallow.
config.active_support.disallowed_deprecation_warnings = []
# Use default logging formatter so that PID and timestamp are not suppressed. # Use default logging formatter so that PID and timestamp are not suppressed.
config.log_formatter = ::Logger::Formatter.new config.log_formatter = ::Logger::Formatter.new
# Use a different logger for distributed setups. # Use a different logger for distributed setups.
# require "syslog/logger" # require "syslog/logger"
# config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new "app-name") # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
if ENV["RAILS_LOG_TO_STDOUT"].present? if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new(STDOUT) logger = ActiveSupport::Logger.new(STDOUT)
@@ -90,4 +99,25 @@ Rails.application.configure do
# Do not dump schema after migrations. # Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false config.active_record.dump_schema_after_migration = false
# Inserts middleware to perform automatic connection switching.
# The `database_selector` hash is used to pass options to the DatabaseSelector
# middleware. The `delay` is used to determine how long to wait after a write
# to send a subsequent read to the primary.
#
# The `database_resolver` class is used by the middleware to determine which
# database is appropriate to use based on the time delay.
#
# The `database_resolver_context` class is used by the middleware to set
# timestamps for the last write to the primary. The resolver uses the context
# class timestamps to determine how long to wait before reading from the
# replica.
#
# By default Rails will store a last write timestamp in the session. The
# DatabaseSelector middleware is designed as such you can define your own
# strategy for connection switching and pass that into the middleware through
# these configuration options.
# config.active_record.database_selector = { delay: 2.seconds }
# config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver
# config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session
end end

View File

@@ -1,5 +1,3 @@
require "active_support/core_ext/integer/time"
# The test environment is used exclusively to run your application's # The test environment is used exclusively to run your application's
# test suite. You never need to work with it otherwise. Remember that # test suite. You never need to work with it otherwise. Remember that
# your test database is "scratch space" for the test suite and is wiped # your test database is "scratch space" for the test suite and is wiped
@@ -8,18 +6,17 @@ require "active_support/core_ext/integer/time"
Rails.application.configure do Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb. # Settings specified here will take precedence over those in config/application.rb.
# Turn false under Spring and add config.action_view.cache_template_loading = true.
config.cache_classes = true config.cache_classes = true
# Eager loading loads your whole application. When running a single test locally, # Do not eager load code on boot. This avoids loading your whole application
# this probably isn't necessary. It's a good idea to do in a continuous integration # just for the purpose of running a single test. If you are using a tool that
# system, or in some way before deploying your code. # preloads Rails for running tests, you may have to set it to true.
config.eager_load = ENV["CI"].present? config.eager_load = false
# Configure public file server for tests with Cache-Control for performance. # Configure public file server for tests with Cache-Control for performance.
config.public_file_server.enabled = true config.public_file_server.enabled = true
config.public_file_server.headers = { config.public_file_server.headers = {
"Cache-Control" => "public, max-age=#{1.hour.to_i}" 'Cache-Control' => "public, max-age=#{1.hour.to_i}"
} }
# Show full error reports and disable caching. # Show full error reports and disable caching.

View File

@@ -1,10 +1,12 @@
# Be sure to restart your server when you modify this file. # Be sure to restart your server when you modify this file.
# Version of your assets, change this if you want to expire all your assets. # Version of your assets, change this if you want to expire all your assets.
Rails.application.config.assets.version = "1.0" Rails.application.config.assets.version = '1.0'
# Add additional assets to the asset load path. # Add additional assets to the asset load path.
# Rails.application.config.assets.paths << Emoji.images_path # Rails.application.config.assets.paths << Emoji.images_path
# Add Yarn node_modules folder to the asset load path.
Rails.application.config.assets.paths << Rails.root.join('node_modules')
# Precompile additional assets. # Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in the app/assets # application.js, application.css, and all non-JS/CSS in the app/assets

View File

@@ -4,24 +4,26 @@
# For further information see the following documentation # For further information see the following documentation
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
Rails.application.configure do Rails.application.config.content_security_policy do |policy|
config.content_security_policy do |policy|
policy.default_src :none policy.default_src :none
policy.font_src :self, "https://cdnjs.cloudflare.com" policy.font_src :self, 'https://cdnjs.cloudflare.com'
policy.img_src :self, "https://cdnjs.cloudflare.com", "https://projecteuler.net" policy.img_src :self, 'https://cdnjs.cloudflare.com', 'https://projecteuler.net'
policy.object_src :none policy.object_src :none
policy.script_src :self, "https://cdnjs.cloudflare.com" policy.script_src :self, 'https://cdnjs.cloudflare.com'
policy.style_src :self, :unsafe_inline policy.style_src :self, :unsafe_inline
policy.connect_src :self policy.connect_src :self
# Specify URI for violation reports # Specify URI for violation reports
# policy.report_uri "/csp-violation-report-endpoint" # policy.report_uri "/csp-violation-report-endpoint"
end end
# Generate session nonces for permitted importmap and inline scripts # If you are using UJS then enable automatic nonce generation
config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s } # Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }
config.content_security_policy_nonce_directives = %w(script-src)
# Report CSP violations to a specified URI. See: # Set the nonce only to specific directives
# Rails.application.config.content_security_policy_nonce_directives = %w(script-src)
# 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 # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
# config.content_security_policy_report_only = true # Rails.application.config.content_security_policy_report_only = true
end

View File

@@ -4,13 +4,13 @@
# are locale specific, and you may define rules for as many different # are locale specific, and you may define rules for as many different
# locales as you wish. All of these examples are active by default: # locales as you wish. All of these examples are active by default:
# ActiveSupport::Inflector.inflections(:en) do |inflect| # ActiveSupport::Inflector.inflections(:en) do |inflect|
# inflect.plural /^(ox)$/i, "\\1en" # inflect.plural /^(ox)$/i, '\1en'
# inflect.singular /^(ox)en/i, "\\1" # inflect.singular /^(ox)en/i, '\1'
# inflect.irregular "person", "people" # inflect.irregular 'person', 'people'
# inflect.uncountable %w( fish sheep ) # inflect.uncountable %w( fish sheep )
# end # end
# These inflection rules are supported but not enabled by default: # These inflection rules are supported but not enabled by default:
# ActiveSupport::Inflector.inflections(:en) do |inflect| # ActiveSupport::Inflector.inflections(:en) do |inflect|
# inflect.acronym "RESTful" # inflect.acronym 'RESTful'
# end # end

View File

@@ -8,6 +8,6 @@ class ApplicationHelperTest < ActionView::TestCase
test "bootstrap flash messages should work" do test "bootstrap flash messages should work" do
flash[:error] = "Error" flash[:error] = "Error"
assert_equal "<div class=\"alert alert-danger alert-dismissible\" role=\"alert\">Error<button class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button></div>", flash_messages assert_equal "<div class=\"alert alert-danger alert-dismissible\" role=\"alert\"><button class=\"close\" data-dismiss=\"alert\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Close</span></button>Error</div>", flash_messages
end end
end end

View File

@@ -8,7 +8,7 @@ class TranslatorFlowTest < ActionDispatch::IntegrationTest
end end
test "can login via github" do test "can login via github" do
post '/users/auth/github' get '/users/auth/github'
assert_response :redirect assert_response :redirect
follow_redirect! follow_redirect!
follow_redirect! follow_redirect!

View File

@@ -1,5 +1,8 @@
require 'codacy-coverage'
require 'webmock/minitest' require 'webmock/minitest'
Codacy::Reporter.start
ENV['RAILS_ENV'] ||= 'test' ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__) require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help' require 'rails/test_help'