/// <summary> /// Synchronizes the child users. /// </summary> /// <param name="userID">The user ID.</param> /// <param name="groupID">The group ID.</param> public void SynchronizeChildUsers(long userID, long groupID) { if (userID <= 0) { return; } try { string newSSOAuthToken; SSOAuth_UserBasicData[] userBasicDataList = SSOAuthWS.GetGroupUsers(GetSSOAuthData(FCMConfig.Security.SSOApplicationID, SSOAuthToken), out newSSOAuthToken); SSOAuthToken = newSSOAuthToken; if (userBasicDataList == null) { return; } foreach (SSOAuth_UserBasicData userBasicData in userBasicDataList) { if (userBasicData.RoleID.ToLower() != "child") { continue; } bool synchronised = DbProvidersWS.SynchronizeChildUser(ValidationUtils.GetLong(userBasicData.UserID, 0), userBasicData.Username, userID, groupID, userBasicData.Deleted) == 1; if (!synchronised) { Logger.Log(LogLevels.Info, string.Format("Child user synchronize error | childUserID:'{0}', username:'******', parentID='{2}' groupID:'{3}'", userBasicData.UserID, userBasicData.Username, userID, groupID)); } } } catch (Exception ex) { Logger.Log(LogLevels.Error, string.Format("userID:'{0}', groupID:'{1}'", userID, groupID), ex); } }
/// <summary> /// Reads the user. /// </summary> /// <param name="user">The user.</param> /// <param name="userData">The user data.</param> /// <param name="companyData">The company data.</param> /// <param name="masterUserData">The master user data.</param> /// <param name="groupID">The group ID.</param> private static bool ReadUser(ref User user, WebApps_UserData userData, WebApps_CompanyData companyData, WebApps_UserData masterUserData, int groupID) { if (userData == null && companyData == null) { return(false); } try { bool isSuperUser = masterUserData == null; if (userData != null) { user = new User(ValidationUtils.GetLong(userData.UserID, 0), userData.Username, isSuperUser ? 0 : ValidationUtils.GetLong(masterUserData.UserID, 0), ValidationUtils.GetLong(groupID, 0), userData.Email, userData.Firstname, userData.Lastname, userData.Address.AddressName, userData.Address.HouseNumber, userData.Address.ZIP, userData.Address.City, userData.Telephone, userData.MSISDN, userData.OIB, string.Empty, string.Empty, false, userData.DefaultCulture, string.Empty, null); if (companyData != null && isSuperUser) { user.CompanyName = companyData.CompanyName; user.PersonalID = companyData.OIB; user.CompanyMB = companyData.MB; user.Address = companyData.Address.AddressName; user.HouseNumber = companyData.Address.HouseNumber; user.PostalCode = companyData.Address.ZIP; user.Place = companyData.Address.City; user.Telephone = companyData.Telephone; user.IsBusinessUser = true; } user.IsSuperUser = isSuperUser; } return(true); } catch (Exception ex) { Logger.Log(LogLevels.Error, exception: ex); return(false); } }
/// <summary> /// Wap login. /// </summary> /// <param name="username">The username.</param> /// <param name="password">The password.</param> public User WapLogin(string username, string password) { if (StringUtils.IsNullOrEmptyOrWS(username) || StringUtils.IsNullOrEmptyOrWS(password)) { return(null); } try { string culture = CultureHelper.GetCulture(); byte[] passwordHash = EncryptionUtils.ComputeMD5Hash(string.Format("{0}/{1}", password, username.ToLower())); string passwordHashString = Convert.ToBase64String(passwordHash); string sessionToken; WebApps_UserData userData; WebApps_UserData masterUserData; WebApps_CompanyData companyData; int groupID; WebApps_ApplicationRole[] applicationRolesDataList; string headerHTML; string footerHTML; WebApps_Message[] messageDataList; bool passwordExpired; bool loggedOn = WebAppsLauncherWS.LogonUser(GetSSOWebAppsLauncherAuthData(), culture, username, passwordHashString, out sessionToken, out userData, out masterUserData, out companyData, out groupID, out applicationRolesDataList, out headerHTML, out footerHTML, out messageDataList, out passwordExpired); WebAppsToken = sessionToken; if (!loggedOn) { Logger.Log(LogLevels.Debug, string.Format("User not logged in! | username:'******'", username)); return(null); } User user = null; if (!ReadUser(ref user, userData, companyData, masterUserData, groupID)) { 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(FCMConfig.Project.DefaultName + ".LastSSOSessionRefreshTime", DateTimeHelper.GetSvcProvDateTimeNow()); return(user); } catch (SoapException ex) { Logger.Log(LogLevels.Error, string.Format("username:'******'", username), ex); if (!StringUtils.IsNullOrEmptyOrWS(ex.Message) && ex.Message.Contains("00401")) { FCMBusiness.ClearSSOCache(); return(WapLogin(username, password)); } return(null); } catch (Exception ex) { Logger.Log(LogLevels.Error, string.Format("username:'******'", username), ex); return(null); } }
/// <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); } }