diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 75c5394d..32061bbd 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -8,6 +8,20 @@ def create redirect_to user_path user end + def create_developer # rubocop: disable Metrics/AbcSize + user = User.find_or_create_by!( + email: params[:email] + ) do |u| + u.firstname = params[:firstname] + u.lastname = params[:lastname] + u.room = params[:room] + end + user.groups = params[:groups].split(',') + log_in user + flash[:success] = 'You are now logged in (using developer method)!' + redirect_to user + end + def destroy log_out flash[:success] = 'You are now logged out!' diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb index 3c58ed8f..4c95e856 100644 --- a/app/views/layouts/_header.html.erb +++ b/app/views/layouts/_header.html.erb @@ -26,6 +26,15 @@ 'aria-label': "Log in", data: { turbo: false } ) %> + <% if Rails.env.development? %> + <%= button_to( + "Login (developer)", + "/auth/developer", + class: "login_button", + 'aria-label': "Log in (developer)", + data: { turbo: false } + ) %> + <% end %> <% else %> <%= button_to( "Logout", diff --git a/config/initializers/omniauth.rb b/config/initializers/omniauth.rb index d667188a..bade59e6 100644 --- a/config/initializers/omniauth.rb +++ b/config/initializers/omniauth.rb @@ -1,17 +1,9 @@ # frozen_string_literal: true Rails.application.config.middleware.use OmniAuth::Builder do - if Rails.env.production? - client_options = { - identifier: Rails.application.credentials.sso_id!, - secret: Rails.application.credentials.sso_secret!, - redirect_uri: "https://lea5.rezoleo.fr/#{AUTH_CALLBACK_PATH}" - } - elsif Rails.env.development? - client_options = { - identifier: Rails.application.credentials.sso_id!, - secret: Rails.application.credentials.sso_secret!, - redirect_uri: "http://127.0.0.1:3000/#{AUTH_CALLBACK_PATH}" + if Rails.env.development? + provider :developer, { + fields: [:firstname, :lastname, :email, :room, :groups] } end @@ -25,6 +17,22 @@ issuer: 'https://auth.rezoleo.fr/realms/rezoleo', discovery: true, pkce: true, - client_options: client_options + client_options: oidc_client_options } end + +def oidc_client_options + if Rails.env.production? + { + identifier: Rails.application.credentials.sso_id!, + secret: Rails.application.credentials.sso_secret!, + redirect_uri: "https://lea5.rezoleo.fr/#{AUTH_CALLBACK_PATH}" + } + elsif Rails.env.development? + { + identifier: Rails.application.credentials.sso_id!, + secret: Rails.application.credentials.sso_secret!, + redirect_uri: "http://127.0.0.1:3000/#{AUTH_CALLBACK_PATH}" + } + end +end diff --git a/config/routes.rb b/config/routes.rb index 88c0d3f2..f41275d2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,6 +3,10 @@ Rails.application.routes.draw do # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html get AUTH_CALLBACK_PATH, to: 'sessions#create', as: 'auth_callback' + if Rails.env.development? + get '/auth/developer/callback', to: 'sessions#create_developer', as: 'auth_callback_developer' + end + delete '/logout', to: 'sessions#destroy', as: 'logout' root 'static_pages#home'