/// <summary> /// Handle sign-in with LinkedIn. /// </summary> /// <param name="request"></param> /// <returns></returns> private LinkedInSignInViewModel HandleLinkedInSignIn(LinkedInSignInRequest request) { var viewModel = new LinkedInSignInViewModel(); if (SitefinityHelper.IsUserLoggedIn()) { return(viewModel); } if (!LinkedInHelper.IsValidState(request.State)) { viewModel.Error = "The response from LinkedIn is in invalid state. Please go back and try again."; return(viewModel); } var redirectUrl = LinkedInHelper.CreateSignInRedirectUrl(request.Redirect, request.Data); try { var accessTokenResponse = LinkedInHelper.GetAccessTokenFromAuthorisationCode(request.Code, redirectUrl); if (string.IsNullOrEmpty(accessTokenResponse.Error)) { if (!CreateUserFromLinkedInProfileData(accessTokenResponse.AccessToken)) { viewModel.Error = "There was some problem while sign-in. Please go back and try again."; } } else { viewModel.Error = accessTokenResponse.Error; } } catch (Exception err) { viewModel.Error = "There was some problem during authentication with LinkedIn. Please go back and try again."; Log.Write(err); } return(viewModel); }
/// <summary> /// Action to handle LinkedIn sign-in. /// </summary> /// <param name="request"></param> /// <returns></returns> public ActionResult LinkedInSignIn(LinkedInSignInRequest request) { LinkedInSignInViewModel viewModel; string urlReferral = null; if (TempData["source"] != null) { urlReferral = TempData["source"].ToString(); } if (string.IsNullOrEmpty(request.Error)) { viewModel = HandleLinkedInSignIn(request); if (viewModel.Error == null) { TempData["Urlreferal"] = urlReferral; // try to redirect to the last page if (!string.IsNullOrWhiteSpace(request.Redirect)) { if (request.Redirect == LinkedInHelper.ActionJobApply) { if (int.TryParse(request.Data, out int jobId)) { return(Redirect(GetJobApplicationUrl(jobId, "ShowLinkedIn=1"))); } } else { var uriBuilder = new UriBuilder(request.Redirect); var query = HttpUtility.ParseQueryString(uriBuilder.Query); query["ShowLinkedIn"] = "1"; uriBuilder.Query = query.ToString(); return(Redirect(uriBuilder.ToString())); } } // redirect to home page return(Redirect("/")); } } else { if (request.Error == "user_cancelled_login" || request.Error == "user_cancelled_authorize") { // try to redirect to the last page. if (!string.IsNullOrWhiteSpace(request.Redirect)) { TempData["Urlreferal"] = urlReferral; if (request.Redirect == LinkedInHelper.ActionJobApply) { if (int.TryParse(request.Data, out int jobId)) { return(Redirect(GetJobApplicationUrl(jobId))); } } else { return(Redirect(request.Redirect)); } } } viewModel = new LinkedInSignInViewModel { Error = request.ErrorDescription ?? Request.QueryString.Get("error_description") }; } // set the back url based on the action. // this will handle the unexpected errors. if (request.Redirect == LinkedInHelper.ActionJobApply) { if (int.TryParse(request.Data, out int jobId)) { viewModel.BackUrl = GetJobApplicationUrl(jobId); } } return(View(viewModel)); }