protected void SetProviderCredentials(String accountType, Mercury.Server.Security.SecurityAuthority securityAuthority, Mercury.Server.Public.Interfaces.Security.Credentials credentials) { String userContext; switch (accountType.ToLower()) { case "provider": userContext = securityAuthority.ProviderContext; break; case "member": userContext = securityAuthority.MemberContext; break; default: userContext = securityAuthority.AssociateContext; break; } credentials.SecurityAuthorityId = securityAuthority.Id; credentials.SecurityAuthorityName = securityAuthority.Name; credentials.Protocol = securityAuthority.Protocol; credentials.Domain = securityAuthority.Domain; credentials.Context = userContext; if (securityAuthority.AgentName != String.Empty) { credentials.SetAgentCredentials(securityAuthority.AgentName, securityAuthority.AgentPassword); } if (securityAuthority.ServerName != String.Empty) { credentials.ServerName = securityAuthority.ServerName; } return; }
public Mercury.Server.Security.AuthenticationResponse Authenticate(String securityAuthorityName, String accountType, String accountName, String password, String newPassword, String environment) { Mercury.Server.Security.AuthenticationResponse authenticationResponse = new AuthenticationResponse(); Mercury.Server.Public.Interfaces.Security.Credentials credentials = new Public.Interfaces.Security.Credentials("", "", "", accountName, password, newPassword); Mercury.Server.Security.SecurityAuthority securityAuthority = application.SecurityAuthorityGet(securityAuthorityName); Mercury.Server.Security.Providers.ActiveDirectory.Provider activeDirectoryProvider; Mercury.Server.Session session = null; if (securityAuthority == null) { authenticationResponse.AuthenticationError = Mercury.Server.Public.Interfaces.Security.Enumerations.AuthenticationError.SecurityAuthorityError; authenticationResponse.AuthenticationException = new Exception("Unable to retreive Security Authority information from the database.", application.LastException); return(authenticationResponse); } SetProviderCredentials(accountType, securityAuthority, credentials); activeDirectoryProvider = new Providers.ActiveDirectory.Provider(credentials); authenticationResponse.IsAuthenticated = activeDirectoryProvider.Authenticate(); if (authenticationResponse.IsAuthenticated) { session = CreateSession(securityAuthority, authenticationResponse, credentials, environment); } SetAuthenticationError(authenticationResponse, credentials); return(authenticationResponse); }
protected Mercury.Server.Session CreateSession(Mercury.Server.Security.SecurityAuthority securityAuthority, Mercury.Server.Security.AuthenticationResponse authenticationResponse, Mercury.Server.Public.Interfaces.Security.Credentials credentials, String environmentName) { Mercury.Server.Session session = null; Mercury.Server.Environment.Environment environment = null; Boolean connectionSuccess = false; if (!authenticationResponse.IsAuthenticated) { return(null); } if (environmentName != String.Empty) { environment = application.EnvironmentGet(environmentName); Mercury.Server.Data.SqlDatabase environmentDatabase = null; if (environment != null) { environmentDatabase = new Mercury.Server.Data.SqlDatabase(environment.SqlConfiguration); connectionSuccess = environmentDatabase.Connect(); } if (!connectionSuccess) { if (environmentDatabase != null) { application.SetLastException(environmentDatabase.LastException); } authenticationResponse.IsAuthenticated = false; authenticationResponse.Environments = EnvironmentsAvailable(credentials); credentials.AuthenticationError = Mercury.Server.Public.Interfaces.Security.Enumerations.AuthenticationError.MustSelectEnvironment; credentials.AuthenticationException = new Exception("Unable to connect to requested environment."); return(null); } } // empty environment or environment selection not allowed for user if ((environmentName == String.Empty) || (!((";" + EnvironmentsAvailable(credentials) + ";").Contains(";" + environmentName + ";"))) || (environment == null)) { authenticationResponse.IsAuthenticated = false; authenticationResponse.Environments = EnvironmentsAvailable(credentials); credentials.AuthenticationError = Mercury.Server.Public.Interfaces.Security.Enumerations.AuthenticationError.MustSelectEnvironment; } else { credentials.Environment = environmentName; authenticationResponse.IsAuthenticated = true; authenticationResponse.AuthenticationError = Mercury.Server.Public.Interfaces.Security.Enumerations.AuthenticationError.NoError; session = application.CreateSession(credentials); authenticationResponse.Token = session.Token; authenticationResponse.SecurityAuthorityId = session.SecurityAuthorityId; authenticationResponse.SecurityAuthorityName = session.SecurityAuthorityName; authenticationResponse.SecurityAuthorityType = session.SecurityAuthorityType; authenticationResponse.EnvironmentId = environment.Id; authenticationResponse.EnvironmentName = environment.Name; authenticationResponse.ConfidentialityStatement = environment.ConfidentialityStatement; authenticationResponse.UserAccountId = session.UserAccountId; authenticationResponse.UserAccountName = session.UserAccountName; authenticationResponse.UserDisplayName = session.UserDisplayName; authenticationResponse.GroupMembership = session.GroupMembership; authenticationResponse.RoleMembership = session.RoleMembership; authenticationResponse.EnterprisePermissionSet = session.EnterprisePermissionSet; authenticationResponse.EnvironmentPermissionSet = session.EnvironmentPermissionSet; authenticationResponse.WorkQueuePermissions = session.WorkQueuePermissions; authenticationResponse.WorkTeamMembership = session.WorkTeamMembership; } return(session); }