SimpleIdServer icon indicating copy to clipboard operation
SimpleIdServer copied to clipboard

Attribute filters throw exception

Open adrianleonmorell opened this issue 3 years ago • 2 comments

I'm trying this test against the SCIM API using a database:

Scenario: Check user attribute filter return the right data (HTTP GET)
	When execute HTTP POST JSON request 'http://localhost/Users'
	| Key            | Value                                                                                                          |
	| schemas        | [ "urn:ietf:params:scim:schemas:core:2.0:User", "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User" ] |
	| userName       | bjenon                                                                                                         |
	| name           | { "formatted" : "formatted", "familyName": "familyName", "givenName": "givenName" }                            |
        | emails         | [ { "value": "value", "display": "display" } ]                                                                 |
	| employeeNumber | number                                                                                                         |

	And execute HTTP GET request 'http://localhost/Users?attributes=emails%5Bvalue%20eq%20%22value%22%5D'
	And extract JSON from body

	Then HTTP status code equals to '200'
	Then JSON exists 'Resources[0].emails'

Unfortunately, a 500 exception is being returned:

{
  "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:Error"
  ],
  "status": "500",
  "scimType": "internalServerError",
  "detail": "System.InvalidOperationException: The LINQ expression 'DbSet<SCIMRepresentationAttribute>()\r\n    .Where(s0 => s0.SchemaAttributeId == \"cfcebdc2-5013-4181-ad19-7e3cece5889f\" && s0.CachedChildren\r\n        .Any(8c883aa2-8904-48c8-9f24-987eb6e78752 => 8c883aa2-8904-48c8-9f24-987eb6e78752.SchemaAttributeId == \"5b50bba6-52f8-4f2b-841e-a9a5f92ddd36\" & 8c883aa2-8904-48c8-9f24-987eb6e78752.ValueString == \"value\"))' could not be translated. Additional information: Translation of member 'CachedChildren' on entity type 'SCIMRepresentationAttribute' failed. This commonly occurs when the specified member is unmapped.\r\nTranslation of member 'CachedChildren' on entity type 'SCIMRepresentationAttribute' failed. This commonly occurs when the specified member is unmapped. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.\r\n   at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.<VisitMethodCall>g__CheckTranslated|15_0(ShapedQueryExpression translated, <>c__DisplayClass15_0& )\r\n   at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)\r\n   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)\r\n   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)\r\n   at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)\r\n   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)\r\n   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)\r\n   at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)\r\n   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)\r\n   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)\r\n   at Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query)\r\n   at Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](Expression query, Boolean async)\r\n   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](IDatabase database, Expression query, IModel model, Boolean async)\r\n   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass9_0`1.<Execute>b__0()\r\n   at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler)\r\n   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)\r\n   at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)\r\n   at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1.GetEnumerator()\r\n   at System.Linq.Lookup`2.Create(IEnumerable`1 source, Func`2 keySelector, IEqualityComparer`1 comparer)\r\n   at System.Linq.GroupedEnumerable`2.GetEnumerator()\r\n   at System.Linq.Enumerable.SelectEnumerableIterator`2.ToList()\r\n   at SimpleIdServer.Scim.Api.BaseApiController.InternalSearch(SearchSCIMResourceParameter searchRequest) in C:\\Users\\ALeon\\Documents\\examples\\SimpleIdServer\\src\\Scim\\SimpleIdServer.Scim\\Api\\BaseApiController.cs:line 389"
}

I have tried to push a branch that I have in my local to reproduce the error in the SimpleIdServer.Scim.Host.Acceptance.Tests project but I got a 403.

adrianleonmorell avatar Sep 01 '22 07:09 adrianleonmorell

Hello,

The issue is fixed in the master branch, i'll release a pre-release package tomorrow as soon as MYGET is available :). There was a small regression due to the changes made in the ticket #310 .

KR,

SID

simpleidserver avatar Sep 01 '22 20:09 simpleidserver

The pre-release package version "2.0.17-ci-00341" is available here :

SCIM : https://www.myget.org/feed/advance-ict/package/nuget/SimpleIdServer.Scim EFCore5 : https://www.myget.org/feed/advance-ict/package/nuget/SimpleIdServer.Scim.Persistence.EF EFCore6 : https://www.myget.org/feed/advance-ict/package/nuget/SimpleIdServer.Scim.Persistence.EFNet6

simpleidserver avatar Sep 01 '22 21:09 simpleidserver