Example #1
0
        public async Task <IdentityUtilsResult <TUserDto> > CreateUser(TUserDto user)
        {
            var userDb = mapper.Map <TUser>(user);

            var result = ModelValidator.ValidateDataAnnotations(userDb).ToIdentityUtilsResult();

            if (!result.Success)
            {
                return(result.ToTypedResult <TUserDto>());
            }

            var managerValidationResult = await new UserValidator <TUser>().ValidateAsync(userManager, userDb);

            if (!managerValidationResult.Succeeded)
            {
                return(managerValidationResult.ToIdentityUtilsResult().ToTypedResult <TUserDto>());
            }

            result = (await userManager.CreateAsync(userDb, user.Password ?? "")).ToIdentityUtilsResult();

            if (result.Success)
            {
                user.Password = null;
                mapper.Map(userDb, user);
            }

            return(result.ToTypedResult(user));
        }
        public async Task <IdentityUtilsResult <TTenantDto> > AddTenant(TTenantDto tenantDto)
        {
            tenantDto.Hostnames ??= new List <string>();

            var hostsAlreadyExist = await dbContext.TenantHosts
                                    .Where(x => tenantDto.Hostnames.Contains(x.Hostname))
                                    .AnyAsync();

            if (hostsAlreadyExist)
            {
                return(IdentityUtilsResult <TTenantDto> .ErrorResult("Hostname already assigned to different tenant"));
            }

            var tenant = mapper.Map <TTenant>(tenantDto);

            tenant.Hosts = tenantDto.Hostnames
                           .Select(x => new IdentityManagerTenantHost
            {
                Hostname = x.Trim()
            })
                           .ToList();

            var result = ModelValidator.ValidateDataAnnotations(tenant);

            if (!result.isValid)
            {
                return(IdentityUtilsResult <TTenantDto> .ErrorResult(result.ToIdentityUtilsResult().ErrorMessages));
            }

            dbContext.Tenants.Add(tenant);
            await dbContext.SaveChangesAsync();

            return(IdentityUtilsResult <TTenantDto> .SuccessResult(ToDto(tenant)));
        }
Example #3
0
        public async Task <IdentityUtilsResult <TRoleDto> > AddRole(TRoleDto roleDto)
        {
            roleDto.Name = roleDto.Name.Trim();
            var role = mapper.Map <TRole>(roleDto);

            var result = ModelValidator.ValidateDataAnnotations(role).ToIdentityUtilsResult();

            if (!result.Success)
            {
                return(result.ToTypedResult <TRoleDto>());
            }

            var managerValidationResult = await new RoleValidator <TRole>().ValidateAsync(roleManager, role);

            if (!managerValidationResult.Succeeded)
            {
                return(managerValidationResult.ToIdentityUtilsResult().ToTypedResult <TRoleDto>());
            }

            var roleResult = await roleManager.CreateAsync(role);

            if (!roleResult.Succeeded)
            {
                return(roleResult.ToIdentityUtilsResult().ToTypedResult <TRoleDto>());
            }

            mapper.Map(role, roleDto);
            return(IdentityUtilsResult <TRoleDto> .SuccessResult(roleDto));
        }
        public async Task <IdentityUtilsResult <TTenantDto> > UpdateTenant(TTenantDto tenantDto)
        {
            using var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);

            var hostsAlreadyExist = await dbContext.TenantHosts
                                    .Where(x => x.TenantId != tenantDto.TenantId)
                                    .Where(x => tenantDto.Hostnames.Contains(x.Hostname))
                                    .AnyAsync();

            if (hostsAlreadyExist)
            {
                return(IdentityUtilsResult <TTenantDto> .ErrorResult("Hostname already assigned to different tenant"));
            }

            var currentHosts = dbContext.TenantHosts.Where(x => x.TenantId == tenantDto.TenantId);

            dbContext.TenantHosts.RemoveRange(currentHosts);
            await dbContext.SaveChangesAsync();

            var tenantDbResult = await GetTenantDb(tenantDto.TenantId, false);

            if (!tenantDbResult.Success)
            {
                return(IdentityUtilsResult <TTenantDto> .ErrorResult(tenantDbResult.ErrorMessages));
            }

            var tenant = tenantDbResult.Data.First();

            mapper.Map(tenantDto, tenant);
            var hosts = tenantDto.Hostnames
                        .Select(x => new IdentityManagerTenantHost
            {
                TenantId = tenantDto.TenantId,
                Hostname = x
            });

            var result = ModelValidator.ValidateDataAnnotations(tenant);

            if (!result.isValid)
            {
                return(IdentityUtilsResult <TTenantDto> .ErrorResult(result.ToIdentityUtilsResult().ErrorMessages));
            }

            dbContext.Tenants.Update(tenant);
            dbContext.TenantHosts.AddRange(hosts);
            await dbContext.SaveChangesAsync();

            scope.Complete();

            return(IdentityUtilsResult <TTenantDto> .SuccessResult(ToDto(tenant)));
        }
Example #5
0
        public async Task <IdentityUtilsResult> UpdateUser(TUserDto user)
        {
            var userDbResult = await FindByIdAsync(user.Id);

            if (!userDbResult.Success)
            {
                return(IdentityUtilsResult.ErrorResult(userDbResult.ErrorMessages));
            }

            var userDb = userDbResult.Data.First();

            mapper.Map(user, userDb);

            var result = ModelValidator.ValidateDataAnnotations(userDb).ToIdentityUtilsResult();

            if (!result.Success)
            {
                return(result.ToTypedResult <TUserDto>());
            }

            var managerValidationResult = await new UserValidator <TUser>().ValidateAsync(userManager, userDb);

            if (!managerValidationResult.Succeeded)
            {
                return(managerValidationResult.ToIdentityUtilsResult().ToTypedResult <TUserDto>());
            }

            var identityResult = await userManager.UpdateAsync(userDb);

            if (!identityResult.Succeeded)
            {
                return(identityResult.ToIdentityUtilsResult());
            }

            mapper.Map(userDbResult.Data.Single(), user);
            return(IdentityUtilsResult.SuccessResult);
        }