# autogenerated module
from typing import List, Optional

from ._schema import dataclass, field, DictMixin

from . import meta_v1


@dataclass
class TokenReview(DictMixin):
    """TokenReview attempts to authenticate a token to a known user. Note:
      TokenReview requests may be cached by the webhook token authenticator plugin
      in the kube-apiserver.

      **parameters**

      * **spec** ``TokenReviewSpec`` - Spec holds information about the request being evaluated
      * **apiVersion** ``Optional[str]`` - 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
      * **kind** ``Optional[str]`` - 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
      * **metadata** ``Optional[meta_v1.ObjectMeta]`` - 
      * **status** ``Optional[TokenReviewStatus]`` - Status is filled in by the server and indicates whether the request can be
        authenticated.
    """
    spec: 'TokenReviewSpec'
    apiVersion: 'Optional[str]' = None
    kind: 'Optional[str]' = None
    metadata: 'Optional[meta_v1.ObjectMeta]' = None
    status: 'Optional[TokenReviewStatus]' = None


@dataclass
class TokenReviewSpec(DictMixin):
    """TokenReviewSpec is a description of the token authentication request.

      **parameters**

      * **audiences** ``Optional[List[str]]`` - Audiences is a list of the identifiers that the resource server presented with
        the token identifies as. Audience-aware token authenticators will verify that
        the token was intended for at least one of the audiences in this list. If no
        audiences are provided, the audience will default to the audience of the
        Kubernetes apiserver.
      * **token** ``Optional[str]`` - Token is the opaque bearer token.
    """
    audiences: 'Optional[List[str]]' = None
    token: 'Optional[str]' = None


@dataclass
class TokenReviewStatus(DictMixin):
    """TokenReviewStatus is the result of the token authentication request.

      **parameters**

      * **audiences** ``Optional[List[str]]`` - Audiences are audience identifiers chosen by the authenticator that are
        compatible with both the TokenReview and token. An identifier is any
        identifier in the intersection of the TokenReviewSpec audiences and the
        token's audiences. A client of the TokenReview API that sets the
        spec.audiences field should validate that a compatible audience identifier is
        returned in the status.audiences field to ensure that the TokenReview server
        is audience aware. If a TokenReview returns an empty status.audience field
        where status.authenticated is "true", the token is valid against the audience
        of the Kubernetes API server.
      * **authenticated** ``Optional[bool]`` - Authenticated indicates that the token was associated with a known user.
      * **error** ``Optional[str]`` - Error indicates that the token couldn't be checked
      * **user** ``Optional[UserInfo]`` - User is the UserInfo associated with the provided token.
    """
    audiences: 'Optional[List[str]]' = None
    authenticated: 'Optional[bool]' = None
    error: 'Optional[str]' = None
    user: 'Optional[UserInfo]' = None


@dataclass
class UserInfo(DictMixin):
    """UserInfo holds the information about the user needed to implement the
      user.Info interface.

      **parameters**

      * **extra** ``Optional[dict]`` - Any additional information provided by the authenticator.
      * **groups** ``Optional[List[str]]`` - The names of groups this user is a part of.
      * **uid** ``Optional[str]`` - A unique value that identifies this user across time. If this user is deleted
        and another user by the same name is added, they will have different UIDs.
      * **username** ``Optional[str]`` - The name that uniquely identifies this user among all active users.
    """
    extra: 'Optional[dict]' = None
    groups: 'Optional[List[str]]' = None
    uid: 'Optional[str]' = None
    username: 'Optional[str]' = None


