From 240d52700a2e6782fdc6a20709d7c237f743ca1b Mon Sep 17 00:00:00 2001 From: Maddie Kasula Date: Fri, 14 Sep 2018 15:09:14 -0700 Subject: [PATCH] Format response from Microsoft into expected auth.info format --- .../controllers/omniauth_callbacks_controller.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/dashboard/app/controllers/omniauth_callbacks_controller.rb b/dashboard/app/controllers/omniauth_callbacks_controller.rb index 13b27a4c7ab90..0eaf11ae505c2 100644 --- a/dashboard/app/controllers/omniauth_callbacks_controller.rb +++ b/dashboard/app/controllers/omniauth_callbacks_controller.rb @@ -65,6 +65,11 @@ def login auth_hash = extract_powerschool_data(request.env["omniauth.auth"]) end + # Microsoft formats email and name differently, so update it to match expected structure + if provider == AuthenticationOption::MICROSOFT + auth_hash = extract_microsoft_data(request.env["omniauth.auth"]) + end + @user = User.from_omniauth(auth_hash, auth_params) # Set user-account locale only if no cookie is already set. @@ -134,6 +139,16 @@ def extract_powerschool_data(auth) auth end + def extract_microsoft_data(auth) + auth_info = auth.info.merge(OmniAuth::AuthHash.new( + email: auth[:extra][:raw_info][:userPrincipalName], + name: auth[:extra][:raw_info][:displayName] + ) + ) + auth.info = auth_info + auth + end + # Clever/Powerschool signins have unique requirements, and must be handled a bit outside the normal flow def handle_untrusted_email_signin(user, provider) force_takeover = user.teacher? && user.email.present? && user.email.end_with?('.oauthemailalreadytaken')