public async Task <IdentityResult> DeleteApiResourceClaimAsync(
            Neo4jIdentityServer4ApiResource apiResource,
            Neo4jIdentityServer4ApiResourceClaim apiResourceClaim,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDisposed();
            apiResource.ThrowIfNull(nameof(apiResource));
            apiResourceClaim.ThrowIfNull(nameof(apiResourceClaim));

            try
            {
                var cypher = $@"
                MATCH 
                    (r:{IdSrv4ApiResource}{{Name: $p0}})-[:{Neo4jConstants.Relationships.HasClaim}]->
                    (c:{IdSrv4ApiResourceClaim}{{Type: $p1}}) 
                DETACH DELETE c";

                await Session.RunAsync(cypher,
                                       Params.Create(
                                           apiResource.Name,
                                           apiResourceClaim.Type));
                await RaiseApiResourceChangeEventAsync(apiResource);

                return(IdentityResult.Success);
            }
            catch (ClientException ex)
            {
                return(ex.ToIdentityResult());
            }
        }
        public async Task <IdentityResult> AddApiResourceClaimAsync(
            Neo4jIdentityServer4ApiResource apiResource,
            Neo4jIdentityServer4ApiResourceClaim apiResourceClaim,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDisposed();
            apiResource.ThrowIfNull(nameof(apiResource));
            apiResourceClaim.ThrowIfNull(nameof(apiResourceClaim));

            try
            {
                var cypher = $@"
                MATCH 
                    (r:{IdSrv4ApiResource}{{Name: $p0}}) 
                MERGE 
                    (l:{IdSrv4ApiResourceClaim} {"$p1".AsMapForNoNull<Neo4jIdentityServer4ApiResourceClaim>(apiResourceClaim)})
                MERGE 
                    (r)-[:{Neo4jConstants.Relationships.HasClaim}]->(l)";

                var result = await Session.RunAsync(cypher, Params.Create(apiResource.Name, apiResourceClaim));
                await RaiseApiResourceChangeEventAsync(apiResource);

                return(IdentityResult.Success);
            }
            catch (ClientException ex)
            {
                return(ex.ToIdentityResult());
            }
        }
        public async Task <Neo4jIdentityServer4ApiResourceClaim> GetApiResourceClaimAsync(
            Neo4jIdentityServer4ApiResource apiResource,
            Neo4jIdentityServer4ApiResourceClaim apiResourceClaim,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDisposed();
            apiResource.ThrowIfNull(nameof(apiResource));
            apiResourceClaim.ThrowIfNull(nameof(apiResourceClaim));

            var cypher = $@"
                MATCH 
                    (r:{IdSrv4ApiResource}{{Name: $p0}})-[:{Neo4jConstants.Relationships.HasClaim}]->
                    (c:{IdSrv4ApiResourceClaim}{{Type: $p1}}) 
                RETURN c {{ .* }}";

            var result = await Session.RunAsync(cypher, Params.Create(apiResource.Name, apiResourceClaim.Type));

            var record =
                await result.SingleOrDefaultAsync(r => r.MapTo <Neo4jIdentityServer4ApiResourceClaim>("c"));

            return(record);
        }
示例#4
0
        public async Task <IdentityResult> InsertApiResource(
            ApiResource model,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDisposed();
            model.ThrowIfNull(nameof(model));
            try
            {
                var dto    = model.ToNeo4jEntity();
                var result = await CreateApiResourceAsync(dto, cancellationToken);

                if (!result.Succeeded)
                {
                    return(result);
                }

                foreach (var claim in model.UserClaims)
                {
                    var dtoClaim = new Neo4jIdentityServer4ApiResourceClaim()
                    {
                        Type = claim
                    };
                    result = await AddApiResourceClaimAsync(dto, dtoClaim, cancellationToken);

                    if (!result.Succeeded)
                    {
                        return(result);
                    }
                }

                foreach (var scope in model.Scopes)
                {
                    var dtoScope = scope.ToNeo4jEntity();
                    result = await AddApiScopeAsync(dto, dtoScope, cancellationToken);

                    if (!result.Succeeded)
                    {
                        return(result);
                    }
                    foreach (var claim in scope.UserClaims)
                    {
                        var dtoClaim = new Neo4jIdentityServer4ApiScopeClaim()
                        {
                            Type = claim
                        };
                        result = await AddApiScopeClaimAsync(dto, dtoScope, dtoClaim, cancellationToken);

                        if (!result.Succeeded)
                        {
                            return(result);
                        }
                    }
                }

                foreach (var apiSecret in model.ApiSecrets)
                {
                    var dtoSecret = apiSecret.ToNeo4jApiSecretEntity();
                    result = await AddApiSecretAsync(dto, dtoSecret, cancellationToken);

                    if (!result.Succeeded)
                    {
                        return(result);
                    }
                }

                return(IdentityResult.Success);
            }
            catch (ClientException ex)
            {
                return(ex.ToIdentityResult());
            }
        }