private void ValidateUpdateProperty(ApiResourceMetaData apiResourceMetaData, string type, string value)
        {
            if (apiResourceMetaData == null)
            {
                throw new ArgumentNullException(nameof(apiResourceMetaData));
            }

            if (string.IsNullOrWhiteSpace(type))
            {
                ModelState.AddModelError("", Messages.PropertyTypeRequired);
                return;
            }

            var prop = apiResourceMetaData.UpdateProperties.SingleOrDefault(x => x.Type == type);

            if (prop == null)
            {
                ModelState.AddModelError("", string.Format(Messages.PropertyInvalid, type));
            }
            else
            {
                var error = prop.Validate(value);
                if (error != null)
                {
                    ModelState.AddModelError("", error);
                }
            }
        }
        private IEnumerable <string> ValidateCreateProperties(ApiResourceMetaData apiResourceMetaData, IEnumerable <PropertyValue> properties)
        {
            if (apiResourceMetaData == null)
            {
                throw new ArgumentNullException(nameof(apiResourceMetaData));
            }
            properties = properties ?? Enumerable.Empty <PropertyValue>();

            var meta = apiResourceMetaData.CreateProperties;

            return(meta.Validate(properties));
        }
        async Task <ApiResourceMetaData> GetCoreMetaDataAsync()
        {
            if (_metadata == null)
            {
                _metadata = await _service.GetMetadataAsync();

                if (_metadata == null)
                {
                    throw new InvalidOperationException("IdentityResourceMetaData returned null");
                }
                _metadata.Validate();

                return(_metadata);
            }

            return(_metadata);
        }
        private ApiResourceMetaData GetMetadata()
        {
            if (_metadata == null)
            {
                var updateApiResource = new List <PropertyMetadata>();
                updateApiResource.AddRange(PropertyMetadata.FromType <IdentityServer4.EntityFramework.Entities.ApiResource>());

                var createApiResource = new List <PropertyMetadata>
                {
                    PropertyMetadata.FromProperty <IdentityServer4.EntityFramework.Entities.ApiResource>(x => x.Name, "ApiResourceName", required: true),
                };

                _metadata = new ApiResourceMetaData
                {
                    SupportsCreate   = true,
                    SupportsDelete   = true,
                    CreateProperties = createApiResource,
                    UpdateProperties = updateApiResource
                };
            }
            return(_metadata);
        }
예제 #5
0
        public ApiResourceQueryResultResource(QueryResult <ApiResourceSummary> result, IUrlHelper url, ApiResourceMetaData meta)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }
            if (url == null)
            {
                throw new ArgumentNullException(nameof(url));
            }
            if (meta == null)
            {
                throw new ArgumentNullException(nameof(meta));
            }

            Data = new ApiResourceQueryResultResourceData(result, url, meta);

            var links = new Dictionary <string, object>();

            if (meta.SupportsCreate)
            {
                links["create"] = new CreateApiResourceLink(url, meta);
            }
            ;
            Links = links;
        }
        public ApiResourceQueryResultResourceData(QueryResult <ApiResourceSummary> result, IUrlHelper url, ApiResourceMetaData meta)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }
            if (url == null)
            {
                throw new ArgumentNullException(nameof(url));
            }
            if (meta == null)
            {
                throw new ArgumentNullException(nameof(meta));
            }

            Mapper.Map(result, this);

            foreach (var identityResource in this.Items)
            {
                var links = new Dictionary <string, string>
                {
                    { "detail", url.RelativeLink(Constants.RouteNames.GetApiResource, new { subject = identityResource.Data.Subject }) }
                };
                if (meta.SupportsDelete)
                {
                    links.Add("delete", url.RelativeLink(Constants.RouteNames.DeleteApiResource, new { subject = identityResource.Data.Subject }));
                }
                identityResource.Links = links;
            }
        }
예제 #7
0
        public ApiResourceDetailDataResource(ApiResourceDetail apiResource, UrlHelper url, ApiResourceMetaData metaData)
        {
            if (apiResource == null)
            {
                throw new ArgumentNullException(nameof(apiResource));
            }
            if (url == null)
            {
                throw new ArgumentNullException(nameof(url));
            }
            if (metaData == null)
            {
                throw new ArgumentNullException(nameof(metaData));
            }

            this["Name"]        = apiResource.Name;
            this["Description"] = apiResource.Description;
            this["Subject"]     = apiResource.Subject;

            if (apiResource.Properties != null)
            {
                var props = (from p in apiResource.Properties
                             let m = (from m in metaData.UpdateProperties where m.Type == p.Type select m).SingleOrDefault()
                                     where m != null
                                     select new
                {
                    Data = m.Convert(p.Value),
                    Meta = m,
                    Links = new
                    {
                        update = url.RelativeLink(Constants.RouteNames.UpdateApiResourceProperty,
                                                  new
                        {
                            subject = apiResource.Subject,
                            type = p.Type.ToBase64UrlEncoded()
                        }
                                                  )
                    }
                }).ToList();

                if (props.Any())
                {
                    this["Properties"] = props.ToArray();
                }
            }

            this["Claims"] = new
            {
                Data  = GetClaims(apiResource, url).ToArray(),
                Links = new
                {
                    create = url.RelativeLink(Constants.RouteNames.AddApiResourceClaim, new { subject = apiResource.Subject })
                }
            };

            this["Secrets"] = new
            {
                Data  = GetSecrets(apiResource, url).ToArray(),
                Links = new
                {
                    create = url.RelativeLink(Constants.RouteNames.AddApiResourceSecret, new { subject = apiResource.Subject })
                }
            };

            this["Scopes"] = new
            {
                Data  = GetScopes(apiResource, url).ToArray(),
                Links = new
                {
                    create = url.RelativeLink(Constants.RouteNames.AddApiResourceScope, new { subject = apiResource.Subject })
                }
            };
        }
        public ApiResourceDetailResource(ApiResourceDetail apiResource, UrlHelper url, ApiResourceMetaData metaData)
        {
            if (apiResource == null)
            {
                throw new ArgumentNullException(nameof(apiResource));
            }
            if (url == null)
            {
                throw new ArgumentNullException(nameof(url));
            }
            if (metaData == null)
            {
                throw new ArgumentNullException(nameof(metaData));
            }

            Data = new ApiResourceDetailDataResource(apiResource, url, metaData);

            var links = new Dictionary <string, string>();

            if (metaData.SupportsDelete)
            {
                links["Delete"] = url.RelativeLink(Constants.RouteNames.DeleteApiResource, new { subject = apiResource.Subject });
            }
            Links = links;
        }
 public CreateApiResourceLink(UrlHelper url, ApiResourceMetaData apiResourceMetaData)
 {
     this["href"] = url.RelativeLink(Constants.RouteNames.CreateApiResource);
     this["meta"] = apiResourceMetaData.CreateProperties;
 }