protected String EnvironmentsAvailable(Mercury.Server.Public.Interfaces.Security.Credentials credentials) { StringBuilder selectStatement = new StringBuilder(); String environments = String.Empty; String environmentName = String.Empty; selectStatement.Append("SELECT * FROM EnvironmentAccess JOIN Environment ON EnvironmentAccess.EnvironmentId = Environment.EnvironmentId WHERE SecurityAuthorityId = " + credentials.SecurityAuthorityId.ToString()); selectStatement.Append(" AND SecurityGroupId IN ("); foreach (String currentGroup in credentials.Groups) { selectStatement.Append("'" + currentGroup + "', "); } selectStatement.Append("'') ORDER BY EnvironmentName, IsGranted DESC, IsDenied DESC"); environments = ";"; foreach (System.Data.DataRow currentRow in application.EnterpriseDatabase.SelectDataTable(selectStatement.ToString()).Rows) { environmentName = (String)currentRow ["EnvironmentName"]; if ((Boolean)currentRow["IsGranted"]) { environments = environments + environmentName + ";"; } if (((Boolean)currentRow["IsDenied"]) && (environments.Contains(environmentName))) { environments = environments.Replace(";" + environmentName + ";", ";"); } } // foreach (System.Data.DataRow currentRow in application.EnterpriseDatabase.SelectDataTable (selectStatement.ToString ()).Rows) environments = environments.Substring(1, environments.Length - 1); if ((environments != String.Empty) && (environments.Substring(environments.Length - 1) == ";")) { environments = environments.Substring(0, environments.Length - 1); } return(environments); }
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; }
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); }
protected void SetAuthenticationError(Mercury.Server.Security.AuthenticationResponse authenticationResponse, Mercury.Server.Public.Interfaces.Security.Credentials credentials) { authenticationResponse.AuthenticationError = credentials.AuthenticationError; if (credentials.AuthenticationException != null) { authenticationResponse.AuthenticationException = credentials.AuthenticationException; } return; }
public Session(Application application, Mercury.Server.Public.Interfaces.Security.Credentials credentials) { Security.SecurityAuthority securityAuthority = application.SecurityAuthorityGet(credentials.SecurityAuthorityId); securityAuthorityId = securityAuthority.Id; securityAuthorityName = securityAuthority.Name; securityAuthorityType = securityAuthority.SecurityAuthorityType; userAccountId = credentials.UserAccountId; userAccountName = credentials.UserAccountName; userDisplayName = credentials.UserDisplayName; groupMembership = credentials.Groups; environmentId = application.EnvironmentGet(credentials.Environment).Id; environmentName = credentials.Environment; roleMembership = application.EnvironmentRoleMembershipListGet(environmentId, securityAuthorityId, groupMembership); enterprisePermissionSet = application.EnterprisePermissionsGet(securityAuthorityId, groupMembership); environmentPermissionSet = application.EnvironmentPermissionsGet(environmentName, securityAuthorityId, roleMembership); List <Core.Work.DataViews.WorkQueuePermission> viewWorkQueuePermissions = application.WorkQueuePermissionsForUserByEnvironment(securityAuthorityId, userAccountId, environmentName); foreach (Core.Work.DataViews.WorkQueuePermission currentPermission in viewWorkQueuePermissions) { workQueuePermissions.Add(currentPermission.WorkQueueId, currentPermission.Permission); } workTeamMembership = new Dictionary <long, Core.Work.WorkTeamMembership> (); foreach (Core.Work.WorkTeamMembership currentMembership in application.WorkTeamMembershipsForUserByEnvironment(securityAuthorityId, userAccountId, environmentName)) { workTeamMembership.Add(currentMembership.WorkTeamId, currentMembership); } token = (String)application.EnterpriseDatabase.LookupValue("(SELECT NEWID () AS Token) AS GenerateToken", "CAST (Token AS VARCHAR (60)) AS Token", ""); SerializeToDatabase(application); System.Diagnostics.Trace.WriteLineIf(application.TraceSwitchSecurity.TraceVerbose, "** SESSION (BEGIN) **"); if (application.TraceSwitchSecurity.TraceVerbose) { foreach (String currentGroup in groupMembership) { System.Diagnostics.Trace.WriteLine("Group Membership: " + currentGroup); } foreach (String currentRole in roleMembership) { System.Diagnostics.Trace.WriteLine("Role Membership: " + currentRole); } foreach (String currentEnterprisePermission in enterprisePermissionSet) { System.Diagnostics.Trace.WriteLine("Enterprise Permission: " + currentEnterprisePermission); } foreach (String currentEnvironmentPermission in environmentPermissionSet) { System.Diagnostics.Trace.WriteLine("Environment Permission: " + currentEnvironmentPermission); } foreach (Core.Work.DataViews.WorkQueuePermission currentPermission in viewWorkQueuePermissions) { System.Diagnostics.Trace.WriteLine("Work Queue Permission: " + currentPermission.Name + " (" + currentPermission.Permission.ToString() + ")"); } } System.Diagnostics.Trace.WriteLineIf(application.TraceSwitchSecurity.TraceVerbose, "** SESSION ( END ) **"); return; }