From 52a5c7f5c6dc9dd8d7188c0f435e3507313b1192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= <sebastien.gaya@gmail.com> Date: Thu, 5 May 2022 10:58:58 +0200 Subject: [PATCH] get email from sso mapping method --- app/models/user/with_omniauth.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/models/user/with_omniauth.rb b/app/models/user/with_omniauth.rb index 586b98e9d..f4a6e3fd1 100644 --- a/app/models/user/with_omniauth.rb +++ b/app/models/user/with_omniauth.rb @@ -7,10 +7,8 @@ module User::WithOmniauth mapping = university.sso_mapping || [] # first step: we find the email (we are supposed to have an email mapping) - email_sso_key = mapping.detect { |elmt| elmt['internal_key'] == 'email' }&.dig('sso_key') - email = attributes.dig(email_sso_key) + email = get_email_from_mapping(mapping, attributes) return unless email - email = email.first if email.is_a?(Array) user = User.where(university: university, email: email.downcase).first_or_create do |u| u.password = "#{Devise.friendly_token[0,20]}!" # meets password complexity requirements @@ -27,6 +25,13 @@ module User::WithOmniauth protected + def self.get_email_from_mapping(mapping, attributes) + email_sso_key = mapping.detect { |elmt| elmt['internal_key'] == 'email' }&.dig('sso_key') + email = attributes.dig(email_sso_key) + email = email.first if email.is_a?(Array) + email + end + def self.update_data_for_mapping_element(user, mapping_element, attributes) sso_key = mapping_element['sso_key'] return user if attributes[sso_key].nil? # if not provided by sso, just return -- GitLab