{
    "title": "Identity Service Properties",
    "$schema": "http://json-schema.org/draft-04/schema#",
    "javaType": "com.sos.joc.model.security.properties.Properties",
    "type": "object",
    "properties": {
        "initialPassword": {
            "type": "string"
        },
        "minPasswordLength": {
            "type": "number",
            "format": "utc-millisec",
            "minimum": 0
        },
        "sessionTimeout": {
            "type": "integer",
            "minimum": 0
        },
        "vault": {
            "javaType": "com.sos.joc.model.security.properties.vault.VaultProperties",
            "type": "object",
            "properties": {
                "iamVaultUrl": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamVaultAuthenticationMethodPath": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamVaultTruststorePath": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamVaultTruststorePassword": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamVaultTruststoreType": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamVaultApplicationToken": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                }
            },
            "additionalProperties": false
        },
        "keycloak": {
            "javaType": "com.sos.joc.model.security.properties.keycloak.KeycloakProperties",
            "type": "object",
            "properties": {
                "iamKeycloakUrl": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamKeycloakTruststorePath": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamKeycloakTruststorePassword": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamKeycloakTruststoreType": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamKeycloakClientSecret": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamKeycloakClientId": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamKeycloakAdminAccount": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamKeycloakAdminPassword": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamKeycloakRealm": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamKeycloakVersionCompatibility": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                }
            },
            "additionalProperties": false
        },
        "oidc": {
            "javaType": "com.sos.joc.model.security.properties.oidc.OidcProperties",
            "type": "object",
            "properties": {
                "iamOidcAuthenticationUrl": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamOidcClientId": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamOidcName": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamOidcGroupClaims": {
                    "type": "array",
                    "items": {
                        "type": "string",
                        "pattern": "^[^<>]*$",
                        "maxLength": 255
                    }
                },
                "iamOidcClientSecret": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamOidcFlowType": {
                    "javaType": "com.sos.joc.model.security.properties.oidc.OidcFlowTypes",
                    "type": "string",
                    "enum": [
                        "AUTHENTICATION",
                        "IMPLICIT",
                        "CLIENT-CREDENTIAL"
                    ]
                },
                "iamOidcUserAttribute": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamOidcTruststorePath": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamOidcTruststorePassword": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamOidcTruststoreType": {
                    "type": "string",
                    "pattern": "^[^<>]*$",
                    "maxLength": 255
                },
                "iamOidcGroupRolesMap": {
                    "javaType": "com.sos.joc.model.security.properties.oidc.OidcGroupRolesMapping",
                    "type": "object",
                    "properties": {
                        "items": {
                            "type": "array",
                            "items": {
                                "javaType": "com.sos.joc.model.security.properties.oidc.OidcGroupRolesMappingItem",
                                "type": "object",
                                "properties": {
                                    "oidcGroup": {
                                        "type": "string",
                                        "pattern": "^[^<>]*$",
                                        "maxLength": 255
                                    },
                                    "roles": {
                                        "type": "array",
                                        "items": {
                                            "type": "string",
                                            "pattern": "^[^<>]*$",
                                            "maxLength": 255
                                        }
                                    }
                                },
                                "additionalProperties": false
                            }
                        }
                    },
                    "additionalProperties": false
                }
            },
            "additionalProperties": false
        },
        "fido": {
            "javaType": "com.sos.joc.model.security.properties.fido.FidoProperties",
            "type": "object",
            "properties": {
                "iamFidoUserVerification": {
                    "javaType": "com.sos.joc.model.security.properties.fido.FidoUserverification",
                    "type": "string",
                    "enum": [
                        "DISCOURAGED",
                        "PREFERRED",
                        "REQUIRED"
                    ]
                },
                "iamFidoTimeout": {
                    "type": "integer",
                    "minimum": 0
                },
                "iamFidoProtocolType": {
                    "javaType": "com.sos.joc.model.security.properties.fido.FidoProtocolType",
                    "type": "string",
                    "enum": [
                        "FIDO2",
                        "PASSKEY"
                    ]
                },
                "iamFidoResidentKey": {
                    "javaType": "com.sos.joc.model.security.properties.fido.FidoResidentKey",
                    "type": "string",
                    "enum": [
                        "DISCOURAGED",
                        "PREFERRED",
                        "REQUIRED"
                    ]
                },
                "iamFidoAttachment": {
                    "javaType": "com.sos.joc.model.security.properties.fido.FidoAttachment",
                    "type": "string",
                    "enum": [
                        "PLATFORM",
                        "ROAMING"
                    ]
                },
                "iamFidoTransports": {
                    "type": "array",
                    "items": {
                        "javaType": "com.sos.joc.model.security.properties.fido.FidoTransports",
                        "type": "string",
                        "enum": [
                            "BLE",
                            "HYBRID",
                            "INTERNAL",
                            "NFC",
                            "USB"
                        ]
                    }
                },
                "iamFidoRequireAccount": {
                    "type": "boolean",
                    "default": false
                },
                "iamFidoEmailSettings": {
                    "javaType": "com.sos.joc.model.security.properties.fido.FidoEmailSettings",
                    "type": "object",
                    "properties": {
                        "bodyRegistration": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "subjectRegistration": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "ccRegistration": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "bccRegistration": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "bodyAccess": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "subjectAccess": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "ccAccess": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "bccAccess": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "bodyConfirmed": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "subjectConfirmed": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "ccConfirmed": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "bccConfirmed": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "receiptConfirmed": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "sendMailToConfirm": {
                            "description": "true if the confirmation email should be sent",
                            "type": "boolean"
                        },
                        "sendMailToNotifySuccessfulRegistration": {
                            "description": "true if the email for successful registration should be sent",
                            "type": "boolean"
                        },
                        "sendMailToNotifyConfirmationReceived": {
                            "description": "true if the email for successful registration should be sent",
                            "type": "boolean"
                        },
                        "contentType": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "charset": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "encoding": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "priority": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        },
                        "nameOfJobResource": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255,
                            "minLength": 1
                        }
                    },
                    "additionalProperties": false
                }
            },
            "additionalProperties": false
        },
        "ldap": {
            "javaType": "com.sos.joc.model.security.properties.ldap.LdapProperties",
            "type": "object",
            "properties": {
                "simple": {
                    "javaType": "com.sos.joc.model.security.properties.ldap.LdapSimpleProperties",
                    "type": "object",
                    "properties": {
                        "iamLdapHost": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapPort": {
                            "type": "number",
                            "format": "utc-millisec",
                            "minimum": 0
                        },
                        "iamLdapProtocol": {
                            "javaType": "com.sos.joc.model.security.properties.ldap.LdapProtocolItem",
                            "type": "string",
                            "enum": [
                                "PLAIN",
                                "STARTTLS",
                                "SSL"
                            ]
                        },
                        "iamLdapAD": {
                            "type": "boolean"
                        },
                        "iamLdapADwithSamAccount": {
                            "type": "boolean"
                        },
                        "iamLdapWithMemberOf": {
                            "type": "boolean"
                        }
                    },
                    "additionalProperties": false
                },
                "expert": {
                    "javaType": "com.sos.joc.model.security.properties.ldap.LdapExpertProperties",
                    "type": "object",
                    "properties": {
                        "iamLdapServerUrl": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapReadTimeout": {
                            "type": "integer",
                            "minimum": 0
                        },
                        "iamLdapConnectTimeout": {
                            "type": "integer",
                            "minimum": 0
                        },
                        "iamLdapUserDnTemplate": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapSysemUserDnTemplate": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapSearchBase": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapGroupSearchBase": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapGroupNameAttribute": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapUserNameAttribute": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapUserSearchFilter": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapGroupSearchFilter": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapUseStartTls": {
                            "type": "boolean",
                            "default": false
                        },
                        "iamLdapTruststorePath": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapTruststorePassword": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapTruststoreType": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapHostNameVerification": {
                            "type": "boolean",
                            "default": false
                        },
                        "iamLdapSecurityProtocol": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapSystemUser": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapSystemPassword": {
                            "type": "string",
                            "pattern": "^[^<>]*$",
                            "maxLength": 255
                        },
                        "iamLdapGroupRolesMap": {
                            "javaType": "com.sos.joc.model.security.properties.ldap.LdapGroupRolesMapping",
                            "type": "object",
                            "properties": {
                                "iamLdapDisableNestedGroupSearch": {
                                    "type": "boolean"
                                },
                                "items": {
                                    "type": "array",
                                    "items": {
                                        "javaType": "com.sos.joc.model.security.properties.ldap.LdapGroupRolesMappingItem",
                                        "type": "object",
                                        "properties": {
                                            "ldapGroupDn": {
                                                "type": "string",
                                                "pattern": "^[^<>]*$",
                                                "maxLength": 255
                                            },
                                            "roles": {
                                                "type": "array",
                                                "items": {
                                                    "type": "string",
                                                    "pattern": "^[^<>]*$",
                                                    "maxLength": 255
                                                }
                                            }
                                        },
                                        "additionalProperties": false
                                    }
                                }
                            },
                            "additionalProperties": false
                        }
                    },
                    "additionalProperties": false
                }
            },
            "additionalProperties": false
        }
    },
    "additionalProperties": false
}