apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: keycloakclients.keycloak.org
  annotations:
    helm.sh/hook: crd-install
spec:
  group: keycloak.org
  names:
    kind: KeycloakClient
    listKind: KeycloakClientList
    plural: keycloakclients
    singular: keycloakclient
  scope: Namespaced
  versions:
    - name: v1alpha1
      schema:
        openAPIV3Schema:
          description: KeycloakClient is the Schema for the keycloakclients API.
          properties:
            apiVersion:
              description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
              type: string
            kind:
              description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
              type: string
            metadata:
              type: object
            spec:
              description: KeycloakClientSpec defines the desired state of KeycloakClient.
              properties:
                client:
                  description: Keycloak Client REST object.
                  properties:
                    access:
                      additionalProperties:
                        type: boolean
                      description: Access options.
                      type: object
                    adminUrl:
                      description: Application Admin URL.
                      type: string
                    attributes:
                      additionalProperties:
                        type: string
                      description: Client Attributes.
                      type: object
                    authorizationServicesEnabled:
                      description: True if fine-grained authorization support is enabled
                        for this client.
                      type: boolean
                    authorizationSettings:
                      description: Authorization settings for this resource server.
                      properties:
                        allowRemoteResourceManagement:
                          description: True if resources should be managed remotely
                            by the resource server.
                          type: boolean
                        clientId:
                          description: Client ID.
                          type: string
                        decisionStrategy:
                          description: The decision strategy dictates how permissions
                            are evaluated and how a final decision is obtained. 'Affirmative'
                            means that at least one permission must evaluate to a positive
                            decision in order to grant access to a resource and its
                            scopes. 'Unanimous' means that all permissions must evaluate
                            to a positive decision in order for the final decision to
                            be also positive.
                          type: string
                        id:
                          description: ID.
                          type: string
                        name:
                          description: Name.
                          type: string
                        policies:
                          description: Policies.
                          items:
                            description: https://www.keycloak.org/docs-api/12.0/rest-api/index.html#_policyrepresentation
                            properties:
                              config:
                                additionalProperties:
                                  type: string
                                description: Config.
                                type: object
                              decisionStrategy:
                                description: The decision strategy dictates how the
                                  policies associated with a given permission are evaluated
                                  and how a final decision is obtained. 'Affirmative'
                                  means that at least one policy must evaluate to a
                                  positive decision in order for the final decision
                                  to be also positive. 'Unanimous' means that all policies
                                  must evaluate to a positive decision in order for
                                  the final decision to be also positive. 'Consensus'
                                  means that the number of positive decisions must be
                                  greater than the number of negative decisions. If
                                  the number of positive and negative is the same, the
                                  final decision will be negative.
                                type: string
                              description:
                                description: A description for this policy.
                                type: string
                              id:
                                description: ID.
                                type: string
                              logic:
                                description: The logic dictates how the policy decision
                                  should be made. If 'Positive', the resulting effect
                                  (permit or deny) obtained during the evaluation of
                                  this policy will be used to perform a decision. If
                                  'Negative', the resulting effect will be negated,
                                  in other words, a permit becomes a deny and vice-versa.
                                type: string
                              name:
                                description: The name of this policy.
                                type: string
                              owner:
                                description: Owner.
                                type: string
                              policies:
                                description: Policies.
                                items:
                                  type: string
                                type: array
                              resources:
                                description: Resources.
                                items:
                                  type: string
                                type: array
                              resourcesData:
                                description: Resources Data.
                                items:
                                  description: https://www.keycloak.org/docs-api/12.0/rest-api/index.html#_resourcerepresentation
                                  properties:
                                    _id:
                                      description: ID.
                                      type: string
                                    attributes:
                                      additionalProperties:
                                        type: string
                                      description: The attributes associated with the
                                        resource.
                                      type: object
                                    displayName:
                                      description: A unique name for this resource.
                                        The name can be used to uniquely identify a
                                        resource, useful when querying for a specific
                                        resource.
                                      type: string
                                    icon_uri:
                                      description: An URI pointing to an icon.
                                      type: string
                                    name:
                                      description: A unique name for this resource.
                                        The name can be used to uniquely identify a
                                        resource, useful when querying for a specific
                                        resource.
                                      type: string
                                    ownerManagedAccess:
                                      description: True if the access to this resource
                                        can be managed by the resource owner.
                                      type: boolean
                                    scopes:
                                      description: The scopes associated with this resource.
                                      items:
                                        x-kubernetes-preserve-unknown-fields: true
                                      type: array
                                    type:
                                      description: The type of this resource. It can
                                        be used to group different resource instances
                                        with the same type.
                                      type: string
                                    uris:
                                      description: Set of URIs which are protected by
                                        resource.
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                type: array
                              scopes:
                                description: Scopes.
                                items:
                                  type: string
                                type: array
                              scopesData:
                                description: Scopes Data.
                                items:
                                  x-kubernetes-preserve-unknown-fields: true
                                type: array
                              type:
                                description: Type.
                                type: string
                            type: object
                          type: array
                        policyEnforcementMode:
                          description: The policy enforcement mode dictates how policies
                            are enforced when evaluating authorization requests. 'Enforcing'
                            means requests are denied by default even when there is
                            no policy associated with a given resource. 'Permissive'
                            means requests are allowed even when there is no policy
                            associated with a given resource. 'Disabled' completely
                            disables the evaluation of policies and allows access to
                            any resource.
                          type: string
                        resources:
                          description: Resources.
                          items:
                            description: https://www.keycloak.org/docs-api/12.0/rest-api/index.html#_resourcerepresentation
                            properties:
                              _id:
                                description: ID.
                                type: string
                              attributes:
                                additionalProperties:
                                  type: string
                                description: The attributes associated with the resource.
                                type: object
                              displayName:
                                description: A unique name for this resource. The name
                                  can be used to uniquely identify a resource, useful
                                  when querying for a specific resource.
                                type: string
                              icon_uri:
                                description: An URI pointing to an icon.
                                type: string
                              name:
                                description: A unique name for this resource. The name
                                  can be used to uniquely identify a resource, useful
                                  when querying for a specific resource.
                                type: string
                              ownerManagedAccess:
                                description: True if the access to this resource can
                                  be managed by the resource owner.
                                type: boolean
                              scopes:
                                description: The scopes associated with this resource.
                                items:
                                  x-kubernetes-preserve-unknown-fields: true
                                type: array
                              type:
                                description: The type of this resource. It can be used
                                  to group different resource instances with the same
                                  type.
                                type: string
                              uris:
                                description: Set of URIs which are protected by resource.
                                items:
                                  type: string
                                type: array
                            type: object
                          type: array
                        scopes:
                          description: Authorization Scopes.
                          items:
                            description: https://www.keycloak.org/docs-api/12.0/rest-api/index.html#_scoperepresentation
                            properties:
                              displayName:
                                description: A unique name for this scope. The name
                                  can be used to uniquely identify a scope, useful when
                                  querying for a specific scope.
                                type: string
                              iconUri:
                                description: An URI pointing to an icon.
                                type: string
                              id:
                                description: ID.
                                type: string
                              name:
                                description: A unique name for this scope. The name
                                  can be used to uniquely identify a scope, useful when
                                  querying for a specific scope.
                                type: string
                              policies:
                                description: Policies.
                                items:
                                  description: https://www.keycloak.org/docs-api/12.0/rest-api/index.html#_policyrepresentation
                                  properties:
                                    config:
                                      additionalProperties:
                                        type: string
                                      description: Config.
                                      type: object
                                    decisionStrategy:
                                      description: The decision strategy dictates how
                                        the policies associated with a given permission
                                        are evaluated and how a final decision is obtained.
                                        'Affirmative' means that at least one policy
                                        must evaluate to a positive decision in order
                                        for the final decision to be also positive.
                                        'Unanimous' means that all policies must evaluate
                                        to a positive decision in order for the final
                                        decision to be also positive. 'Consensus' means
                                        that the number of positive decisions must be
                                        greater than the number of negative decisions.
                                        If the number of positive and negative is the
                                        same, the final decision will be negative.
                                      type: string
                                    description:
                                      description: A description for this policy.
                                      type: string
                                    id:
                                      description: ID.
                                      type: string
                                    logic:
                                      description: The logic dictates how the policy
                                        decision should be made. If 'Positive', the
                                        resulting effect (permit or deny) obtained during
                                        the evaluation of this policy will be used to
                                        perform a decision. If 'Negative', the resulting
                                        effect will be negated, in other words, a permit
                                        becomes a deny and vice-versa.
                                      type: string
                                    name:
                                      description: The name of this policy.
                                      type: string
                                    owner:
                                      description: Owner.
                                      type: string
                                    policies:
                                      description: Policies.
                                      items:
                                        type: string
                                      type: array
                                    resources:
                                      description: Resources.
                                      items:
                                        type: string
                                      type: array
                                    resourcesData:
                                      description: Resources Data.
                                      items:
                                        description: https://www.keycloak.org/docs-api/12.0/rest-api/index.html#_resourcerepresentation
                                        properties:
                                          _id:
                                            description: ID.
                                            type: string
                                          attributes:
                                            additionalProperties:
                                              type: string
                                            description: The attributes associated with
                                              the resource.
                                            type: object
                                          displayName:
                                            description: A unique name for this resource.
                                              The name can be used to uniquely identify
                                              a resource, useful when querying for a
                                              specific resource.
                                            type: string
                                          icon_uri:
                                            description: An URI pointing to an icon.
                                            type: string
                                          name:
                                            description: A unique name for this resource.
                                              The name can be used to uniquely identify
                                              a resource, useful when querying for a
                                              specific resource.
                                            type: string
                                          ownerManagedAccess:
                                            description: True if the access to this
                                              resource can be managed by the resource
                                              owner.
                                            type: boolean
                                          scopes:
                                            description: The scopes associated with
                                              this resource.
                                            items:
                                              x-kubernetes-preserve-unknown-fields: true
                                            type: array
                                          type:
                                            description: The type of this resource.
                                              It can be used to group different resource
                                              instances with the same type.
                                            type: string
                                          uris:
                                            description: Set of URIs which are protected
                                              by resource.
                                            items:
                                              type: string
                                            type: array
                                        type: object
                                      type: array
                                    scopes:
                                      description: Scopes.
                                      items:
                                        type: string
                                      type: array
                                    scopesData:
                                      description: Scopes Data.
                                      items:
                                        x-kubernetes-preserve-unknown-fields: true
                                      type: array
                                    type:
                                      description: Type.
                                      type: string
                                  type: object
                                type: array
                              resources:
                                description: Resources.
                                items:
                                  description: https://www.keycloak.org/docs-api/12.0/rest-api/index.html#_resourcerepresentation
                                  properties:
                                    _id:
                                      description: ID.
                                      type: string
                                    attributes:
                                      additionalProperties:
                                        type: string
                                      description: The attributes associated with the
                                        resource.
                                      type: object
                                    displayName:
                                      description: A unique name for this resource.
                                        The name can be used to uniquely identify a
                                        resource, useful when querying for a specific
                                        resource.
                                      type: string
                                    icon_uri:
                                      description: An URI pointing to an icon.
                                      type: string
                                    name:
                                      description: A unique name for this resource.
                                        The name can be used to uniquely identify a
                                        resource, useful when querying for a specific
                                        resource.
                                      type: string
                                    ownerManagedAccess:
                                      description: True if the access to this resource
                                        can be managed by the resource owner.
                                      type: boolean
                                    scopes:
                                      description: The scopes associated with this resource.
                                      items:
                                        x-kubernetes-preserve-unknown-fields: true
                                      type: array
                                    type:
                                      description: The type of this resource. It can
                                        be used to group different resource instances
                                        with the same type.
                                      type: string
                                    uris:
                                      description: Set of URIs which are protected by
                                        resource.
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                type: array
                            type: object
                          type: array
                      type: object
                    baseUrl:
                      description: Application base URL.
                      type: string
                    bearerOnly:
                      description: True if a client supports only Bearer Tokens.
                      type: boolean
                    clientAuthenticatorType:
                      description: What Client authentication type to use.
                      type: string
                    clientId:
                      description: Client ID.
                      type: string
                    consentRequired:
                      description: True if Consent Screen is required.
                      type: boolean
                    defaultClientScopes:
                      description: A list of default client scopes. Default client scopes
                        are always applied when issuing OpenID Connect tokens or SAML
                        assertions for this client.
                      items:
                        type: string
                      type: array
                    defaultRoles:
                      description: Default Client roles.
                      items:
                        type: string
                      type: array
                    description:
                      description: Client description.
                      type: string
                    directAccessGrantsEnabled:
                      description: True if Direct Grant is enabled.
                      type: boolean
                    enabled:
                      description: Client enabled flag.
                      type: boolean
                    frontchannelLogout:
                      description: True if this client supports Front Channel logout.
                      type: boolean
                    fullScopeAllowed:
                      description: True if Full Scope is allowed.
                      type: boolean
                    id:
                      description: Client ID. If not specified, automatically generated.
                      type: string
                    implicitFlowEnabled:
                      description: True if Implicit flow is enabled.
                      type: boolean
                    name:
                      description: Client name.
                      type: string
                    nodeReRegistrationTimeout:
                      description: Node registration timeout.
                      type: integer
                    notBefore:
                      description: Not Before setting.
                      type: integer
                    optionalClientScopes:
                      description: A list of optional client scopes. Optional client
                        scopes are applied when issuing tokens for this client, but
                        only when they are requested by the scope parameter in the OpenID
                        Connect authorization request.
                      items:
                        type: string
                      type: array
                    protocol:
                      description: Protocol used for this Client.
                      type: string
                    protocolMappers:
                      description: Protocol Mappers.
                      items:
                        properties:
                          config:
                            additionalProperties:
                              type: string
                            description: Config options.
                            type: object
                          consentRequired:
                            description: True if Consent Screen is required.
                            type: boolean
                          consentText:
                            description: Text to use for displaying Consent Screen.
                            type: string
                          id:
                            description: Protocol Mapper ID.
                            type: string
                          name:
                            description: Protocol Mapper Name.
                            type: string
                          protocol:
                            description: Protocol to use.
                            type: string
                          protocolMapper:
                            description: Protocol Mapper to use
                            type: string
                        type: object
                      type: array
                    publicClient:
                      description: True if this is a public Client.
                      type: boolean
                    redirectUris:
                      description: A list of valid Redirection URLs.
                      items:
                        type: string
                      type: array
                    rootUrl:
                      description: Application root URL.
                      type: string
                    secret:
                      description: Client Secret. The Operator will automatically create
                        a Secret based on this value.
                      type: string
                    serviceAccountsEnabled:
                      description: True if Service Accounts are enabled.
                      type: boolean
                    standardFlowEnabled:
                      description: True if Standard flow is enabled.
                      type: boolean
                    surrogateAuthRequired:
                      description: Surrogate Authentication Required option.
                      type: boolean
                    useTemplateConfig:
                      description: True to use a Template Config.
                      type: boolean
                    useTemplateMappers:
                      description: True to use Template Mappers.
                      type: boolean
                    useTemplateScope:
                      description: True to use Template Scope.
                      type: boolean
                    webOrigins:
                      description: A list of valid Web Origins.
                      items:
                        type: string
                      type: array
                  required:
                    - clientId
                  type: object
                realmSelector:
                  description: Selector for looking up KeycloakRealm Custom Resources.
                  properties:
                    matchExpressions:
                      description: matchExpressions is a list of label selector requirements.
                        The requirements are ANDed.
                      items:
                        description: A label selector requirement is a selector that
                          contains values, a key, and an operator that relates the key
                          and values.
                        properties:
                          key:
                            description: key is the label key that the selector applies
                              to.
                            type: string
                          operator:
                            description: operator represents a key's relationship to
                              a set of values. Valid operators are In, NotIn, Exists
                              and DoesNotExist.
                            type: string
                          values:
                            description: values is an array of string values. If the
                              operator is In or NotIn, the values array must be non-empty.
                              If the operator is Exists or DoesNotExist, the values
                              array must be empty. This array is replaced during a strategic
                              merge patch.
                            items:
                              type: string
                            type: array
                        required:
                          - key
                          - operator
                        type: object
                      type: array
                    matchLabels:
                      additionalProperties:
                        type: string
                      description: matchLabels is a map of {key,value} pairs. A single
                        {key,value} in the matchLabels map is equivalent to an element
                        of matchExpressions, whose key field is "key", the operator
                        is "In", and the values array contains only "value". The requirements
                        are ANDed.
                      type: object
                  type: object
                roles:
                  description: Client Roles
                  items:
                    description: https://www.keycloak.org/docs-api/11.0/rest-api/index.html#_rolerepresentation
                    properties:
                      attributes:
                        additionalProperties:
                          items:
                            type: string
                          type: array
                        description: Role Attributes
                        type: object
                      clientRole:
                        description: Client Role
                        type: boolean
                      composite:
                        description: Composite
                        type: boolean
                      composites:
                        description: Composites
                        properties:
                          client:
                            additionalProperties:
                              items:
                                type: string
                              type: array
                            description: Map client => []role
                            type: object
                          realm:
                            description: Realm roles
                            items:
                              type: string
                            type: array
                        type: object
                      containerId:
                        description: Container Id
                        type: string
                      description:
                        description: Description
                        type: string
                      id:
                        description: Id
                        type: string
                      name:
                        description: Name
                        type: string
                    required:
                      - name
                    type: object
                  type: array
                  x-kubernetes-list-map-keys:
                    - name
                  x-kubernetes-list-type: map
                scopeMappings:
                  description: Scope Mappings
                  properties:
                    clientMappings:
                      additionalProperties:
                        description: https://www.keycloak.org/docs-api/11.0/rest-api/index.html#_clientmappingsrepresentation
                        properties:
                          client:
                            description: Client
                            type: string
                          id:
                            description: ID
                            type: string
                          mappings:
                            description: Mappings
                            items:
                              description: https://www.keycloak.org/docs-api/11.0/rest-api/index.html#_rolerepresentation
                              properties:
                                attributes:
                                  additionalProperties:
                                    items:
                                      type: string
                                    type: array
                                  description: Role Attributes
                                  type: object
                                clientRole:
                                  description: Client Role
                                  type: boolean
                                composite:
                                  description: Composite
                                  type: boolean
                                composites:
                                  description: Composites
                                  properties:
                                    client:
                                      additionalProperties:
                                        items:
                                          type: string
                                        type: array
                                      description: Map client => []role
                                      type: object
                                    realm:
                                      description: Realm roles
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                containerId:
                                  description: Container Id
                                  type: string
                                description:
                                  description: Description
                                  type: string
                                id:
                                  description: Id
                                  type: string
                                name:
                                  description: Name
                                  type: string
                              required:
                                - name
                              type: object
                            type: array
                        type: object
                      description: Client Mappings
                      type: object
                    realmMappings:
                      description: Realm Mappings
                      items:
                        description: https://www.keycloak.org/docs-api/11.0/rest-api/index.html#_rolerepresentation
                        properties:
                          attributes:
                            additionalProperties:
                              items:
                                type: string
                              type: array
                            description: Role Attributes
                            type: object
                          clientRole:
                            description: Client Role
                            type: boolean
                          composite:
                            description: Composite
                            type: boolean
                          composites:
                            description: Composites
                            properties:
                              client:
                                additionalProperties:
                                  items:
                                    type: string
                                  type: array
                                description: Map client => []role
                                type: object
                              realm:
                                description: Realm roles
                                items:
                                  type: string
                                type: array
                            type: object
                          containerId:
                            description: Container Id
                            type: string
                          description:
                            description: Description
                            type: string
                          id:
                            description: Id
                            type: string
                          name:
                            description: Name
                            type: string
                        required:
                          - name
                        type: object
                      type: array
                  type: object
              required:
                - client
                - realmSelector
              type: object
            status:
              description: KeycloakClientStatus defines the observed state of KeycloakClient
              properties:
                message:
                  description: Human-readable message indicating details about current
                    operator phase or error.
                  type: string
                phase:
                  description: Current phase of the operator.
                  type: string
                ready:
                  description: True if all resources are in a ready state and all work
                    is done.
                  type: boolean
                secondaryResources:
                  additionalProperties:
                    items:
                      type: string
                    type: array
                  description: 'A map of all the secondary resources types and names
                  created for this CR. e.g "Deployment": [ "DeploymentName1", "DeploymentName2"
                  ]'
                  type: object
              required:
                - message
                - phase
                - ready
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}