Beispiel #1
0
        /// <summary>
        /// Verifies the SSO auth token.
        /// </summary>
        /// <param name="applicationID">The application ID.</param>
        /// <param name="ssoAuthToken">The sso auth token.</param>
        /// <param name="headerHTML">The header HTML.</param>
        /// <param name="footerHTML">The footer HTML.</param>
        public User VerifySSOAuthToken(string applicationID, string ssoAuthToken, out string headerHTML,
                                       out string footerHTML)
        {
            headerHTML = "";
            footerHTML = "";

            if (StringUtils.IsNullOrEmptyOrWS(applicationID) ||
                StringUtils.IsNullOrEmptyOrWS(ssoAuthToken))
            {
                return(null);
            }

            try
            {
                string            sessionCulture;
                string            newSSOAuthToken;
                string[]          allowedApplicationIDs;
                SSOAuth_Message[] messageDataList;
                string            roleID;
                int groupID;
                SSOAuth_UserData    userData;
                SSOAuth_UserData    masterUserData;
                SSOAuth_CompanyData companyData;

                bool verified = SSOAuthWS.VerifyTokenAndGetNew(GetSSOAuthData(applicationID, ssoAuthToken), out sessionCulture,
                                                               out newSSOAuthToken, out allowedApplicationIDs, out headerHTML,
                                                               out footerHTML, out messageDataList, out roleID, out groupID,
                                                               out userData, out masterUserData, out companyData);

                SSOAuthToken = newSSOAuthToken;

                if (!verified)
                {
                    Logger.Log(LogLevels.Debug, string.Format("User not verified! | applicationID:'{0}', ssoAuthToken:'{1}'",
                                                              applicationID, ssoAuthToken));

                    return(null);
                }

                User user = null;

                if (!ReadUser(ref user, userData, companyData, masterUserData, roleID, groupID, allowedApplicationIDs))
                {
                    return(null);
                }

                if (!user.IsSuperUser)
                {
                    SynchronizeUser(ValidationUtils.GetLong(masterUserData.UserID, 0), masterUserData.Username, -666, user.ProvisioningGroupID, user.Firstname, user.Lastname, user.Place);
                }

                bool synchronised = SynchronizeUser(user.UserID, user.Username, user.ParentID, user.ProvisioningGroupID, user.Firstname, user.Lastname, user.Place);


                if (!synchronised)
                {
                    Logger.Log(LogLevels.Debug, string.Format("User not synchronized! | user.UserID:'{0}'", user.UserID));
                    return(null);
                }

                if (user.IsChildUser)
                {
                    user.ChildUserID = user.UserID;
                    user.UserID      = user.ParentID;
                }

                UserID = user.UserID;

                SessionUtils.SetValue(SessionHelper.BuildSessionKey("LastSSOSessionRefreshTime"), DateTimeHelper.GetSvcProvDateTimeNow());
                return(user);
            }
            catch (SoapException ex)
            {
                Logger.Log(LogLevels.Error, string.Format("applicationID:'{0}'", applicationID), ex);

                if (!StringUtils.IsNullOrEmptyOrWS(ex.Message) && ex.Message.Contains("00401"))
                {
                    FCMBusiness.ClearSSOCache();
                    return(VerifySSOAuthToken(applicationID, ssoAuthToken, out headerHTML, out footerHTML));
                }

                return(null);
            }
            catch (Exception ex)
            {
                Logger.Log(LogLevels.Error, string.Format("applicationID:'{0}'", ssoAuthToken), ex);
                return(null);
            }
        }