public SessionInfo Login(string userName, string password, string appName)
{
if (string.IsNullOrEmpty(userName))
throw new ArgumentException(SR.UserIDIsEmpty);
if (string.IsNullOrEmpty(password))
throw new ArgumentException(SR.PasswordIsEmpty);
Platform.CheckForEmptyString(password, "password");
Platform.CheckForEmptyString(appName, "appName");
SessionInfo session = null;
Platform.GetService(
delegate(IAuthenticationService service)
{
try
{
var request = new InitiateSessionRequest(userName, appName,
Dns.GetHostName(), password)
{
GetAuthorizations = true
};
InitiateSessionResponse response = service.InitiateSession(request);
if (response != null)
{
var credentials = new LoginCredentials
{
UserName = userName,
DisplayName = response.DisplayName,
SessionToken = response.SessionToken,
Authorities = response.AuthorityTokens,
DataAccessAuthorityGroups = response.DataGroupOids,
EmailAddress = response.EmailAddress
};
var user = new CustomPrincipal(new CustomIdentity(userName, response.DisplayName), credentials);
Thread.CurrentPrincipal = user;
session = new SessionInfo(user);
session.User.WarningMessages = response.WarningMessages;
SessionCache.Instance.AddSession(response.SessionToken.Id, session);
LoginServiceAuditLog.AuditSuccess(userName, response.DisplayName, response.SessionToken.Id);
Platform.Log(LogLevel.Info, "{0} has successfully logged in.", userName);
}
}
catch (FaultException<PasswordExpiredException> ex)
{
throw ex.Detail;
}
catch (FaultException<UserAccessDeniedException> ex)
{
LoginServiceAuditLog.AuditFailure(userName);
throw ex.Detail;
}
catch (FaultException<RequestValidationException> ex)
{
throw ex.Detail;
}
}
);
return session;
}