Пример #1
0
        // Todo: switch to mine if Leye doesn't respond
        private async Task AssignDefaultPermission(ImanageUser user, string role)
        {
            //var customerPermission = ((Permission[])Enum.GetValues(typeof(Permission)))
            //        .Where(p => p.GetPermissionCategory() == role)
            //        .Select(item => item);

            var permissionFromRole = PermisionProvider
                                     .GetSystemDefaultRoles()
                                     .Where(x => x.Key == role).SelectMany(x => x.Value);

            await AssignPermissionsToUser(permissionFromRole.ToList(), user.Id);
        }
Пример #2
0
        private async Task <List <ValidationResult> > CreateIdentityUser(ImanageUser user)
        {
            string password   = Utils.GenerateRandom(6).ToUpper();
            var    userResult = await _userManager.CreateAsync(user, password);

            if (!userResult.Succeeded)
            {
                results.Add(new ValidationResult(userResult.Errors.FirstOrDefault().Description));
                return(results);
            }

            return(results);
        }
Пример #3
0
        private async Task <List <ValidationResult> > CreateUserType(SetupUserViewModel userViewModel,
                                                                     ImanageUser user,
                                                                     UserTypes userType)
        {
            if (userType == UserTypes.LandLord)
            {
                if (userViewModel.Role != (int)UserRoles.LandLord)
                {
                    results.Add(new ValidationResult("Partner can only be assigned basic user role."));
                    await ReverseUserCreated(user);

                    return(results);
                }
            }

            return(results);
        }
Пример #4
0
        public async Task <List <ValidationResult> > Send2FAToken(ImanageUser user)
        {
            if (user == null)
            {
                results.Add(new ValidationResult($"User not found"));
                return(results);
            }

            var isTwoFactoreEnabled = user.TwoFactorEnabled;
            var code = await _userManager.GenerateTwoFactorTokenAsync(user, "Phone2FA");

            await SendMessage("sms", BusMessageTypes.USER_MSG, new UserEmailTokenViewModel
            {
                Code      = code,
                User      = user,
                EmailType = EmailTypeEnum.UserPhoneActivation
            });

            return(results);
        }
        public async Task <List <ValidationResult> > CreateTruckOwnerUser(EstateManagerSetUpUser model)
        {
            _logger.Log(LogLevel.Debug, "Creating new Truck Owner User", model);
            Enum.TryParse(typeof(UserTypes), model.UserType.ToString(), out object userType);
            try
            {
                var user = new ImanageUser()
                {
                    UserName    = model.Email,
                    FirstName   = model.Name,
                    MiddleName  = model.Name,
                    LastName    = model.Name,
                    Gender      = 1,
                    Email       = model.Email,
                    UserType    = (UserTypes)userType,
                    PhoneNumber = model.PhoneNumber
                };
                var status = await CreateIdentityUser(user);

                if (status.Any())
                {
                    return(status);
                }

                //Create new Account
                var account = new Account
                {
                    Name         = model.Name,
                    Address      = model.Address,
                    PhoneNumber  = model.PhoneNumber,
                    PhoneNumber2 = model.PhoneNumber2,
                    Website      = model.Website,
                    Email        = model.Email,
                    CAC          = model.CAC,
                    NIN          = model.NIN,
                    AccountType  = Enums.AccountType.EstateManagementCompany,
                    Status       = Enums.AccountStatus.PendingVerification,
                    User_Id      = user.Id
                };
                var status2 = await AddAsync(account);

                model.AccountId = account.Id.ToString();
                //Add Claims
                await _userManager.AddClaimAsync(user, new System.Security.Claims.Claim(ClaimTypesHelper.AccountId, account.Id.ToString()));

                //await _producerClient.Produce("new_truck_owner", new BusMessage
                //{
                //    BusMessageType = (int)BusMessageTypes.NEW_TRUCK_OWNER,
                //    Data = JsonConvert.SerializeObject(model)
                //});

                await _userManager.UpdateAsync(user);

                //send Password Reset Email
                await _userService.RequestPasswordReset(user.Email);

                return(results);
            }
            catch (Exception ex)
            {
                _logger.Log(LogLevel.Error, "Failed to create new Truck Owner User", model);
                results.Add(new ValidationResult(ex.Message));
                model.IsValid = false;
                return(results);
            }
        }
        public async Task <List <ValidationResult> > CreateMarketerUser(LandLordSetUpUser model)
        {
            _logger.Log(LogLevel.Debug, "Creating new Marketer User", model);
            Enum.TryParse(typeof(UserTypes), model.UserType.ToString(), out object userType);

            try
            {
                var user = new ImanageUser()
                {
                    UserName    = model.Email,
                    LastName    = model.Name,
                    FirstName   = model.Name,
                    MiddleName  = model.Name,
                    Gender      = 1,
                    Email       = model.Email,
                    UserType    = (UserTypes)userType,
                    PhoneNumber = model.PhoneNumber,
                    //TwoFactorEnabled = true
                };
                var status = await CreateIdentityUser(user);

                if (status.Any())
                {
                    return(status);
                }
                //Create new Account
                var account = new Account
                {
                    Name         = model.Name,
                    Address      = model.Address,
                    PhoneNumber  = model.PhoneNumber,
                    PhoneNumber2 = model.PhoneNumber2,
                    Website      = model.Website,
                    Email        = model.Email,
                    CAC          = model.CAC,
                    NIN          = model.NIN,
                    AccountType  = Enums.AccountType.LandLord,
                    Status       = Enums.AccountStatus.PendingVerification,
                    User_Id      = user.Id
                };
                var status2 = await AddAsync(account);

                model.Id        = user.Id.ToString();
                model.AccountId = account.Id.ToString();
                //Add Claims
                await _userManager.AddClaimAsync(user, new System.Security.Claims.Claim(ClaimTypesHelper.AccountId, account.Id.ToString()));

                //Broadcast new user (accountId)

                /*await _producerClient.Produce("new_marketer", new BusMessage
                 * {
                 *  BusMessageType = (int)BusMessageTypes.NEW_MARKETER,
                 *  Data = JsonConvert.SerializeObject(model)
                 * });*/
                //Send Email Confirmation

                /*var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                 * code = WebUtility.UrlEncode(code);
                 * await SendMessage("email", BusMessageTypes.USER_MSG, new UserEmailTokenViewModel
                 * {
                 *  Code = code,
                 *  User = user,
                 *  EmailType = EmailTypeEnum.UserEmailActivation
                 * });*/

                //Activate User and Confirm Email
                //user.Activated = true;
                //user.EmailConfirmed = true;
                await _userManager.UpdateAsync(user);


                //send Password Reset Email
                await _userService.RequestPasswordReset(user.Email);

                return(results);
            }
            catch (Exception ex)
            {
                _logger.Log(LogLevel.Error, "Failed to create new Marketer User", model);
                results.Add(new ValidationResult(ex.Message));
                model.IsValid = false;
                return(results);
            }
        }
Пример #7
0
 private async Task ReverseUserCreated(ImanageUser user)
 {
     await _userManager.DeleteAsync(user);
 }
Пример #8
0
        public async Task <List <ValidationResult> > SetupUser(SetupUserViewModel userViewModel)
        {
            bool isValid = Validator.TryValidateObject(userViewModel, new ValidationContext(userViewModel, null, null), results, false);

            if (!isValid)
            {
                return(results);
            }

            Enum.TryParse(typeof(UserTypes), userViewModel.UserType.ToString(), out object userType);

            var user = new ImanageUser()
            {
                UserName   = userViewModel.Email,
                LastName   = userViewModel.LastName,
                FirstName  = userViewModel.FirstName,
                MiddleName = userViewModel.MiddleName,
                Gender     = userViewModel.Gender,
                Email      = userViewModel.Email,
                UserType   = (UserTypes)userType
            };

            Enum.TryParse(typeof(UserRoles), userViewModel.Role.ToString(), out object role);
            var status = await CreateIdentityUser(user);

            userViewModel.Role = (int)role;

            if (status.Any())
            {
                return(results);
            }

            userViewModel.User_Id = user.Id.ToString();
            var createResult = await CreateUserType(userViewModel, user, (UserTypes)userType);

            if (!createResult.Any())
            {
                user.UserTypeId = Guid.Parse(userViewModel.UserType_Id);
                await _userManager.UpdateAsync(user);

                var roleName = role.ToString();

                if (!await _roleManager.RoleExistsAsync(roleName))
                {
                    await _roleManager.CreateAsync(new ImanageRole()
                    {
                        Name = roleName
                    });
                }

                await _userManager.AddToRoleAsync(user, roleName);
                await AssignDefaultPermission(user, roleName);

                userViewModel.RoleName = roleName;
            }
            else
            {
                await _userManager.DeleteAsync(user);
            }

            return(createResult);
        }