Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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
            });
        }