content: {-# LANGUAGE QuasiQuotes #-}
  
  -- This file is part of the Wire Server implementation.
  --
  -- Copyright (C) 2022 Wire Swiss GmbH <opensource@wire.com>
  --
  -- This program is free software: you can redistribute it and/or modify it under
  -- the terms of the GNU Affero General Public License as published by the Free
  -- Software Foundation, either version 3 of the License, or (at your option) any
  -- later version.
  --
  -- This program is distributed in the hope that it will be useful, but WITHOUT
  -- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  -- FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
  -- details.
  --
  -- You should have received a copy of the GNU Affero General Public License along
  -- with this program. If not, see <https://www.gnu.org/licenses/>.
  
  module Web.Scim.Capabilities.MetaSchema.SPConfig
    ( spConfigSchema,
    )
  where
  
  import Data.Aeson (Value)
  import Data.Aeson.QQ
  
  -- NB: it looks like 'authenticationSchemes' should also have a 'type'
  -- attribute. The sample schema from the RFC doesn't list it, though.
  spConfigSchema :: Value
  spConfigSchema =
    [aesonQQ|
  {
    "id": "urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig",
    "name": "Service Provider Configuration",
    "description": "Schema for representing the service provider's configuration",
    "attributes": [
      {
        "name": "documentationUri",
        "type": "reference",
        "referenceTypes": [
          "external"
        ],
        "multiValued": false,
        "description": "An HTTP-addressable URL pointing to the service provider's human-consumable help documentation.",
        "required": false,
        "caseExact": false,
        "mutability": "readOnly",
        "returned": "default",
        "uniqueness": "none"
      },
      {
        "name": "patch",
        "type": "complex",
        "multiValued": false,
        "description": "A complex type that specifies PATCH configuration options.",
        "required": true,
        "returned": "default",
        "mutability": "readOnly",
        "subAttributes": [
          {
            "name": "supported",
            "type": "boolean",
            "multiValued": false,
            "description": "A Boolean value specifying whether or not the operation is supported.",
            "required": true,
            "mutability": "readOnly",
            "returned": "default"
          }
        ]
      },
      {
        "name": "bulk",
        "type": "complex",
        "multiValued": false,
        "description": "A complex type that specifies bulk configuration options.",
        "required": true,
        "returned": "default",
        "mutability": "readOnly",
        "subAttributes": [
          {
            "name": "supported",
            "type": "boolean",
            "multiValued": false,
            "description": "A Boolean value specifying whether or not the operation is supported.",
            "required": true,
            "mutability": "readOnly",
            "returned": "default"
          },
          {
            "name": "maxOperations",
            "type": "integer",
            "multiValued": false,
            "description": "An integer value specifying the maximum number of operations.",
            "required": true,
            "mutability": "readOnly",
            "returned": "default",
            "uniqueness": "none"
          },
          {
            "name": "maxPayloadSize",
            "type": "integer",
            "multiValued": false,
            "description": "An integer value specifying the maximum payload size in bytes.",
            "required": true,
            "mutability": "readOnly",
            "returned": "default",
            "uniqueness": "none"
          }
        ]
      },
      {
        "name": "filter",
        "type": "complex",
        "multiValued": false,
        "description": "A complex type that specifies FILTER options.",
        "required": true,
        "returned": "default",
        "mutability": "readOnly",
        "subAttributes": [
          {
            "name": "supported",
            "type": "boolean",
            "multiValued": false,
            "description": "A Boolean value specifying whether or not the operation is supported.",
            "required": true,
            "mutability": "readOnly",
            "returned": "default"
          },
          {
            "name": "maxResults",
            "type": "integer",
            "multiValued": false,
            "description": "An integer value specifying the maximum number of resources returned in a response.",
            "required": true,
            "mutability": "readOnly",
            "returned": "default",
            "uniqueness": "none"
          }
        ]
      },
      {
        "name": "changePassword",
        "type": "complex",
        "multiValued": false,
        "description": "A complex type that specifies configuration options related to changing a password.",
        "required": true,
        "returned": "default",
        "mutability": "readOnly",
        "subAttributes": [
          {
            "name": "supported",
            "type": "boolean",
            "multiValued": false,
            "description": "A Boolean value specifying whether or not the operation is supported.",
            "required": true,
            "mutability": "readOnly",
            "returned": "default"
          }
        ]
      },
      {
        "name": "sort",
        "type": "complex",
        "multiValued": false,
        "description": "A complex type that specifies sort result options.",
        "required": true,
        "returned": "default",
        "mutability": "readOnly",
        "subAttributes": [
          {
            "name": "supported",
            "type": "boolean",
            "multiValued": false,
            "description": "A Boolean value specifying whether or not the operation is supported.",
            "required": true,
            "mutability": "readOnly",
            "returned": "default"
          }
        ]
      },
      {
        "name": "authenticationSchemes",
        "type": "complex",
        "multiValued": true,
        "description": "A complex type that specifies supported authentication scheme properties.",
        "required": true,
        "returned": "default",
        "mutability": "readOnly",
        "subAttributes": [
          {
            "name": "name",
            "type": "string",
            "multiValued": false,
            "description": "The common authentication scheme name, e.g., HTTP Basic.",
            "required": true,
            "caseExact": false,
            "mutability": "readOnly",
            "returned": "default",
            "uniqueness": "none"
          },
          {
            "name": "description",
            "type": "string",
            "multiValued": false,
            "description": "A description of the authentication scheme.",
            "required": true,
            "caseExact": false,
            "mutability": "readOnly",
            "returned": "default",
            "uniqueness": "none"
          },
          {
            "name": "specUri",
            "type": "reference",
            "referenceTypes": [
              "external"
            ],
            "multiValued": false,
            "description": "An HTTP-addressable URL pointing to the authentication scheme's specification.",
            "required": false,
            "caseExact": false,
            "mutability": "readOnly",
            "returned": "default",
            "uniqueness": "none"
          },
          {
            "name": "documentationUri",
            "type": "reference",
            "referenceTypes": [
              "external"
            ],
            "multiValued": false,
            "description": "An HTTP-addressable URL pointing to the authentication scheme's usage documentation.",
            "required": false,
            "caseExact": false,
            "mutability": "readOnly",
            "returned": "default",
            "uniqueness": "none"
          }
        ]
      }
    ]
  }
  |]
  