Пример #1
0
        public async Task AddResourceAsync(IdentityResource resource)
        {
            var resourceEntity = resource.ToEntity();

            IdentityDbContext.IdentityResources.Add(resourceEntity);
            await IdentityDbContext.SaveChangesAsync();
        }
        public async Task <IActionResult> Post([FromBody] IroncladResource model)
        {
            if (string.IsNullOrEmpty(model.Name))
            {
                return(this.BadRequest(new { Message = $"Cannot create an identity resource without a name" }));
            }

            if (model.UserClaims?.Any() == false)
            {
                return(this.BadRequest(new { Message = $"Cannot create an identity resource without any claims" }));
            }

            var resource = new IdentityServerResource(model.Name, model.DisplayName, model.UserClaims);

            // optional properties
            resource.Enabled = model.Enabled ?? resource.Enabled;

            using (var session = this.store.LightweightSession())
            {
                if (session.Query <PostgresResource>().Any(item => item.Name == model.Name))
                {
                    return(this.StatusCode((int)HttpStatusCode.Conflict, new { Message = "Identity resource already exists" }));
                }

                session.Insert(resource.ToEntity());

                await session.SaveChangesAsync();
            }

            return(this.Created(new Uri(this.HttpContext.GetIdentityServerRelativeUrl("~/api/identityresources/" + model.Name)), null));
        }
 public Task Create(IdentityServer4.Models.IdentityResource resouce)
 {
     if (resouce == null)
     {
         throw new ArgumentNullException(nameof(resouce));
     }
     State.IdentityResource = resouce.ToEntity();
     return(WriteStateAsync());
 }
        protected virtual async Task AddIdentityResourceIfNotExistsAsync(IdentityServer4.Models.IdentityResource resource)
        {
            if (await IdentityResourceRepository.CheckNameExistAsync(resource.Name))
            {
                return;
            }

            var entity = resource.ToEntity();
            await IdentityResourceRepository.InsertAsync(entity, true);
        }
Пример #5
0
        public async Task UpdateResourceAsync(string id, IdentityResource resource)
        {
            var existingResource = await IdentityDbContext.IdentityResources
                                   .Where(r => r.Name.Equals(id, StringComparison.OrdinalIgnoreCase) &&
                                          !r.IsDeleted)
                                   .SingleOrDefaultAsync();

            resource.ToEntity(existingResource);

            IdentityDbContext.IdentityResources.Update(existingResource);
            await IdentityDbContext.SaveChangesAsync();
        }
Пример #6
0
        public void IdentityResourceModelToEntityConfigurationIsValid()
        {
            var model = new IdentityServer4.Models.IdentityResource();

            // TODO: set references

            var mappedEntity = model.ToEntity();
            var mappedModel  = mappedEntity.ToModel();

            Assert.NotNull(mappedModel);
            Assert.NotNull(mappedEntity);
            IdentityResourceMappers.Mapper.ConfigurationProvider.AssertConfigurationIsValid();
        }
        public async Task AddResourceAsync(IdentityResource resource)
        {
            var resourceEntity = resource.ToEntity();

            IdentityDbContext.IdentityResources.Add(resourceEntity);
            await IdentityDbContext.SaveChangesAsync();

            await EventService.RaiseAsync(
                new EntityCreatedAuditEvent <IdentityResource>(
                    UserResolverService.Username,
                    UserResolverService.ClientId,
                    UserResolverService.Subject,
                    resource.Name,
                    resource,
                    SerializationSettings));
        }
Пример #8
0
        /// <summary>
        /// 创建或者更新资源
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        public async Task <Result> CreateOrUpdateIdentityResourceAsync(IdentityResourceDto dto)
        {
            if (dto.UserClaims == null || dto.UserClaims.Count == 0)
            {
                return(FailedResult("UserClaims不能为空值"));
            }

            IdentityServer4.Models.IdentityResource model = mapper.Map <IdentityServer4.Models.IdentityResource>(dto);
            var entity = model.ToEntity();

            if (!dto.Id.HasValue || dto.Id == 0)
            {
                //创建
                await configurationDbContext.IdentityResources.AddAsync(entity).ConfigureAwait(false);
            }
            else
            {
                entity.Id = dto.Id.Value;

                var fromDbEntity = await IdentityResources.FirstOrDefaultAsync(e => e.Id == entity.Id).ConfigureAwait(false);

                if (fromDbEntity == null)
                {
                    return(FailedResult("不存在身份资源"));
                }

                fromDbEntity = mapper.Map(entity, fromDbEntity);
            }

            try
            {
                int rows = await configurationDbContext.SaveChangesAsync().ConfigureAwait(false);

                if (rows == 0)
                {
                    return(FailedResult("已执行,但未更新数据库"));
                }
                return(OkResult());
            }
            catch (DbUpdateException ex)
            {
                return(FailedResult(ex));
            }
        }
        public async Task UpdateResourceAsync(string id, IdentityResource resource)
        {
            var existingResource = await IdentityDbContext.IdentityResources
                                   .Where(r => r.Name == id &&
                                          !r.IsDeleted)
                                   .SingleOrDefaultAsync();

            resource.ToEntity(existingResource);

            IdentityDbContext.IdentityResources.Update(existingResource);
            await IdentityDbContext.SaveChangesAsync();

            await EventService.RaiseAsync(
                new EntityUpdatedAuditEvent <IdentityResource>(
                    UserResolverService.Username,
                    UserResolverService.ClientId,
                    UserResolverService.Subject,
                    resource.Name,
                    resource,
                    SerializationSettings));
        }
        public async Task <IActionResult> Put(string resourceName, [FromBody] IroncladResource model)
        {
            if (model.UserClaims?.Any() == false)
            {
                return(this.BadRequest(new { Message = $"Cannot update an identity resource without any claims" }));
            }

            using (var session = this.store.LightweightSession())
            {
                var document = await session.Query <PostgresResource>().SingleOrDefaultAsync(item => item.Name == resourceName);

                if (document == null)
                {
                    return(this.NotFound(new { Message = $"Identity resource '{resourceName}' not found" }));
                }

                // NOTE (Cameron): Because of the mapping/conversion unknowns we rely upon the Postgres integration to perform that operation which is why we do this...
                var resource = new IdentityServerResource
                {
                    UserClaims = model.UserClaims,
                };

                var entity = resource.ToEntity();

                // update properties (everything supported is an optional update eg. if null is passed we will not update)
                document.DisplayName = model.DisplayName ?? document.DisplayName;
                document.UserClaims  = entity.UserClaims ?? document.UserClaims;
                document.Enabled     = model.Enabled ?? document.Enabled;

                session.Update(document);

                await session.SaveChangesAsync();
            }

            return(this.Ok());
        }