prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  The SCIM JSON for User and Group schema attribute allows only one value
  The SCIM JSON for User and Group schema attribute allows only one value. The schemas attribute check should only check for a minimum number of entries not for a maximum. 
  
  For example I would like to be able so support the following
  
              "schemas": [
                  "urn:ietf:params:scim:schemas:extension:servicenow:2.0:User",
                  "urn:ietf:params:scim:schemas:core:2.0:User",
                  "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
              ]
  
  To Reproduce
  Steps to reproduce the behavior:
  Create Property mapping, add
  
  return {
      "schemas" : [
                  "urn:ietf:params:scim:schemas:core:2.0:User",
                  "urn:ietf:params:scim:schemas:extention:enterprise:2.0:User"
              ],
      "userName": request.user.username,
      "name": {
          "formatted": request.user.name,
          "givenName": givenName,
          "familyName": familyName,
      },
  
  Expected behavior
  JSON containing schemas attribute 
  
  Instead I get 
  Stopping sync due to error: Error 1 validation error for User schemas Tuple should have at most 1 item after validation, not 2 [type=too_long, input_value=['urn:ietf:params:scim:sc...on:enterprise:2.0:User'], input_type=list] For further information visit https://errors.pydantic.dev/2.4/v/too_long
  
  Version and Deployment (please complete the following information):
  
  authentik version: [2023.10.2]
  Deployment: [docker-compose]
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `authentik/providers/scim/clients/schema.py`
  Content:
  ```
  1 """Custom SCIM schemas"""
  2 
  3 from pydanticscim.group import Group as BaseGroup
  4 from pydanticscim.responses import PatchRequest as BasePatchRequest
  5 from pydanticscim.responses import SCIMError as BaseSCIMError
  6 from pydanticscim.service_provider import Bulk, ChangePassword, Filter, Patch, Sort
  7 from pydanticscim.service_provider import (
  8     ServiceProviderConfiguration as BaseServiceProviderConfiguration,
  9 )
  10 from pydanticscim.user import User as BaseUser
  11 
  12 
  13 class User(BaseUser):
  14     """Modified User schema with added externalId field"""
  15 
  16     schemas: tuple[str] = ("urn:ietf:params:scim:schemas:core:2.0:User",)
  17     externalId: str | None = None
  18 
  19 
  20 class Group(BaseGroup):
  21     """Modified Group schema with added externalId field"""
  22 
  23     schemas: tuple[str] = ("urn:ietf:params:scim:schemas:core:2.0:Group",)
  24     externalId: str | None = None
  25 
  26 
  27 class ServiceProviderConfiguration(BaseServiceProviderConfiguration):
  28     """ServiceProviderConfig with fallback"""
  29 
  30     _is_fallback: bool | None = False
  31 
  32     @property
  33     def is_fallback(self) -> bool:
  34         """Check if this service provider config was retrieved from the API endpoint
  35         or a fallback was used"""
  36         return self._is_fallback
  37 
  38     @staticmethod
  39     def default() -> "ServiceProviderConfiguration":
  40         """Get default configuration, which doesn't support any optional features as fallback"""
  41         return ServiceProviderConfiguration(
  42             patch=Patch(supported=False),
  43             bulk=Bulk(supported=False),
  44             filter=Filter(supported=False),
  45             changePassword=ChangePassword(supported=False),
  46             sort=Sort(supported=False),
  47             authenticationSchemes=[],
  48             _is_fallback=True,
  49         )
  50 
  51 
  52 class PatchRequest(BasePatchRequest):
  53     """PatchRequest which correctly sets schemas"""
  54 
  55     schemas: tuple[str] = ("urn:ietf:params:scim:api:messages:2.0:PatchOp",)
  56 
  57 
  58 class SCIMError(BaseSCIMError):
  59     """SCIM error with optional status code"""
  60 
  61     status: int | None
  62
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/authentik/providers/scim/clients/schema.py b/authentik/providers/scim/clients/schema.py
  --- a/authentik/providers/scim/clients/schema.py
  +++ b/authentik/providers/scim/clients/schema.py
  @@ -13,14 +13,18 @@
   class User(BaseUser):
       """Modified User schema with added externalId field"""
   
  -    schemas: tuple[str] = ("urn:ietf:params:scim:schemas:core:2.0:User",)
  +    schemas: list[str] = [
  +        "urn:ietf:params:scim:schemas:core:2.0:User",
  +    ]
       externalId: str | None = None
   
   
   class Group(BaseGroup):
       """Modified Group schema with added externalId field"""
   
  -    schemas: tuple[str] = ("urn:ietf:params:scim:schemas:core:2.0:Group",)
  +    schemas: list[str] = [
  +        "urn:ietf:params:scim:schemas:core:2.0:Group",
  +    ]
       externalId: str | None = None
  
verification_info: {"golden_diff": "diff --git a/authentik/providers/scim/clients/schema.py b/authentik/providers/scim/clients/schema.py\n--- a/authentik/providers/scim/clients/schema.py\n+++ b/authentik/providers/scim/clients/schema.py\n@@ -13,14 +13,18 @@\n class User(BaseUser):\n     \"\"\"Modified User schema with added externalId field\"\"\"\n \n-    schemas: tuple[str] = (\"urn:ietf:params:scim:schemas:core:2.0:User\",)\n+    schemas: list[str] = [\n+        \"urn:ietf:params:scim:schemas:core:2.0:User\",\n+    ]\n     externalId: str | None = None\n \n \n class Group(BaseGroup):\n     \"\"\"Modified Group schema with added externalId field\"\"\"\n \n-    schemas: tuple[str] = (\"urn:ietf:params:scim:schemas:core:2.0:Group\",)\n+    schemas: list[str] = [\n+        \"urn:ietf:params:scim:schemas:core:2.0:Group\",\n+    ]\n     externalId: str | None = None\n", "issue": "The SCIM JSON for User and Group schema attribute allows only one value\nThe SCIM JSON for User and Group schema attribute allows only one value. The schemas attribute check should only check for a minimum number of entries not for a maximum. \r\n\r\nFor example I would like to be able so support the following\r\n\r\n            \"schemas\": [\r\n                \"urn:ietf:params:scim:schemas:extension:servicenow:2.0:User\",\r\n                \"urn:ietf:params:scim:schemas:core:2.0:User\",\r\n                \"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User\"\r\n            ]\r\n\r\nTo Reproduce\r\nSteps to reproduce the behavior:\r\nCreate Property mapping, add\r\n\r\nreturn {\r\n    \"schemas\" : [\r\n                \"urn:ietf:params:scim:schemas:core:2.0:User\",\r\n                \"urn:ietf:params:scim:schemas:extention:enterprise:2.0:User\"\r\n            ],\r\n    \"userName\": request.user.username,\r\n    \"name\": {\r\n        \"formatted\": request.user.name,\r\n        \"givenName\": givenName,\r\n        \"familyName\": familyName,\r\n    },\r\n\r\nExpected behavior\r\nJSON containing schemas attribute \r\n\r\nInstead I get \r\nStopping sync due to error: Error 1 validation error for User schemas Tuple should have at most 1 item after validation, not 2 [type=too_long, input_value=['urn:ietf:params:scim:sc...on:enterprise:2.0:User'], input_type=list] For further information visit https://errors.pydantic.dev/2.4/v/too_long\r\n\r\nVersion and Deployment (please complete the following information):\r\n\r\nauthentik version: [2023.10.2]\r\nDeployment: [docker-compose]\n", "before_files": [{"content": "\"\"\"Custom SCIM schemas\"\"\"\n\nfrom pydanticscim.group import Group as BaseGroup\nfrom pydanticscim.responses import PatchRequest as BasePatchRequest\nfrom pydanticscim.responses import SCIMError as BaseSCIMError\nfrom pydanticscim.service_provider import Bulk, ChangePassword, Filter, Patch, Sort\nfrom pydanticscim.service_provider import (\n    ServiceProviderConfiguration as BaseServiceProviderConfiguration,\n)\nfrom pydanticscim.user import User as BaseUser\n\n\nclass User(BaseUser):\n    \"\"\"Modified User schema with added externalId field\"\"\"\n\n    schemas: tuple[str] = (\"urn:ietf:params:scim:schemas:core:2.0:User\",)\n    externalId: str | None = None\n\n\nclass Group(BaseGroup):\n    \"\"\"Modified Group schema with added externalId field\"\"\"\n\n    schemas: tuple[str] = (\"urn:ietf:params:scim:schemas:core:2.0:Group\",)\n    externalId: str | None = None\n\n\nclass ServiceProviderConfiguration(BaseServiceProviderConfiguration):\n    \"\"\"ServiceProviderConfig with fallback\"\"\"\n\n    _is_fallback: bool | None = False\n\n    @property\n    def is_fallback(self) -> bool:\n        \"\"\"Check if this service provider config was retrieved from the API endpoint\n        or a fallback was used\"\"\"\n        return self._is_fallback\n\n    @staticmethod\n    def default() -> \"ServiceProviderConfiguration\":\n        \"\"\"Get default configuration, which doesn't support any optional features as fallback\"\"\"\n        return ServiceProviderConfiguration(\n            patch=Patch(supported=False),\n            bulk=Bulk(supported=False),\n            filter=Filter(supported=False),\n            changePassword=ChangePassword(supported=False),\n            sort=Sort(supported=False),\n            authenticationSchemes=[],\n            _is_fallback=True,\n        )\n\n\nclass PatchRequest(BasePatchRequest):\n    \"\"\"PatchRequest which correctly sets schemas\"\"\"\n\n    schemas: tuple[str] = (\"urn:ietf:params:scim:api:messages:2.0:PatchOp\",)\n\n\nclass SCIMError(BaseSCIMError):\n    \"\"\"SCIM error with optional status code\"\"\"\n\n    status: int | None\n", "path": "authentik/providers/scim/clients/schema.py"}], "after_files": [{"content": "\"\"\"Custom SCIM schemas\"\"\"\n\nfrom pydanticscim.group import Group as BaseGroup\nfrom pydanticscim.responses import PatchRequest as BasePatchRequest\nfrom pydanticscim.responses import SCIMError as BaseSCIMError\nfrom pydanticscim.service_provider import Bulk, ChangePassword, Filter, Patch, Sort\nfrom pydanticscim.service_provider import (\n    ServiceProviderConfiguration as BaseServiceProviderConfiguration,\n)\nfrom pydanticscim.user import User as BaseUser\n\n\nclass User(BaseUser):\n    \"\"\"Modified User schema with added externalId field\"\"\"\n\n    schemas: list[str] = [\n        \"urn:ietf:params:scim:schemas:core:2.0:User\",\n    ]\n    externalId: str | None = None\n\n\nclass Group(BaseGroup):\n    \"\"\"Modified Group schema with added externalId field\"\"\"\n\n    schemas: list[str] = [\n        \"urn:ietf:params:scim:schemas:core:2.0:Group\",\n    ]\n    externalId: str | None = None\n\n\nclass ServiceProviderConfiguration(BaseServiceProviderConfiguration):\n    \"\"\"ServiceProviderConfig with fallback\"\"\"\n\n    _is_fallback: bool | None = False\n\n    @property\n    def is_fallback(self) -> bool:\n        \"\"\"Check if this service provider config was retrieved from the API endpoint\n        or a fallback was used\"\"\"\n        return self._is_fallback\n\n    @staticmethod\n    def default() -> \"ServiceProviderConfiguration\":\n        \"\"\"Get default configuration, which doesn't support any optional features as fallback\"\"\"\n        return ServiceProviderConfiguration(\n            patch=Patch(supported=False),\n            bulk=Bulk(supported=False),\n            filter=Filter(supported=False),\n            changePassword=ChangePassword(supported=False),\n            sort=Sort(supported=False),\n            authenticationSchemes=[],\n            _is_fallback=True,\n        )\n\n\nclass PatchRequest(BasePatchRequest):\n    \"\"\"PatchRequest which correctly sets schemas\"\"\"\n\n    schemas: tuple[str] = (\"urn:ietf:params:scim:api:messages:2.0:PatchOp\",)\n\n\nclass SCIMError(BaseSCIMError):\n    \"\"\"SCIM error with optional status code\"\"\"\n\n    status: int | None\n", "path": "authentik/providers/scim/clients/schema.py"}]}