{
    "type": "object",
    "properties": {
        "oidc": {
            "title": "Configuration du client OpenID Connect",
            "type": "object",
            "properties": {
                "clientId": {
                    "title": "Identifiant du client OpenID Connect",
                    "type": "string"
                },
                "clientSecret": {
                    "title": "Secret du client OpenID Connect",
                    "type": "string"
                },
                "issuerURL": {
                    "title": "URL de base du fournisseur OpenID Connect (racine du .well-known/openid-configuration)",
                    "type": "string"
                },
                "postLogoutRedirectURLs": {
                    "title": "URLs de redirection après déconnexion autorisées",
                    "description": "La variable d'URL 'redirect=<url>' peut être utilisée pour spécifier une redirection après déconnexion.",
                    "type": "array",
                    "item": {
                        "type": "string"
                    }
                },
                "scopes": {
                    "title": "Scopes associés au client OpenID Connect",
                    "default": [
                        "openid"
                    ],
                    "type": "array",
                    "item": {
                        "type": "string"
                    }
                },
                "authParams": {
                    "title": "Paramètres d'URL supplémentaires à ajouter à la requête d'authentification OpenID Connect",
                    "default": {},
                    "description": "L'ensemble des clés valeurs renseignées seront transformées en variables d'URL lors de la requête d'authentification initiale. Permet par exemple d'ajouter les 'acr_values' requises par certains fournisseurs d'identité OpenID Connect.",
                    "type": "object",
                    "patternProperties": {
                        ".*": {
                            "type": "string"
                        }
                    }
                },
                "loginCallbackPath": {
                    "title": "Chemin associé à l'URL de callback OpenID Connect",
                    "default": "/.bouncer/authn/oidc/{{ .ProxyName }}/{{ .LayerName }}/callback",
                    "description": "Les marqueurs '{{ .ProxyName }}' et '{{ .LayerName }}'  peuvent être utilisés pour injecter le nom du proxy ainsi que celui du layer.",
                    "type": "string"
                },
                "matchLoginCallbackPath": {
                    "title": "Patron de correspondance du chemin interne de callback OpenID Connect",
                    "default": "*.bouncer/authn/oidc/{{ .ProxyName }}/{{ .LayerName }}/callback",
                    "description": "Les marqueurs '{{ .ProxyName }}' et '{{ .LayerName }}'  peuvent être utilisés pour injecter le nom du proxy ainsi que celui du layer.",
                    "type": "string"
                },
                "logoutPath": {
                    "title": "Chemin associé à l'URL de déconnexion",
                    "default": "/.bouncer/authn/oidc/{{ .ProxyName }}/{{ .LayerName }}/logout",
                    "description": "Les marqueurs '{{ .ProxyName }}' et '{{ .LayerName }}'  peuvent être utilisés pour injecter le nom du proxy ainsi que celui du layer.",
                    "type": "string"
                },
                "publicBaseURL": {
                    "title": "URL publique de base associée au service distant",
                    "default": "",
                    "description": "Peut être utilisé par exemple si il y a discordance de nom d'hôte ou de chemin sur les URLs publiques/internes.",
                    "type": "string"
                },
                "matchLogoutPath": {
                    "title": "Patron de correspondance du chemin interne de déconnexion",
                    "default": "*.bouncer/authn/oidc/{{ .ProxyName }}/{{ .LayerName }}/logout",
                    "description": "Les marqueurs '{{ .ProxyName }}' et '{{ .LayerName }}'  peuvent être utilisés pour injecter le nom du proxy ainsi que celui du layer.",
                    "type": "string"
                },
                "skipIssuerVerification": {
                    "title": "Activer/désactiver la vérification de concordance de l'identifiant du fournisseur d'identité",
                    "default": false,
                    "type": "boolean"
                },
                "tlsInsecureSkipVerify": {
                    "title": "Activer/désactiver la vérification du certificat TLS distant",
                    "default": false,
                    "type": "boolean"
                }
            },
            "additionalProperties": false,
            "required": [
                "clientId",
                "clientSecret",
                "issuerURL"
            ]
        },
        "cookie": {
            "title": "Configuration du cookie porteur de la session utilisateur",
            "type": "object",
            "properties": {
                "name": {
                    "title": "Nom du cookie",
                    "default": "_bouncer_authn_oidc",
                    "type": "string"
                },
                "domain": {
                    "title": "Domaine associé au cookie",
                    "description": "Par défaut le domaine associé à la requête HTTP",
                    "type": "string"
                },
                "path": {
                    "title": "Chemin associé au cookie",
                    "type": "string",
                    "default": "/"
                },
                "sameSite": {
                    "title": "Attribut sameSite du cookie",
                    "description": "Voir https://developer.mozilla.org/fr/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value",
                    "type": "string",
                    "enum": [
                        "lax",
                        "none",
                        "strict",
                        ""
                    ],
                    "default": ""
                },
                "httpOnly": {
                    "title": "Interdire ou non l'accès au cookie en Javascript",
                    "type": "boolean",
                    "default": false
                },
                "secure": {
                    "title": "Transmettre le cookie uniquement en HTTPS",
                    "type": "boolean",
                    "default": false
                },
                "maxAge": {
                    "title": "Temps de vie du cookie et de la session associée.",
                    "description": "Voir https://pkg.go.dev/time#ParseDuration pour le format attendu.",
                    "default": "1h",
                    "type": "string"
                }
            },
            "additionalProperties": false
        }
    },
    "additionalProperties": false,
    "required": [
        "oidc"
    ]
}