private Organisation GetActiveOrganisation(string email, out List <Organisation> organisations) { organisations = _getOrganisationsByEmailAddressCommand.Invoke(new GetOrganisationsByEmailAddressRequest { EmailAddress = email, }).Organisations.Where(o => o.Status != OrganisationStatus.Suspended).ToList(); var sessionOrganisationId = _cookieManager.Get(CoreConstants.OrganisationIdCookieKey); var organisation = sessionOrganisationId.IsNullOrEmpty() ? organisations.FirstOrDefault() : organisations.FirstOrDefault(o => o.Id == Organisation.GetId(sessionOrganisationId)); if (organisation == null) { _cookieManager.Set(CoreConstants.OrganisationIdCookieKey, string.Empty, DateTime.UtcNow.AddDays(-1)); return(organisations.FirstOrDefault()); } _cookieManager.Set(CoreConstants.OrganisationIdCookieKey, organisation.FriendlyId, DateTime.UtcNow.AddMonths(1)); return(organisation); }
public AuthenticateUserResponse Invoke(AuthenticateUserRequest request) { Trace("Starting..."); ArgumentValidation.NotEmpty(request.Email, "request.Email"); ArgumentValidation.NotEmpty(request.Password, "request.Password"); var response = _getOrganisationsByEmailAddressCommand.Invoke(new GetOrganisationsByEmailAddressRequest { EmailAddress = request.Email, }); if (response.UserMapping == null || response.UserMapping.Password != request.Password.Hash() || response.Organisations == null) { return(new AuthenticateUserResponse { Status = AuthenticateUserStatus.LoginFailed }); } var organisations = response.Organisations.Where(o => o.Status != OrganisationStatus.Suspended).ToList(); if (!organisations.Any()) { Trace("org inactive"); return(new AuthenticateUserResponse { Status = AuthenticateUserStatus.OrganisationInactive }); } var organisation = organisations.Count > 1 && request.OrganisationId.IsNullOrEmpty() ? organisations.First() : organisations.FirstOrDefault(o => o.Id == Organisation.GetId(request.OrganisationId)) ?? organisations.First(); Session.SetOrganisation(organisation); Trace("Getting user {0} from org {1} with pwdhash {2}", request.Email, organisation.Id, request.Password.Hash()); var user = Session.Raven.Query <User, Indexing.Users>().FirstOrDefault(u => u.Email == request.Email.ToLowerInvariant()); ; if (user != null) { if (!response.UserMapping.Status.Equals(UserStatus.Active)) { Trace("account inactive"); return(new AuthenticateUserResponse { Status = AuthenticateUserStatus.AccountInactive }); } return(new AuthenticateUserResponse { UserId = user.Id, OrganisationId = user.OrganisationId, Status = AuthenticateUserStatus.Ok }); } return(new AuthenticateUserResponse { Status = AuthenticateUserStatus.LoginFailed }); }
public ResetPasswordResponse Invoke(ResetPasswordRequest request) { Trace("Starting..."); ArgumentValidation.NotEmpty(request.Email, "request.Email"); var response = _getOrganisationsByEmailAddressCommand.Invoke(new GetOrganisationsByEmailAddressRequest { EmailAddress = request.Email, }); if (response.Organisations == null || response.UserMapping == null) { return(new ResetPasswordResponse { Status = ResetPasswordStatus.InvalidEmail, }); } var mapping = Session.MasterRaven.Query <UserOrganisationMapping>().FirstOrDefault(m => m.EmailAddress == request.Email); if (mapping == null) { return(new ResetPasswordResponse { Status = ResetPasswordStatus.InvalidEmail }); } if (response.Organisations.All(o => o.Status == OrganisationStatus.Suspended)) { return(new ResetPasswordResponse { Status = ResetPasswordStatus.OrganisationSuspended }); } var organisation = response.Organisations.First(); Session.SetOrganisation(organisation); var user = Session.Raven.Query <User, Indexing.Users>().FirstOrDefault(u => u.Email == request.Email); if (user == null) { return(new ResetPasswordResponse { Status = ResetPasswordStatus.InvalidEmail }); } mapping.PasswordToken = Guid.NewGuid(); _sendNotificationCommand.Invoke(new SendNotificationRequest { EmailInfo = new ResetPasswordEmailInfo { To = user.Email, Token = _encryptor.Encrypt("{0}|{1}".FormatWith(mapping.PasswordToken, user.Email)).Base64Encode(), UserName = user.FirstName }, OrganisationId = organisation.Id, Organisation = organisation, }); return(new ResetPasswordResponse { Status = ResetPasswordStatus.Ok }); }