public async Task <VsfUser> GetUserByCredentials(string userLogin, string userPassword)
        {
            var user = await _appUserManager.FindAsync(userLogin, userPassword);

            if (user == null || !user.IsApproved)
            {
                return(null);
            }

            return(QuicksilverUserModelMapper.MapToVsfModel(user));
        }
        public async Task <bool> UpdateUser(string userId, VsfUser updatedUser)
        {
            var user = await _appUserManager.FindByIdAsync(userId);

            user.UserName = updatedUser.Email;
            user.Email    = updatedUser.Email;

            var identity = await _appUserManager.UpdateAsync(user);

            if (!identity.Succeeded)
            {
                LogDebugErrors("UpdateUser failed", identity.Errors);
                return(false);
            }

            return(QuicksilverUserModelMapper.UpdateCustomerContact(this, userId, updatedUser));
        }
        public async Task <VsfUser> CreateUser(UserCreateModel newUser)
        {
            var appUser = new SiteUser
            {
                Id             = Guid.NewGuid().ToString(),
                Username       = newUser.Customer.Email,
                Email          = newUser.Customer.Email,
                EmailConfirmed = false,
                IsLockedOut    = false,
                IsApproved     = true,
                CreationDate   = DateTime.UtcNow
            };

            var result = await _appUserManager.CreateAsync(appUser, newUser.Password);

            if (!result.Succeeded)
            {
                LogDebugErrors("CreateUser failed", result.Errors);
                return(null);
            }

            var newContact = CustomerContact.CreateInstance();

            newContact.PrimaryKeyId = new PrimaryKeyId(new Guid(appUser.Id));

            /* Before it was email here, this is incorrect as epi server looks for customer contact every time the request is authorized (see BusinessFoundationInitializeModule).
             * In this module epi will look for customercontact bu user Id that is set in principal.Name. SInce we set email here before it was not found and there were concurrency exceptions
             * since when epi does not find a contactCustomer, it tries to create it and save to database in GET METHOD in every async request - WTF!!!*/
            newContact.UserId = "String:" + appUser.Id;
            newContact.AcceptMarketingEmail = false;
            newContact.FirstName            = newUser.Customer.FirstName;
            newContact.LastName             = newUser.Customer.LastName;
            newContact.Email = newUser.Customer.Email;
            newContact.SaveChanges();

            var user = await _appUserManager.FindByIdAsync(appUser.Id);

            return(QuicksilverUserModelMapper.MapToVsfModel(user));
        }
        public async Task <VsfUser> GetUserById(string userId)
        {
            var user = await _appUserManager.FindByIdAsync(userId);

            return(QuicksilverUserModelMapper.MapToVsfModel(user));
        }