# Copyright 2024 The Matrix.org Foundation C.I.C.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

type: object
title: m.login.terms params
description: Schema for `m.login.terms` entry in the `params` object in a User-Interactive Authentication response.
required: ['policies']
properties:
  policies:
    type: object
    description: |
      A map from "Policy ID" to the current definition of this policy document. The Policy ID is a unique
      identifier for a given policy document, using the [Opaque Identifier Grammar](/appendices/#opaque-identifiers).
    additionalProperties:
      type: object
      title: Policy Definition
      required: [version]
      properties:
        version:
          type: string
          description: |
            The version of this policy document. This is provided as a convenience for the client,
            and uses the [Opaque Identifier Grammar](/appendices/#opaque-identifiers).
      additionalProperties:
        type: object
        title: Policy Translation
        required: [name, url]
        description: |
          Map from language codes to details of the document in that language.
          Language codes SHOULD be formatted as per [Section 2.2 of RFC
          5646](https://datatracker.ietf.org/doc/html/rfc5646#section-2.2),
          though some implementations may use an underscore instead of dash
          (for example, `en_US` instead of `en-US`).
        properties:
          name:
            type: string
            description: |
              The name of this document, in the appropriate language. An
              arbitrary string with no specified maximum length.
          url:
            type: string
            description: |
              A link to the text of this document, in the appropriate
              language. MUST be a valid URI with scheme `https://` or
              `http://`. Insecure HTTP is discouraged.
example: {
    "policies": {
        "terms_of_service": {
            "version": "1.2",
            "en": {
                "name": "Terms of Service",
                "url": "https://example.org/somewhere/terms-1.2-en.html"
            },
            "fr": {
                "name": "Conditions d'utilisation",
                "url": "https://example.org/somewhere/terms-1.2-fr.html"
            }
        },
        "privacy_policy": {
            "version": "1.2",
            "en": {
                "name": "Privacy Policy",
                "url": "https://example.org/somewhere/privacy-1.2-en.html"
            },
            "fr": {
                "name": "Politique de confidentialité",
                "url": "https://example.org/somewhere/privacy-1.2-fr.html"
            }
        }
    }
}