Example #1
0
        public async Task <IdentityResult> AddApiScopeClaimAsync(
            Neo4jIdentityServer4ApiResource apiResource,
            Neo4jIdentityServer4ApiScope apiScope,
            Neo4jIdentityServer4ApiScopeClaim apiScopeClaim,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDisposed();
            apiResource.ThrowIfNull(nameof(apiResource));
            apiScope.ThrowIfNull(nameof(apiScope));
            apiScopeClaim.ThrowIfNull(nameof(apiScopeClaim));
            try
            {
                var cypher = $@"
                MATCH 
                    (apiResource:{IdSrv4ApiResource}{{Name: $p0}})
                    -[:{Neo4jConstants.Relationships.HasScope}]->
                    (apiScope:{IdSrv4ClientApiScope}{{Name: $p1}})
                MERGE 
                    (l:{IdSrv4ClientApiScopeClaim} {"$p2".AsMapForNoNull<Neo4jIdentityServer4ApiScopeClaim>(apiScopeClaim)})
                MERGE 
                    (apiScope)-[:{Neo4jConstants.Relationships.HasClaim}]->(l)";

                var result = await Session.RunAsync(cypher, Params.Create(apiResource.Name, apiScope.Name, apiScopeClaim));
                await RaiseApiScopeChangeEventAsync(apiResource, apiScope);

                return(IdentityResult.Success);
            }
            catch (ClientException ex)
            {
                return(ex.ToIdentityResult());
            }
        }
Example #2
0
        public async Task <Neo4jIdentityServer4ApiScopeClaim> GetApiScopeClaimAsync(
            Neo4jIdentityServer4ApiResource apiResource,
            Neo4jIdentityServer4ApiScope apiScope,
            Neo4jIdentityServer4ApiScopeClaim apiScopeClaim,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDisposed();
            apiResource.ThrowIfNull(nameof(apiResource));
            apiScope.ThrowIfNull(nameof(apiScope));

            var cypher = $@"
                MATCH 
                    (:{IdSrv4ApiResource}{{Name: $p0}})-[:{Neo4jConstants.Relationships.HasScope}]->
                    (:{IdSrv4ClientApiScope}{{Name: $p1}})-[:{Neo4jConstants.Relationships.HasClaim}]->
                    (s:{IdSrv4ClientApiScopeClaim}{{Type: $p2}})
                RETURN s {{ .* }}";

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

            var record =
                await result.SingleOrDefaultAsync(r => r.MapTo <Neo4jIdentityServer4ApiScopeClaim>("s"));

            return(record);
        }
Example #3
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());
            }
        }