From 5f5c2302c7c011d5f55aabeb3ffb5d476632dbcb Mon Sep 17 00:00:00 2001 From: moustachu Date: Mon, 22 Sep 2025 13:23:54 +0200 Subject: [PATCH 01/10] feat: FranceConnect v2 --- .env-example | 42 +++ .github/workflows/CI_CD.yml | 4 +- .node-version | 2 +- .ruby-version | 2 +- Dockerfile | 5 +- Gemfile | 9 +- Gemfile.lock | 331 +++++++++--------- .../png/franceconnect-btn-principal-hover.png | Bin 0 -> 4779 bytes .../franceconnect-btn-principal-hover@2x.png | Bin 0 -> 9425 bytes .../png/franceconnect-btn-principal.png | Bin 0 -> 5085 bytes .../png/franceconnect-btn-principal@2x.png | Bin 0 -> 9796 bytes .../svg/franceconnect-btn-principal-hover.svg | 9 + .../svg/franceconnect-btn-principal.svg | 9 + .../png/franceconnect-btn-alt-hover.png | Bin 0 -> 5086 bytes .../png/franceconnect-btn-alt-hover@2x.png | Bin 0 -> 9735 bytes .../png/franceconnect-btn-alt.png | Bin 0 -> 5273 bytes .../png/franceconnect-btn-alt@2x.png | Bin 0 -> 10140 bytes .../svg/franceconnect-btn-alt-hover.svg | 9 + .../svg/franceconnect-btn-alt.svg | 9 + .../png/franceconnect-btn-desactive.png | Bin 0 -> 4713 bytes .../png/franceconnect-btn-desactive@2x.png | Bin 0 -> 9348 bytes .../svg/franceconnect-btn-desactive.svg | 9 + app/assets/stylesheets/decidim.scss | 50 +-- config/environments/production.rb | 26 +- config/initializers/extends.rb | 1 + config/initializers/omniauth.rb | 63 +--- config/locales/fr.yml | 12 +- config/routes.rb | 2 +- config/secrets.yml | 35 +- .../openid_connect/access_token_extends.rb | 41 +++ lib/omniauth/strategies/france_connect.rb | 55 ++- .../strategies/france_connect_profile.rb | 2 +- lib/omniauth/strategies/france_connect_uid.rb | 2 +- 33 files changed, 411 insertions(+), 318 deletions(-) create mode 100644 .env-example create mode 100644 app/assets/images/FranceConnect-Bouton/01-Principal/png/franceconnect-btn-principal-hover.png create mode 100644 app/assets/images/FranceConnect-Bouton/01-Principal/png/franceconnect-btn-principal-hover@2x.png create mode 100644 app/assets/images/FranceConnect-Bouton/01-Principal/png/franceconnect-btn-principal.png create mode 100644 app/assets/images/FranceConnect-Bouton/01-Principal/png/franceconnect-btn-principal@2x.png create mode 100644 app/assets/images/FranceConnect-Bouton/01-Principal/svg/franceconnect-btn-principal-hover.svg create mode 100644 app/assets/images/FranceConnect-Bouton/01-Principal/svg/franceconnect-btn-principal.svg create mode 100644 app/assets/images/FranceConnect-Bouton/02-Alternatif/png/franceconnect-btn-alt-hover.png create mode 100644 app/assets/images/FranceConnect-Bouton/02-Alternatif/png/franceconnect-btn-alt-hover@2x.png create mode 100644 app/assets/images/FranceConnect-Bouton/02-Alternatif/png/franceconnect-btn-alt.png create mode 100644 app/assets/images/FranceConnect-Bouton/02-Alternatif/png/franceconnect-btn-alt@2x.png create mode 100644 app/assets/images/FranceConnect-Bouton/02-Alternatif/svg/franceconnect-btn-alt-hover.svg create mode 100644 app/assets/images/FranceConnect-Bouton/02-Alternatif/svg/franceconnect-btn-alt.svg create mode 100644 app/assets/images/FranceConnect-Bouton/03-Desactive/png/franceconnect-btn-desactive.png create mode 100644 app/assets/images/FranceConnect-Bouton/03-Desactive/png/franceconnect-btn-desactive@2x.png create mode 100644 app/assets/images/FranceConnect-Bouton/03-Desactive/svg/franceconnect-btn-desactive.svg create mode 100644 lib/extends/openid_connect/access_token_extends.rb diff --git a/.env-example b/.env-example new file mode 100644 index 0000000..51c7c36 --- /dev/null +++ b/.env-example @@ -0,0 +1,42 @@ +DATABASE_NAME=osp_app +# DATABASE_USERNAME= +# DATABASE_PASSWORD= +DATABASE_HOST=localhost +DATABASE_PORT=5432 +# bundle exec rake secret +SECRET_KEY_BASE= +ASSET_HOST= +# THROTTLING_MAX_REQUESTS - Integer - Number of requests per ip +THROTTLING_MAX_REQUESTS=100 +# THROTTLING_PERIOD - Integer - Period for each IP in minutes +THROTTLING_PERIOD=1 +# ENABLE_RACK_ATTACK - Binary (Default 1) - Enable or Disable Rack Attack +# ENABLE_RACK_ATTACK=0 +ENABLE_RACK_ATTACK=1 +# Omniauth +# OMNIAUTH_ENABLE_MULTI_TENANT - Binary (Default 1) - Enable or Disable Omniauth multitenant setup +# OMNIAUTH_ENABLE_MULTI_TENANT=0 +OMNIAUTH_ENABLE_MULTI_TENANT=1 +# If OMNIAUTH_ENABLE_MULTI_TENANT is enabled these variables will not be taken into account +## France Connect UID +OMNIAUTH_FRANCE_CONNECT_UID_ENABLED=0 +OMNIAUTH_FRANCE_CONNECT_UID_ICON_PATH= +OMNIAUTH_FRANCE_CONNECT_UID_BUTTON_PATH= +OMNIAUTH_FRANCE_CONNECT_UID_PROVIDER_NAME= +OMNIAUTH_FRANCE_CONNECT_UID_SITE= +OMNIAUTH_FRANCE_CONNECT_UID_CLIENT_ID= +OMNIAUTH_FRANCE_CONNECT_UID_CLIENT_SECRET= +OMNIAUTH_FRANCE_CONNECT_UID_END_SESSION_ENDPOINT= +OMNIAUTH_FRANCE_CONNECT_UID_MINIMUM_AGE= +## France Connect PROFILE +OMNIAUTH_FRANCE_CONNECT_PROFILE_ENABLED=0 +OMNIAUTH_FRANCE_CONNECT_PROFILE_ICON_PATH= +OMNIAUTH_FRANCE_CONNECT_PROFILE_BUTTON_PATH= +OMNIAUTH_FRANCE_CONNECT_PROFILE_PROVIDER_NAME= +OMNIAUTH_FRANCE_CONNECT_PROFILE_SITE= +OMNIAUTH_FRANCE_CONNECT_PROFILE_CLIENT_ID= +OMNIAUTH_FRANCE_CONNECT_PROFILE_CLIENT_SECRET= +OMNIAUTH_FRANCE_CONNECT_PROFILE_END_SESSION_ENDPOINT= +OMNIAUTH_FRANCE_CONNECT_PROFILE_MINIMUM_AGE= + +ENABLE_LETTER_OPENER=0 \ No newline at end of file diff --git a/.github/workflows/CI_CD.yml b/.github/workflows/CI_CD.yml index 08c4789..45caf88 100644 --- a/.github/workflows/CI_CD.yml +++ b/.github/workflows/CI_CD.yml @@ -5,9 +5,9 @@ env: CI: "true" SIMPLECOV: "true" RSPEC_FORMAT: "documentation" - RUBY_VERSION: 2.6.5 + RUBY_VERSION: 2.6.9 RAILS_ENV: test - NODE_VERSION: 16.9.1 + NODE_VERSION: 22.17.1 jobs: lint: diff --git a/.node-version b/.node-version index fc2cbe5..7377d13 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -15.14.0 +22.17.1 diff --git a/.ruby-version b/.ruby-version index 57cf282..d48d370 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.6.5 +2.6.9 diff --git a/Dockerfile b/Dockerfile index 2a24649..88c4c9b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,17 @@ -FROM ruby:2.6.5 +FROM ruby:2.6.9 ENV RAILS_ENV=production ENV SECRET_KEY_BASE=dummy # Install NodeJS -RUN curl https://deb.nodesource.com/setup_lts.x | bash && \ +RUN curl https://deb.nodesource.com/setup_22.x | bash && \ apt install -y nodejs && \ apt update && \ npm install -g npm@8.19.2 && \ npm install --global yarn && \ apt install -y libicu-dev postgresql-client && \ gem install bundler:2.2.17 + gem install bundler:2.2.24 COPY Gemfile* ./ RUN bundle config set --local without 'development test' && bundle install diff --git a/Gemfile b/Gemfile index 55bedd4..62c0502 100644 --- a/Gemfile +++ b/Gemfile @@ -10,7 +10,7 @@ gem "decidim-initiatives", git: "https://github.com/OpenSourcePolitics/decidim.g gem "decidim-cleaner", git: "https://github.com/OpenSourcePolitics/decidim-module-cleaner.git", branch: "release/0.22-stable" gem "decidim-term_customizer", git: "https://github.com/OpenSourcePolitics/decidim-module-term_customizer.git", branch: "0.dev" -gem "bootsnap" +gem "bootsnap", "1.7.5" gem "puma", ">= 4.3" gem "uglifier" @@ -22,8 +22,8 @@ gem "wkhtmltopdf-binary" gem "activerecord-session_store" -gem "omniauth_openid_connect", "0.3.1" -gem "openid_connect", "~> 1.3" +gem "faraday", "2.8.1" +gem "omniauth_openid_connect", "~> 0.8.0" gem "ruby-progressbar" gem "rubyzip", require: "zip" @@ -31,7 +31,8 @@ gem "sentry-raven" gem "dotenv-rails" gem "health_check" -gem "rails", "5.2.4.4" +gem "rack-attack", "~> 6.0" +gem "rails", "5.2.6" gem "sidekiq_alive" group :development, :test do diff --git a/Gemfile.lock b/Gemfile.lock index 435f86c..5a23475 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -17,7 +17,7 @@ GIT GIT remote: https://github.com/OpenSourcePolitics/decidim.git - revision: 0f733013225bc5ab27a1cb23d729fa89c9492867 + revision: 14eb1ead353e4113509dc8bb6b8df1b808c91f8a branch: alt/petition_merge specs: decidim (0.22.0.dev) @@ -228,25 +228,25 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (5.2.4.4) - actionpack (= 5.2.4.4) + actioncable (5.2.6) + actionpack (= 5.2.6) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailer (5.2.4.4) - actionpack (= 5.2.4.4) - actionview (= 5.2.4.4) - activejob (= 5.2.4.4) + actionmailer (5.2.6) + actionpack (= 5.2.6) + actionview (= 5.2.6) + activejob (= 5.2.6) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (5.2.4.4) - actionview (= 5.2.4.4) - activesupport (= 5.2.4.4) + actionpack (5.2.6) + actionview (= 5.2.6) + activesupport (= 5.2.6) rack (~> 2.0, >= 2.0.8) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (5.2.4.4) - activesupport (= 5.2.4.4) + actionview (5.2.6) + activesupport (= 5.2.6) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -254,14 +254,14 @@ GEM active_link_to (1.0.5) actionpack addressable - activejob (5.2.4.4) - activesupport (= 5.2.4.4) + activejob (5.2.6) + activesupport (= 5.2.6) globalid (>= 0.3.6) - activemodel (5.2.4.4) - activesupport (= 5.2.4.4) - activerecord (5.2.4.4) - activemodel (= 5.2.4.4) - activesupport (= 5.2.4.4) + activemodel (5.2.6) + activesupport (= 5.2.6) + activerecord (5.2.6) + activemodel (= 5.2.6) + activesupport (= 5.2.6) arel (>= 9.0) activerecord-session_store (2.0.0) actionpack (>= 5.2.4.1) @@ -269,41 +269,41 @@ GEM multi_json (~> 1.11, >= 1.11.2) rack (>= 2.0.8, < 3) railties (>= 5.2.4.1) - activestorage (5.2.4.4) - actionpack (= 5.2.4.4) - activerecord (= 5.2.4.4) - marcel (~> 0.3.1) - activesupport (5.2.4.4) + activestorage (5.2.6) + actionpack (= 5.2.6) + activerecord (= 5.2.6) + marcel (~> 1.0.0) + activesupport (5.2.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) acts_as_list (0.9.19) activerecord (>= 3.0) - addressable (2.7.0) - public_suffix (>= 2.0.2, < 5.0) + addressable (2.8.4) + public_suffix (>= 2.0.2, < 6.0) aes_key_wrap (1.1.0) anchored (1.1.0) arel (9.0.0) ast (2.4.2) - attr_required (1.0.1) + attr_required (1.0.2) autoprefixer-rails (8.6.5) execjs - aws-eventstream (1.1.1) - aws-partitions (1.460.0) - aws-sdk-core (3.114.0) + aws-eventstream (1.2.0) + aws-partitions (1.638.0) + aws-sdk-core (3.156.0) aws-eventstream (~> 1, >= 1.0.2) - aws-partitions (~> 1, >= 1.239.0) + aws-partitions (~> 1, >= 1.525.0) aws-sigv4 (~> 1.1) - jmespath (~> 1.0) - aws-sdk-kms (1.43.0) - aws-sdk-core (~> 3, >= 3.112.0) + jmespath (~> 1, >= 1.6.1) + aws-sdk-kms (1.58.0) + aws-sdk-core (~> 3, >= 3.127.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.94.1) - aws-sdk-core (~> 3, >= 3.112.0) + aws-sdk-s3 (1.114.0) + aws-sdk-core (~> 3, >= 3.127.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.1) - aws-sigv4 (1.2.3) + aws-sigv4 (~> 1.4) + aws-sigv4 (1.5.1) aws-eventstream (~> 1, >= 1.0.2) axiom-types (0.1.1) descendants_tracker (~> 0.0.4) @@ -313,8 +313,9 @@ GEM babel-transpiler (0.7.0) babel-source (>= 4.0, < 6) execjs (~> 2.0) + base64 (0.3.0) batch-loader (1.5.0) - bcrypt (3.1.16) + bcrypt (3.1.18) better_html (1.0.16) actionview (>= 4.0) activesupport (>= 4.0) @@ -323,15 +324,16 @@ GEM html_tokenizer (~> 0.0.6) parser (>= 2.4) smart_properties - bindata (2.4.10) + bindata (2.5.1) bindex (0.8.1) bootsnap (1.7.5) msgpack (~> 1.0) browser (2.7.1) builder (3.2.4) byebug (11.1.3) - capybara (3.35.3) + capybara (3.36.0) addressable + matrix mini_mime (>= 0.1.3) nokogiri (~> 1.8) rack (>= 1.6.0) @@ -371,7 +373,7 @@ GEM crack (0.4.5) rexml crass (1.0.6) - css_parser (1.9.0) + css_parser (1.11.0) addressable dalli (2.7.11) dalli-elasticache (0.2.0) @@ -387,18 +389,18 @@ GEM declarative-option (0.1.0) descendants_tracker (0.0.4) thread_safe (~> 0.3, >= 0.3.1) - devise (4.8.0) + devise (4.8.1) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) responders warden (~> 1.2.3) - devise-i18n (1.9.4) - devise (>= 4.7.1) + devise-i18n (1.10.2) + devise (>= 4.8.0) devise_invitable (1.7.5) actionmailer (>= 4.1.0) devise (>= 4.0.0) - diff-lcs (1.4.4) + diff-lcs (1.5.0) diffy (3.4.0) doc2text (0.4.3) nokogiri (~> 1.11.1) @@ -406,7 +408,7 @@ GEM docile (1.4.0) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) - doorkeeper (5.5.1) + doorkeeper (5.5.4) railties (>= 5) doorkeeper-i18n (4.0.1) dotenv (2.7.6) @@ -414,6 +416,8 @@ GEM dotenv (= 2.7.6) railties (>= 3.2) e2mmap (0.1.0) + email_validator (2.2.4) + activemodel equalizer (0.0.11) erb_lint (0.0.37) activesupport @@ -428,9 +432,9 @@ GEM erubi (1.10.0) et-orbi (1.2.4) tzinfo - etherpad-lite (0.3.0) + etherpad-lite (0.3.1) rest-client (>= 1.6) - excon (0.81.0) + excon (0.82.0) execjs (2.8.1) factory_bot (4.11.1) activesupport (>= 3.0.0) @@ -439,16 +443,14 @@ GEM railties (>= 3.0.0) faker (1.9.6) i18n (>= 0.7) - faraday (1.4.1) - faraday-excon (~> 1.1) - faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.1) - multipart-post (>= 1.2, < 3) + faraday (2.8.1) + base64 + faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) - faraday-excon (1.1.0) - faraday-net_http (1.0.1) - faraday-net_http_persistent (1.1.0) - ffi (1.15.0) + faraday-follow_redirects (0.3.0) + faraday (>= 1, < 3) + faraday-net_http (3.0.2) + ffi (1.15.1) file_validators (2.3.0) activemodel (>= 3.2) mime-types (>= 1.0) @@ -479,16 +481,16 @@ GEM activesupport (>= 4.1, < 6.0) railties (>= 4.1, < 6.0) tzinfo (~> 1.2, >= 1.2.2) - fugit (1.4.5) + fugit (1.5.0) et-orbi (~> 1.1, >= 1.1.8) raabro (~> 1.4) - geocoder (1.6.7) + geocoder (1.8.0) globalid (0.4.2) activesupport (>= 4.2.0) graphiql-rails (1.4.11) railties sprockets-rails - graphql (1.12.10) + graphql (1.13.13) hashdiff (1.0.1) hashie (4.1.0) health_check (3.1.0) @@ -498,15 +500,14 @@ GEM html_tokenizer (0.0.7) htmlentities (4.3.4) http-accept (1.7.0) - http-cookie (1.0.3) + http-cookie (1.0.5) domain_name (~> 0.5) - httparty (0.18.1) + httparty (0.20.0) mime-types (~> 3.0) multi_xml (>= 0.5.2) - httpclient (2.8.3) i18n (1.8.10) concurrent-ruby (~> 1.0) - i18n-tasks (0.9.34) + i18n-tasks (0.9.37) activesupport (>= 4.0.2) ast (>= 2.1.0) erubi @@ -518,49 +519,52 @@ GEM terminal-table (>= 1.5.1) icalendar (2.7.1) ice_cube (~> 0.16) - ice_cube (0.16.3) + ice_cube (0.16.4) ice_nine (0.11.2) invisible_captcha (0.13.0) rails (>= 3.2.0) ipaddress (0.8.3) jaro_winkler (1.5.4) - jmespath (1.4.0) - jquery-rails (4.4.0) + jmespath (1.6.1) + jquery-rails (4.5.0) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) jquery-tmpl-rails (1.1.0) rails (>= 3.1.0) - json-jwt (1.13.0) + json-jwt (1.16.7) activesupport (>= 4.2) aes_key_wrap + base64 bindata - jwt (2.2.3) - kaminari (1.2.1) + faraday (~> 2.0) + faraday-follow_redirects + jwt (2.4.1) + kaminari (1.2.2) activesupport (>= 4.1.0) - kaminari-actionview (= 1.2.1) - kaminari-activerecord (= 1.2.1) - kaminari-core (= 1.2.1) - kaminari-actionview (1.2.1) + kaminari-actionview (= 1.2.2) + kaminari-activerecord (= 1.2.2) + kaminari-core (= 1.2.2) + kaminari-actionview (1.2.2) actionview - kaminari-core (= 1.2.1) - kaminari-activerecord (1.2.1) + kaminari-core (= 1.2.2) + kaminari-activerecord (1.2.2) activerecord - kaminari-core (= 1.2.1) - kaminari-core (1.2.1) + kaminari-core (= 1.2.2) + kaminari-core (1.2.2) kramdown (1.17.0) launchy (2.5.0) addressable (~> 2.7) - letter_opener (1.7.0) - launchy (~> 2.2) - letter_opener_web (1.4.0) + letter_opener (1.8.1) + launchy (>= 2.2, < 3) + letter_opener_web (1.4.1) actionmailer (>= 3.2) letter_opener (~> 1.0) railties (>= 3.2) listen (3.5.1) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - lograge (0.11.2) + lograge (0.12.0) actionpack (>= 4) activesupport (>= 4) railties (>= 4) @@ -570,8 +574,8 @@ GEM nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) - marcel (0.3.3) - mimemagic (~> 0.3.2) + marcel (1.0.2) + matrix (0.4.2) mdl (0.5.0) kramdown (~> 1.12, >= 1.12.0) mixlib-cli (~> 1.7, >= 1.7.0) @@ -580,12 +584,9 @@ GEM mime-types (3.3.1) mime-types-data (~> 3.2015) mime-types-data (3.2021.0225) - mimemagic (0.3.10) - nokogiri (~> 1) - rake mini_magick (4.11.0) mini_mime (1.1.1) - mini_portile2 (2.5.1) + mini_portile2 (2.5.3) minitest (5.14.4) mixlib-cli (1.7.0) mixlib-config (2.2.18) @@ -593,18 +594,17 @@ GEM msgpack (1.4.2) multi_json (1.15.0) multi_xml (0.6.0) - multipart-post (2.1.1) mustache (1.1.1) netrc (0.11.0) - newrelic_rpm (7.0.0) + newrelic_rpm (7.1.0) nio4r (2.5.7) nobspw (0.6.2) - nokogiri (1.11.5) + nokogiri (1.11.7) mini_portile2 (~> 2.5.0) racc (~> 1.4) - oauth (0.5.6) - oauth2 (1.4.7) - faraday (>= 0.8, < 2.0) + oauth (0.5.10) + oauth2 (1.4.9) + faraday (>= 0.17.3, < 3.0) jwt (>= 1.0, < 3.0) multi_json (~> 1.3) multi_xml (~> 0.5) @@ -622,7 +622,7 @@ GEM omniauth-oauth (1.2.0) oauth omniauth (>= 1.0, < 3) - omniauth-oauth2 (1.7.1) + omniauth-oauth2 (1.7.2) oauth2 (~> 1.4) omniauth (>= 1.9, < 3) omniauth-rails_csrf_protection (0.1.2) @@ -631,34 +631,36 @@ GEM omniauth-twitter (1.4.0) omniauth-oauth (~> 1.1) rack - omniauth_openid_connect (0.3.1) - addressable (~> 2.5) - omniauth (~> 1.3) - openid_connect (~> 1.1) - openid_connect (1.3.0) + omniauth_openid_connect (0.8.0) + omniauth (>= 1.9, < 3) + openid_connect (~> 2.2) + openid_connect (2.3.1) activemodel attr_required (>= 1.0.0) - json-jwt (>= 1.5.0) - rack-oauth2 (>= 1.6.1) - swd (>= 1.0.0) + email_validator + faraday (~> 2.0) + faraday-follow_redirects + json-jwt (>= 1.16) + mail + rack-oauth2 (~> 2.2) + swd (~> 2.0) tzinfo - validate_email validate_url - webfinger (>= 1.0.1) + webfinger (~> 2.0) origami (2.1.0) colorize (~> 0.7) orm_adapter (0.5.0) paper_trail (10.3.1) activerecord (>= 4.2) request_store (~> 1.1) - parallel (1.20.1) - parser (3.0.1.1) + parallel (1.22.1) + parser (3.1.2.0) ast (~> 2.4.1) - passenger (6.0.8) + passenger (6.0.15) rack rake (>= 0.8.1) pg (1.1.4) - pg_search (2.3.5) + pg_search (2.3.6) activerecord (>= 5.2) activesupport (>= 5.2) premailer (1.15.0) @@ -668,36 +670,37 @@ GEM premailer-rails (1.11.1) actionmailer (>= 3) premailer (~> 1.7, >= 1.7.9) - public_suffix (4.0.6) - puma (5.3.1) + public_suffix (5.0.1) + puma (5.3.2) nio4r (~> 2.0) raabro (1.4.0) racc (1.5.2) rack (2.2.3) - rack-attack (6.5.0) + rack-attack (6.6.1) rack (>= 1.0, < 3) rack-cors (1.1.1) rack (>= 2.0.0) - rack-oauth2 (1.19.0) + rack-oauth2 (2.2.1) activesupport attr_required - httpclient + faraday (~> 2.0) + faraday-follow_redirects json-jwt (>= 1.11.0) rack (>= 2.1.0) rack-test (1.1.0) rack (>= 1.0, < 3) - rails (5.2.4.4) - actioncable (= 5.2.4.4) - actionmailer (= 5.2.4.4) - actionpack (= 5.2.4.4) - actionview (= 5.2.4.4) - activejob (= 5.2.4.4) - activemodel (= 5.2.4.4) - activerecord (= 5.2.4.4) - activestorage (= 5.2.4.4) - activesupport (= 5.2.4.4) + rails (5.2.6) + actioncable (= 5.2.6) + actionmailer (= 5.2.6) + actionpack (= 5.2.6) + actionview (= 5.2.6) + activejob (= 5.2.6) + activemodel (= 5.2.6) + activerecord (= 5.2.6) + activestorage (= 5.2.6) + activesupport (= 5.2.6) bundler (>= 1.3.0) - railties (= 5.2.4.4) + railties (= 5.2.6) sprockets-rails (>= 2.0.0) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) @@ -711,13 +714,13 @@ GEM rails-i18n (5.1.3) i18n (>= 0.7, < 2) railties (>= 5.0, < 6) - railties (5.2.4.4) - actionpack (= 5.2.4.4) - activesupport (= 5.2.4.4) + railties (5.2.6) + actionpack (= 5.2.6) + activesupport (= 5.2.6) method_source rake (>= 0.8.7) thor (>= 0.19.0, < 2.0) - rainbow (3.0.0) + rainbow (3.1.1) rake (13.0.3) ransack (2.1.1) actionpack (>= 5.0) @@ -734,9 +737,9 @@ GEM virtus (~> 1.0.5) wisper (>= 1.6.1) redcarpet (3.5.1) - redis (4.2.5) - regexp_parser (2.1.1) - request_store (1.5.0) + redis (4.3.1) + regexp_parser (2.5.0) + request_store (1.5.1) rack (>= 1.4) responders (3.0.1) actionpack (>= 5.0) @@ -751,9 +754,9 @@ GEM rspec-core (~> 3.9.0) rspec-expectations (~> 3.9.0) rspec-mocks (~> 3.9.0) - rspec-cells (0.3.5) + rspec-cells (0.3.7) cells (>= 4.0.0, < 6.0.0) - rspec-rails (< 5.0) + rspec-rails (< 6.0) rspec-core (3.9.3) rspec-support (~> 3.9.3) rspec-expectations (3.9.4) @@ -792,8 +795,8 @@ GEM rubocop (>= 0.68.1) ruby-ole (1.2.12.2) ruby-progressbar (1.11.0) - ruby2_keywords (0.0.4) - ruby_http_client (3.5.2) + ruby2_keywords (0.0.5) + ruby_http_client (3.5.5) rubyzip (2.3.0) rufus-scheduler (3.7.0) fugit (~> 1.1, >= 1.1.6) @@ -810,7 +813,7 @@ GEM selenium-webdriver (3.142.7) childprocess (>= 0.5, < 4.0) rubyzip (>= 1.2.2) - sendgrid-ruby (6.4.0) + sendgrid-ruby (6.6.2) ruby_http_client (~> 3.4) sentry-raven (3.1.2) faraday (>= 1.0) @@ -819,14 +822,14 @@ GEM connection_pool (>= 2.2.2) rack (~> 2.0) redis (>= 4.2.0) - sidekiq-scheduler (3.0.1) + sidekiq-scheduler (3.1.0) e2mmap redis (>= 3, < 5) rufus-scheduler (~> 3.2) sidekiq (>= 3) thwait tilt (>= 1.4.0) - sidekiq_alive (2.1.4) + sidekiq_alive (2.1.5) sidekiq webrick simplecov (0.18.5) @@ -835,10 +838,10 @@ GEM simplecov-cobertura (1.3.1) simplecov (~> 0.8) simplecov-html (0.12.3) - smart_properties (1.15.0) + smart_properties (1.17.0) social-share-button (1.2.4) coffee-rails - spreadsheet (1.2.9) + spreadsheet (1.3.0) ruby-ole spring (2.1.1) spring-watcher-listen (2.0.1) @@ -851,26 +854,27 @@ GEM babel-source (>= 5.8.11) babel-transpiler sprockets (>= 3.0.0) - sprockets-rails (3.2.2) - actionpack (>= 4.0) - activesupport (>= 4.0) + sprockets-rails (3.4.2) + actionpack (>= 5.2) + activesupport (>= 5.2) sprockets (>= 3.0.0) ssrf_filter (1.0.7) - swd (1.3.0) + swd (2.0.3) activesupport (>= 3) attr_required (>= 0.0.5) - httpclient (>= 2.4) + faraday (~> 2.0) + faraday-follow_redirects system_test_html_screenshots (0.1.2) actionpack (>= 5.2, < 6.0.a) temple (0.8.2) - terminal-table (3.0.1) + terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) thor (1.1.0) thread_safe (0.3.6) thwait (0.2.0) e2mmap tilt (2.0.10) - tomlrb (2.0.1) + tomlrb (2.0.3) truncato (0.7.11) htmlentities (~> 4.3.1) nokogiri (>= 1.7.0, <= 2.0) @@ -881,15 +885,12 @@ GEM execjs (>= 0.3.0, < 3) unf (0.1.4) unf_ext - unf_ext (0.0.7.7) + unf_ext (0.0.8.2) unicode-display_width (1.6.1) valid_email2 (2.3.1) activemodel (>= 3.2) mail (~> 2.5) - validate_email (0.1.6) - activemodel (>= 3.0) - mail (>= 2.2.5) - validate_url (1.0.13) + validate_url (1.0.15) activemodel (>= 3.0.0) public_suffix virtus (1.0.5) @@ -906,18 +907,19 @@ GEM activemodel (>= 5.0) bindex (>= 0.4.0) railties (>= 5.0) - webfinger (1.2.0) + webfinger (2.1.3) activesupport - httpclient (>= 2.4) + faraday (~> 2.0) + faraday-follow_redirects webmock (3.13.0) addressable (>= 2.3.6) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) webrick (1.7.0) - websocket-driver (0.7.3) + websocket-driver (0.7.5) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - wicked (1.3.4) + wicked (1.4.0) railties (>= 3.0.7) wicked_pdf (1.4.0) activesupport @@ -933,7 +935,7 @@ PLATFORMS DEPENDENCIES activerecord-session_store aws-sdk-s3 - bootsnap + bootsnap (= 1.7.5) byebug (~> 11.0) dalli dalli-elasticache @@ -944,6 +946,7 @@ DEPENDENCIES decidim-term_customizer! dotenv-rails faker (~> 1.9) + faraday (= 2.8.1) fog-aws health_check hiredis @@ -951,11 +954,11 @@ DEPENDENCIES listen (~> 3.1) lograge newrelic_rpm - omniauth_openid_connect (= 0.3.1) - openid_connect (~> 1.3) + omniauth_openid_connect (~> 0.8.0) passenger puma (>= 4.3) - rails (= 5.2.4.4) + rack-attack (~> 6.0) + rails (= 5.2.6) redis ruby-progressbar rubyzip @@ -972,7 +975,7 @@ DEPENDENCIES wkhtmltopdf-binary RUBY VERSION - ruby 2.6.5p114 + ruby 2.6.9p207 BUNDLED WITH - 2.2.17 + 2.2.24 diff --git a/app/assets/images/FranceConnect-Bouton/01-Principal/png/franceconnect-btn-principal-hover.png b/app/assets/images/FranceConnect-Bouton/01-Principal/png/franceconnect-btn-principal-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..25da7e8c147b7ba7835e17a3bf34724252f8cf1f GIT binary patch literal 4779 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 FV1nvLPn5Pu<)ku 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%0A}}@Zz=cpXK)msRFE9b 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 MRdwN&%J!K52P@9YcmMzZ literal 0 HcmV?d00001 diff --git a/app/assets/images/FranceConnect-Bouton/01-Principal/png/franceconnect-btn-principal.png b/app/assets/images/FranceConnect-Bouton/01-Principal/png/franceconnect-btn-principal.png new file mode 100644 index 0000000000000000000000000000000000000000..78b6966fb344b4345d8150128161cc0c40d123c2 GIT binary patch literal 5085 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/FranceConnect-Bouton/01-Principal/png/franceconnect-btn-principal@2x.png b/app/assets/images/FranceConnect-Bouton/01-Principal/png/franceconnect-btn-principal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b1405f7d5c58ee421a661b7486b414f60c8b1b GIT binary patch literal 9796 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 SYcfjog$7m7kgt-nfd3y%Bhsh< literal 0 HcmV?d00001 diff --git a/app/assets/images/FranceConnect-Bouton/01-Principal/svg/franceconnect-btn-principal-hover.svg b/app/assets/images/FranceConnect-Bouton/01-Principal/svg/franceconnect-btn-principal-hover.svg new file mode 100644 index 0000000..6369697 --- /dev/null +++ b/app/assets/images/FranceConnect-Bouton/01-Principal/svg/franceconnect-btn-principal-hover.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/assets/images/FranceConnect-Bouton/01-Principal/svg/franceconnect-btn-principal.svg b/app/assets/images/FranceConnect-Bouton/01-Principal/svg/franceconnect-btn-principal.svg new file mode 100644 index 0000000..a2f3785 --- /dev/null +++ b/app/assets/images/FranceConnect-Bouton/01-Principal/svg/franceconnect-btn-principal.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/assets/images/FranceConnect-Bouton/02-Alternatif/png/franceconnect-btn-alt-hover.png b/app/assets/images/FranceConnect-Bouton/02-Alternatif/png/franceconnect-btn-alt-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..358f95d9d6b35b4bd7b7ae2763e1987dbdfe8c6d GIT binary patch literal 5086 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 Ag#Z8m literal 0 HcmV?d00001 diff --git a/app/assets/images/FranceConnect-Bouton/02-Alternatif/png/franceconnect-btn-alt-hover@2x.png b/app/assets/images/FranceConnect-Bouton/02-Alternatif/png/franceconnect-btn-alt-hover@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..25fc63276056c6f5050c04ebfec9c87beae3d5a1 GIT binary patch literal 9735 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 pg&Kf3C`!;P-~Pn7{@>rA&h9m00i?#PZf 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/FranceConnect-Bouton/02-Alternatif/png/franceconnect-btn-alt@2x.png b/app/assets/images/FranceConnect-Bouton/02-Alternatif/png/franceconnect-btn-alt@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..125e8e028e2bd2ee6d6200d5d5022dd34e990356 GIT binary patch literal 10140 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 RP+~eXd1)o7GPq&D{{zrXMr8m1 literal 0 HcmV?d00001 diff --git a/app/assets/images/FranceConnect-Bouton/02-Alternatif/svg/franceconnect-btn-alt-hover.svg b/app/assets/images/FranceConnect-Bouton/02-Alternatif/svg/franceconnect-btn-alt-hover.svg new file mode 100644 index 0000000..fd1e827 --- /dev/null +++ b/app/assets/images/FranceConnect-Bouton/02-Alternatif/svg/franceconnect-btn-alt-hover.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/assets/images/FranceConnect-Bouton/02-Alternatif/svg/franceconnect-btn-alt.svg b/app/assets/images/FranceConnect-Bouton/02-Alternatif/svg/franceconnect-btn-alt.svg new file mode 100644 index 0000000..a08a877 --- /dev/null +++ b/app/assets/images/FranceConnect-Bouton/02-Alternatif/svg/franceconnect-btn-alt.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/assets/images/FranceConnect-Bouton/03-Desactive/png/franceconnect-btn-desactive.png b/app/assets/images/FranceConnect-Bouton/03-Desactive/png/franceconnect-btn-desactive.png new file mode 100644 index 0000000000000000000000000000000000000000..6ea0412aba816d608339981596f28ec1ee707704 GIT binary patch literal 4713 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/FranceConnect-Bouton/03-Desactive/png/franceconnect-btn-desactive@2x.png b/app/assets/images/FranceConnect-Bouton/03-Desactive/png/franceconnect-btn-desactive@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a1bea570a3679141f516b5f3c469ba467504d715 GIT binary patch literal 9348 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 z%0AObJ5#t%|86sNG+r$Z|GI`>OnZJ9toQPLhZdE^!n>kl%^y2b2UMlLI)Z8F`3bXD z>sJOGwX&4ters)d!jOw*XtQEo|Lt6Y)hBtX_&7m3ZuMDF%VPq+SRrdfN{A9|RFg^f zdyDPCZ^zChM`19=Vdvdrh@W4BxZ~H=`MR}zu`j1J)R?PGZ%mJ+b7RS6u#Dm+#G?7K zHuKQ&?7^xdu{#-nL8%~ML`|xVx?z)nP>}FDojslWxlzmud_<*}d3H&M6Y9wcd$mR3 zwHR@rv=%`HxJ^TN$ob(JCz&J6c=t@E@BC` zmeju>yXlW))Kxw3KQ$8*ZcG;1Dhv(Mb~*($2q{$%bAHUbp31 zw5eCjQzi?Iu+xA%TzkigY?RZ_jbx^3ZAQ1u9IiXzdz3*|n3a#n34eLJ999MSO1n#H zQhx|ho5kjj)B>iyUn24qxyA3Svj3uiA@3YU(){CnoRP6h`p+Km69|i4J`i1h!sW1` z_>h~X-rmDKCIxwd3=_ZIqkFW^tS=W8Kl=;f8}isa0#Zz3|80G|>!VhWt41+!x$hg# zfyGAh0i+X5&S4(~orUn`ZbtLanjdb}Js!#oi7@+SD-|BH3%P^&vEevVw>}SZi&r5?BDN&W*UIgQ2(o{aT zwJO z8AS$SZl#cVE{hJ#z!D-uhcc>>jHGlK>e^kO=VlNqaM4crlqpN1!Uc$ZUHdOFgg5gb zb8NbGyIezAl-%@;o9b35&{LSt19Zv}YSBv&YB6zb6ctEzMJMtcuMlZ3@m|N?t3x9& zOtg@T%V2iufhOK>E%kMa=JyEGqyW|nWzik_chs~KQaVR`=SS52U_NcWW{#q(37JX@ zbv%%O_tj1JoETe7(#fLPRexdeZa>q6F@lH--sn~S#?VgT#=Av?Zz4Lr@Do)vb0vv} z3ful2HCH4wjWufV*@!{uI;j9iD+pSOyzV4V-*p{}A&_^uD0?-OdOaHa59ERF&=v!BAEasNhH31asB1doC9tJO7Vfr$y8XdfaNX%NO$w!x69jn4=z(S zmdzX8V}*2XQQ|CoQ`!M=m?W;*8k-~f#WJ>ru}p^PR9LXosjpt~)g%i#IcHOvr zPvIRlz6{WI!45#@L;H!gUdzK={bdb-h0$F2jP6)u==Mf6()^DJH9Ddp!z;XD+=XzSdM2 zQAd1UZ5MHC_`C|>W_|KDb5};^AYMqFFTP>XoSs#s$LC3Yx=v0HvxdQ6?8c|8)HQ4b z6-0g3!VC;CI+|nn;*}IKZI(pDrMWLWx8kRRp~QO&ZP8JB`NK4m%!)Pc;yUuYudo*W%n-{lEao5K5$xu0tjxuvR(yRwGy;q3dp9}Z z|9w)8Nd>^$JxyvkoM#p|sHBq*@=esqC3Iztui9p(!9Vtky&b?~z*145f(|+z?o17j z{J1n&l~C#u6fQjdOUp1Qn@XTa5X&5pztc+slQu-oJoBqv8}jx~k!9iMFo}3Z@rBMG zSkn5c4l-dDe$Vg%gYqp$=C-mmadW%kzh#~0QZE7i?X(d3&EKTt3H>|F%CMwUtHi?9n9W~Mw14ks_Z>Qmkmg^OdhYr-b z(rS!%;RAoK-IvpiKuei*@O9%RPWvkIwr>7sYXx|{=V^-`oJ*RxF`WO6TY>82t`V5A&Ehl&zR3}HjMlwB^m9{37&$of7me+}Q0vd=7wg?{F zSWGM9v2MwgXS($L%#dMPpbpxTUXku5a;o%Z-LAq2Iy^fi@FO^$7OpjQ9@4ijbAZgn zb@DT-Nux6^?@rG=&<)OX0fLdklvzoXPr-0w?G3M%u~pye74-P{J2%Qmcx+TZ>6{Vk zLz2nLd84yWn}$`YX&wWv1Huq{gguINJ6?aDWBX(Ib<`B zTDoIm))wHYF~{JmFxQ034G-#dc%me%;)#k3!$yAIf|{`Zm}*%Sv+)2U>FvFY?D4c7T(*39W=U|^2l2M*GbPNk8j0Fn&z^e=byAwnT=AdJf@1|7f4 z2)8d!w2FyZW(M_ZHC<{_3baoos~yQk3d!X!V5yza)1x2nMsSRVYdozBaJxCL#^kfN z3aEeMe0S2uo#_4*eLIu#AV6E+$h8*BKmDucs=_D?=4GDVCtbP0X+Q>sLL+Q&5k2O# z*9Nk+38?Q<^j0@S7;HWuvZpql<+^}UU+zmdcNiGX{6KR-(mIB7QAhju0aT!tufxOn zc5TOG{ayr;|E%x0Kx8~X<~HsPU5HT&(|({JG=0S1)x9Xj9B$NfQAjXJkJV#vN>#x< zxARqP7hX4mS0ttXR#DJp1z}KiGNzQ>uHIE)5~xfSQ3K9&@};rZO;wry5`WVN1`DVH zZlO@^LV~Dz_5$uHtluW1HtOYNB3MuJmmqTHbMS%^ph^v1%FSF<mm}|5K@dX{|$``Ip9-BFS;4BI*{n9 zRR>qzdtqBa3VNtl_HuI7ctS(McZpm|v((~b6-+DzYlDYX^%~17z^E1E*9Ym1dA;x@ zF`*CEt@NUPcguSn*8VcO9q(uFRfpV!958}A4!4_a*MO~2jWV4 zC3d*A>anDtCk+A>dDem-Nf@A4M+>AYU!wuch!>_Io1XDtz?+By;2EaG?cQ;{&CGx; z$Kq{+st-B+~KUm+H?UFbhe5fDi=+oU5>&s*IN$@4SnI4|Go81 zCu`AL+HDM5EagP$8R8^zM0J@6UYpx$A%=eRtX}W!P=OWU~SzTXJ#C=H0aR|>;=(Gg8@v?~wm!!QB=y<^EbYBfASE*H^ntN(Be^O#hL(ReDYnA9)*_ zc2;R#Q)mRB|6gh~R(wHAoxpM%XTX2ieptT)6~$#ne+}UqcH6;y^!#6jd_M=W1nBhP z)B%~~6!^REOvEQ7r>Up#vLg(8GBprWz|g%P)C{Gxn6 z@t{Y*p@G^pP=Wn-Gv0rC703l`GAUtHLyqR_P@!*&18$-rZ}@v3$Nu=H@=@Lz1Ezh( z!_PaZ$GnhgD+K^!KjK9lu41e!k7V4VG*3eIe?0(9iyku3{wWyBz#fLiPm2ur=jS_% p$UYW?g);wlg3SLbx90wZE>k4Zylin6LQHDHs#{{ezDL&*RD literal 0 HcmV?d00001 diff --git a/app/assets/images/FranceConnect-Bouton/03-Desactive/svg/franceconnect-btn-desactive.svg b/app/assets/images/FranceConnect-Bouton/03-Desactive/svg/franceconnect-btn-desactive.svg new file mode 100644 index 0000000..57b3cfa --- /dev/null +++ b/app/assets/images/FranceConnect-Bouton/03-Desactive/svg/franceconnect-btn-desactive.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/assets/stylesheets/decidim.scss b/app/assets/stylesheets/decidim.scss index 6aa8ffd..6a576d3 100644 --- a/app/assets/stylesheets/decidim.scss +++ b/app/assets/stylesheets/decidim.scss @@ -223,6 +223,9 @@ $navbar-background: darken( $title-bar-background, 10%); } } +// ------------------------------------------------------------------ +// SIGNUP / SIGNIN / PROFILE + .button--social { margin: 0 auto; white-space: nowrap; @@ -263,40 +266,6 @@ $navbar-background: darken( $title-bar-background, 10%); .button--label b { white-space: nowrap; } - - // .sessions & { - // &.button--social { - // margin: 0 auto; - // - // height: 2.8em; - // margin-bottom: 1rem; - // - // .button--social__icon { - // display: block; - // float: left; - // padding: .35em .5em; - // height: 2.5em; - // - // .icon { - // width: 2em; - // height: 2em; - // } - // } - // - // .button--label { - // display: block; - // padding-top: 0.6em; - // text-align: center; - // line-height: 1.5rem; - // - // b { - // font-size: 1.2rem; - // } - // } - // } - // } - - } .button--social--custom { @@ -306,8 +275,20 @@ $navbar-background: darken( $title-bar-background, 10%); background-color: transparent; max-width: 282px; + img.button--is-hover { + display: none; + } + &:hover, &:focus { background-color: transparent; + filter: none; + + img.button--has-hover { + display: none; + } + img.button--is-hover { + display: inline-block; + } } } @@ -522,3 +503,4 @@ main.anonymous { display: block; margin: 0 auto; } + diff --git a/config/environments/production.rb b/config/environments/production.rb index 5744702..e02073d 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -85,16 +85,22 @@ # Use default logging formatter so that PID and timestamp are not suppressed. config.log_formatter = ::Logger::Formatter.new - config.action_mailer.smtp_settings = { - address: Rails.application.secrets.smtp_address, - port: Rails.application.secrets.smtp_port, - authentication: Rails.application.secrets.smtp_authentication, - user_name: Rails.application.secrets.smtp_username, - password: Rails.application.secrets.smtp_password, - domain: Rails.application.secrets.smtp_domain, - enable_starttls_auto: Rails.application.secrets.smtp_starttls_auto, - openssl_verify_mode: "none" - } + if ENV.fetch("ENABLE_LETTER_OPENER", "0") == "1" + config.action_mailer.delivery_method = :letter_opener_web + config.action_mailer.default_url_options = { port: 3000 } + else + config.action_mailer.delivery_method = :smtp + config.action_mailer.smtp_settings = { + address: Rails.application.secrets.smtp_address, + port: Rails.application.secrets.smtp_port, + authentication: Rails.application.secrets.smtp_authentication, + user_name: Rails.application.secrets.smtp_username, + password: Rails.application.secrets.smtp_password, + domain: Rails.application.secrets.smtp_domain, + enable_starttls_auto: Rails.application.secrets.smtp_starttls_auto, + openssl_verify_mode: "none" + } + end config.action_mailer.default_options = { "X-Mailjet-TrackOpen" => 0, diff --git a/config/initializers/extends.rb b/config/initializers/extends.rb index ddc9dcd..64eaf32 100644 --- a/config/initializers/extends.rb +++ b/config/initializers/extends.rb @@ -10,3 +10,4 @@ require "extends/destroy_account_extend" require "extends/create_omniauth_registration_extend" require "extends/update_account_extend" +require "extends/openid_connect/access_token_extends" diff --git a/config/initializers/omniauth.rb b/config/initializers/omniauth.rb index ee017bb..8335a63 100644 --- a/config/initializers/omniauth.rb +++ b/config/initializers/omniauth.rb @@ -3,6 +3,8 @@ require "omniauth/strategies/france_connect_uid" require "omniauth/strategies/france_connect_profile" +OmniAuth.config.logger = Rails.logger + Rails.application.config.middleware.use OmniAuth::Builder do OmniAuth.config.logger = Rails.logger omniauth_config = Rails.application.secrets.dig(:omniauth) @@ -11,10 +13,10 @@ provider( :france_connect_uid, setup: setup_provider_proc(:france_connect_uid, - site: :site, + issuer: :site, client_id: :client_id, client_secret: :client_secret, - end_session_endpoint: :end_session_endpoint, + post_logout_redirect_uri: :post_logout_redirect_uri, icon_path: :icon_path, button_path: :button_path, provider_name: :provider_name, @@ -26,10 +28,10 @@ provider( :france_connect_profile, setup: setup_provider_proc(:france_connect_profile, - site: :site, + issuer: :site, client_id: :client_id, client_secret: :client_secret, - end_session_endpoint: :end_session_endpoint, + post_logout_redirect_uri: :post_logout_redirect_uri, icon_path: :icon_path, button_path: :button_path, provider_name: :provider_name, @@ -37,56 +39,3 @@ ) end end - -# if Rails.application.secrets.dig(:omniauth, :france_connect_uid).present? && Rails.application.secrets.dig(:omniauth, :france_connect_uid, :enabled) -# ::Devise.setup do |config| -# config.omniauth :france_connect_uid, { -# name: "france_connect_uid", -# issuer: "https://" + Rails.application.secrets.dig(:omniauth, :france_connect_uid, :host), -# scope: [:openid], -# client_signing_alg: :HS256, -# client_auth_method: :body, -# acr_values: "eidas1" , -# client_options: { -# host: Rails.application.secrets.dig(:omniauth, :france_connect_uid, :host), -# authorization_endpoint: '/api/v1/authorize', -# token_endpoint: '/api/v1/token', -# userinfo_endpoint: '/api/v1/userinfo', -# jwks_uri: '/api/v1/jwk', -# end_session_endpoint: '/api/v1/logout', -# identifier: Rails.application.secrets.dig(:omniauth, :france_connect_uid, :identifier), -# secret: Rails.application.secrets.dig(:omniauth, :france_connect_uid, :secret), -# redirect_uri: Rails.application.secrets.dig(:omniauth, :france_connect_uid, :redirect_uri) -# } -# } -# end -# -# Decidim::User.omniauth_providers << :france_connect_uid -# end -# -# if Rails.application.secrets.dig(:omniauth, :france_connect_profile).present? && Rails.application.secrets.dig(:omniauth, :france_connect_profile, :enabled) -# ::Devise.setup do |config| -# config.omniauth :france_connect_profile, { -# name: "france_connect_profile", -# issuer: "https://" + Rails.application.secrets.dig(:omniauth, :france_connect_profile, :host), -# # scope: [:openid, :email, :given_name, :family_name, :preferred_username, :birthdate], -# scope: [:openid, :email, :given_name, :family_name, :birthdate], -# client_signing_alg: :HS256, -# client_auth_method: :body, -# acr_values: "eidas1" , -# client_options: { -# host: Rails.application.secrets.dig(:omniauth, :france_connect_profile, :host), -# authorization_endpoint: '/api/v1/authorize', -# token_endpoint: '/api/v1/token', -# userinfo_endpoint: '/api/v1/userinfo', -# jwks_uri: '/api/v1/jwk', -# end_session_endpoint: '/api/v1/logout', -# identifier: Rails.application.secrets.dig(:omniauth, :france_connect_profile, :identifier), -# secret: Rails.application.secrets.dig(:omniauth, :france_connect_profile, :secret), -# redirect_uri: Rails.application.secrets.dig(:omniauth, :france_connect_profile, :redirect_uri) -# } -# } -# end -# -# Decidim::User.omniauth_providers << :france_connect_profile -# end diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 9cfcd16..a761b2e 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -230,10 +230,12 @@ fr: link: https://franceconnect.gouv.fr/ text: Qu'est-ce-que FranceConnect ? france_connect_profile: - explanation: ' Pour déposer une pétition
L''auteur d''une pétition ne peut être anonyme.

Toutefois, le Sénat ne récupère, via l''authentification FranceConnect, que les informations suivantes :
nom, prénom(s), date de naissance, adresse électronique et identifiant technique.
Les noms et prénoms des auteurs de pétition sont publiés avec la pétition.
Les autres éléments ne sont pas rendus publics.

' + # explanation: ' Pour déposer une pétition
L''auteur d''une pétition ne peut être anonyme.

Toutefois, le Sénat ne récupère, via l''authentification FranceConnect, que les informations suivantes :
nom, prénom(s), date de naissance, adresse électronique et identifiant technique.
Les noms et prénoms des auteurs de pétition sont publiés avec la pétition.
Les autres éléments ne sont pas rendus publics.

' + explanation:

Pour déposer une pétition

FranceConnect est la solution proposée par l'État pour sécuriser et simplifier la connexion à vos services en ligne.

france_connect_uid: anonymous_user: Authentifié(e) avec
FranceConnect - explanation: "Pour signer une pétition
La connexion via FranceConnect permet de conserver votre anonymat (aucune donnée personnelle n'est récupérée), tout en garantissant qu'une pétition n'est signée qu'une seule fois par une même personne physique." + # explanation: "Pour signer une pétition
La connexion via FranceConnect permet de conserver votre anonymat (aucune donnée personnelle n'est récupérée), tout en garantissant qu'une pétition n'est signée qu'une seule fois par une même personne physique." + explanation:

Pour signer une pétition

FranceConnect est la solution proposée par l'État pour sécuriser et simplifier la connexion à vos services en ligne.

pages: index: title: Pages d'aide @@ -276,19 +278,21 @@ fr: organizations: omniauth_settings: france_connect_profile: + button_hover_path: Chemin de l'image du bouton de survol button_path: Chemin de l'image du bouton client_id: ID client client_secret: Clé secrète - end_session_endpoint: Endpoint de déconnexion minimum_age: Age minimum + post_logout_redirect_uri: Endpoint de retour de déconnexion (Decidim) provider_name: Nom du service site: URL principale du service france_connect_uid: + button_hover_path: Chemin de l'image du bouton de survol button_path: Chemin de l'image du bouton client_id: ID client client_secret: Clé secrète - end_session_endpoint: Endpoint de déconnexion minimum_age: Age minimum + post_logout_redirect_uri: Endpoint de retour de déconnexion (Decidim) provider_name: Nom du service site: URL principale du service verifications: diff --git a/config/routes.rb b/config/routes.rb index ce4681c..e2470cd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,7 +4,7 @@ require "sidekiq-scheduler/web" Rails.application.routes.draw do - mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? + mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? || ENV.fetch("ENABLE_LETTER_OPENER", "0") == "1" authenticate :admin do mount Sidekiq::Web => "/sidekiq" diff --git a/config/secrets.yml b/config/secrets.yml index 887e2a7..9d7f646 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -26,27 +26,28 @@ default: &default bucket_name: <%= ENV["SCALEWAY_BUCKET_NAME"] %> omniauth: france_connect_uid: - enabled: true - icon_path: "france-connect-logo.svg" - button_path: "FCboutons-10@2x.png" - provider_name: "FranceConnect \"Signataire\"" - site: <%= ENV["FRANCE_CONNECT_UID_SITE"] %> - client_id: <%= ENV["FRANCE_CONNECT_UID_CLIENT_ID"] %> - client_secret: <%= ENV["FRANCE_CONNECT_UID_CLIENT_SECRET"] %> + enabled: <%= ENV["OMNIAUTH_FRANCE_CONNECT_UID_ENABLED"]&.to_i || 0 %> + icon_path: <%= ENV["OMNIAUTH_FRANCE_CONNECT_UID_ICON_PATH"] %> + button_path: <%= ENV["OMNIAUTH_FRANCE_CONNECT_UID_BUTTON_PATH"] %> + button_hover_path: <%= ENV["OMNIAUTH_FRANCE_CONNECT_UID_BUTTON_HOVER_PATH"] %> + provider_name: <%= ENV["OMNIAUTH_FRANCE_CONNECT_UID_PROVIDER_NAME"] %> + site: <%= ENV["OMNIAUTH_FRANCE_CONNECT_UID_SITE"] %> + client_id: <%= ENV["OMNIAUTH_FRANCE_CONNECT_UID_CLIENT_ID"] %> + client_secret: <%= ENV["OMNIAUTH_FRANCE_CONNECT_UID_CLIENT_SECRET"] %> end_session_endpoint: <%= ENV["OMNIAUTH_FRANCE_CONNECT_UID_END_SESSION_ENDPOINT"] %> + post_logout_redirect_uri: <%= ENV["OMNIAUTH_FRANCE_CONNECT_UID_POST_LOGOUT_REDIRECT_URI"] %> minimum_age: <%= ENV["OMNIAUTH_FRANCE_CONNECT_UID_MINIMUM_AGE"] %> - # redirect_uri: "https://decidim.local.osp.cat/users/auth/france_connect_uid/callback" france_connect_profile: - enabled: true - icon_path: "france-connect-logo.svg" - button_path: "FCboutons-10@2x.png" - provider_name: "FranceConnect \"Auteur\"" - site: <%= ENV["FRANCE_CONNECT_PROFILE_SITE"] %> - client_id: <%= ENV["FRANCE_CONNECT_PROFILE_CLIENT_ID"] %> - client_secret: <%= ENV["FRANCE_CONNECT_PROFILE_CLIENT_SECRET"] %> - end_session_endpoint: <%= ENV["OMNIAUTH_FRANCE_CONNECT_PROFILE_END_SESSION_ENDPOINT"] %> + enabled: <%= ENV["OMNIAUTH_FRANCE_CONNECT_PROFILE_ENABLED"]&.to_i || 0 %> + icon_path: <%= ENV["OMNIAUTH_FRANCE_CONNECT_PROFILE_ICON_PATH"] %> + button_path: <%= ENV["OMNIAUTH_FRANCE_CONNECT_PROFILE_BUTTON_PATH"] %> + button_hover_path: <%= ENV["OMNIAUTH_FRANCE_CONNECT_PROFILE_BUTTON_HOVER_PATH"] %> + provider_name: <%= ENV["OMNIAUTH_FRANCE_CONNECT_PROFILE_PROVIDER_NAME"] %> + site: <%= ENV["OMNIAUTH_FRANCE_CONNECT_PROFILE_SITE"] %> + client_id: <%= ENV["OMNIAUTH_FRANCE_CONNECT_PROFILE_CLIENT_ID"] %> + client_secret: <%= ENV["OMNIAUTH_FRANCE_CONNECT_PROFILE_CLIENT_SECRET"] %> + post_logout_redirect_uri: <%= ENV["OMNIAUTH_FRANCE_CONNECT_PROFILE_POST_LOGOUT_REDIRECT_URI"] %> minimum_age: <%= ENV["OMNIAUTH_FRANCE_CONNECT_PROFILE_MINIMUM_AGE"] %> - # redirect_uri: "https://decidim.local.osp.cat/users/auth/france_connect_profile/callback" geocoder: here_app_id: <%= ENV["HERE_APP_ID"] %> here_app_code: <%= ENV["HERE_APP_CODE"] %> diff --git a/lib/extends/openid_connect/access_token_extends.rb b/lib/extends/openid_connect/access_token_extends.rb new file mode 100644 index 0000000..3f92709 --- /dev/null +++ b/lib/extends/openid_connect/access_token_extends.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +module AccessTokenExtends + extend ActiveSupport::Concern + + included do + def userinfo!(params = {}) + response = resource_request do + get client.userinfo_uri, params + end + + if response.is_a?(Hash) + ::OpenIDConnect::ResponseObject::UserInfo.new response.with_indifferent_access + else + response + end + end + + private + + def resource_request + res = yield + case res.status + when 200 + res.body + when 400 + raise BadRequest.new("API Access Failed", res) + when 401 + raise Unauthorized.new("Access Token Invalid or Expired", res) + when 403 + raise Forbidden.new("Insufficient Scope", res) + else + raise HttpError.new(res.status, "Unknown HttpError", res) + end + end + end +end + +OpenIDConnect::AccessToken.class_eval do + include(AccessTokenExtends) +end diff --git a/lib/omniauth/strategies/france_connect.rb b/lib/omniauth/strategies/france_connect.rb index fb03a05..7bf66e2 100644 --- a/lib/omniauth/strategies/france_connect.rb +++ b/lib/omniauth/strategies/france_connect.rb @@ -11,7 +11,14 @@ class FranceConnect < OmniAuth::Strategies::OpenIDConnect option :site option :client_id option :client_secret - option :end_session_endpoint + # option :end_session_endpoint + + option :scope, %w(openid email preferred_username) + option :client_signing_alg, :ES256 + option :discovery, true + option :response_type, "code" + option :client_auth_method, "basic" + option :uid_field, "sub" option :scope, [:openid, :email, :preferred_username] option :client_signing_alg, :HS256 @@ -43,40 +50,50 @@ def auth_hash end def end_session_uri - return if client_options.end_session_endpoint.blank? + return unless end_session_endpoint_is_valid? - end_session_uri = URI(options.issuer + client_options.end_session_endpoint) + end_session_uri = URI(client_options.end_session_endpoint) end_session_uri.query = URI.encode_www_form( id_token_hint: credentials[:id_token], - state: session_state, - post_logout_redirect_uri: "#{full_host}/users/auth/#{options.name}/logout" + state: new_state, + post_logout_redirect_uri: options.post_logout_redirect_uri ) end_session_uri.to_s end - private + def user_info + return @user_info if @user_info + + if access_token.id_token + decoded = decode_id_token(access_token.id_token).raw_attributes - def issuer - options.site + response = access_token.userinfo! + response = decode_id_token(response) if response.is_a?(String) + + log :debug, "Userinfo response: #{response.raw_attributes.to_h}" + + @user_info = ::OpenIDConnect::ResponseObject::UserInfo.new response.raw_attributes.merge(decoded).deep_symbolize_keys + else + @user_info = access_token.userinfo! + end end + private + def client_options - site_url = URI(options.site) + site_url = URI(options.issuer) - client_options = { + options.client_options.merge( host: site_url.host, port: site_url.port, identifier: options.client_id, secret: options.client_secret, - authorization_endpoint: "/api/v1/authorize", - token_endpoint: "/api/v1/token", - userinfo_endpoint: "/api/v1/userinfo", - jwks_uri: "/api/v1/jwk" - } - - client_options[:end_session_endpoint] = options.end_session_endpoint if options.end_session_endpoint.present? - - options.client_options.merge client_options + authorization_endpoint: "/api/v2/authorize", + token_endpoint: "/api/v2/token", + userinfo_endpoint: "/api/v2/userinfo", + jwks_uri: "/api/v2/jwks", + end_session_endpoint: "#{options.issuer}/session/end" + ) end def redirect_uri diff --git a/lib/omniauth/strategies/france_connect_profile.rb b/lib/omniauth/strategies/france_connect_profile.rb index 814c921..83c5aa1 100644 --- a/lib/omniauth/strategies/france_connect_profile.rb +++ b/lib/omniauth/strategies/france_connect_profile.rb @@ -6,7 +6,7 @@ module OmniAuth module Strategies class FranceConnectProfile < OmniAuth::Strategies::FranceConnect option :name, :france_connect_profile - option :scope, [:email, :openid, :birthdate, :given_name, :family_name] + option :scope, %w(openid email given_name family_name birthdate) info do { diff --git a/lib/omniauth/strategies/france_connect_uid.rb b/lib/omniauth/strategies/france_connect_uid.rb index 8948331..265e53a 100644 --- a/lib/omniauth/strategies/france_connect_uid.rb +++ b/lib/omniauth/strategies/france_connect_uid.rb @@ -7,7 +7,7 @@ module OmniAuth module Strategies class FranceConnectUid < OmniAuth::Strategies::FranceConnect option :name, :france_connect_uid - option :scope, [:openid] + option :scope, %w(openid birthdate) info do { From d3aca2545361fa63578522ba3f19df397f4b4934 Mon Sep 17 00:00:00 2001 From: moustachu Date: Mon, 22 Sep 2025 14:05:55 +0200 Subject: [PATCH 02/10] fix: FranceConnect acr_values param --- lib/omniauth/strategies/france_connect.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/omniauth/strategies/france_connect.rb b/lib/omniauth/strategies/france_connect.rb index 7bf66e2..13c42a8 100644 --- a/lib/omniauth/strategies/france_connect.rb +++ b/lib/omniauth/strategies/france_connect.rb @@ -39,10 +39,6 @@ def find_name user_info.preferred_username.presence || user_info.family_name end - def authorize_uri - super + (options.acr_values.present? ? "&acr_values=#{options.acr_values}" : "") - end - def auth_hash hash = super hash.logout = end_session_uri From 1f6b62955654e1a9585446f28210b8d95e762312 Mon Sep 17 00:00:00 2001 From: moustachu Date: Tue, 23 Sep 2025 10:04:48 +0200 Subject: [PATCH 03/10] fix: FC v2 algorythm --- lib/omniauth/strategies/france_connect.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/omniauth/strategies/france_connect.rb b/lib/omniauth/strategies/france_connect.rb index 13c42a8..6c551f8 100644 --- a/lib/omniauth/strategies/france_connect.rb +++ b/lib/omniauth/strategies/france_connect.rb @@ -19,10 +19,6 @@ class FranceConnect < OmniAuth::Strategies::OpenIDConnect option :response_type, "code" option :client_auth_method, "basic" option :uid_field, "sub" - - option :scope, [:openid, :email, :preferred_username] - option :client_signing_alg, :HS256 - option :client_auth_method, :body option :acr_values, "eidas1" info do From a5e7932546695579acaf323d6da7959739167994 Mon Sep 17 00:00:00 2001 From: moustachu Date: Mon, 29 Sep 2025 11:40:43 +0200 Subject: [PATCH 04/10] Add hover state for omniauth buttons --- app/views/decidim/devise/shared/_omniauth_buttons.html.erb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/views/decidim/devise/shared/_omniauth_buttons.html.erb b/app/views/decidim/devise/shared/_omniauth_buttons.html.erb index 0c94137..4454cc5 100644 --- a/app/views/decidim/devise/shared/_omniauth_buttons.html.erb +++ b/app/views/decidim/devise/shared/_omniauth_buttons.html.erb @@ -13,7 +13,12 @@