# The Okta software accompanied by this notice is provided pursuant to the following terms:
# Copyright © 2025-Present, Okta, Inc.
# 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.
# coding: utf-8

"""
Okta Admin Management

Allows customers to easily access the Okta Management APIs

The version of the OpenAPI document: 5.1.0
Contact: devex-public@okta.com
Generated by OpenAPI Generator (https://openapi-generator.tech)

Do not edit the class manually.
"""  # noqa: E501

from __future__ import annotations

import json
from enum import Enum

from typing_extensions import Self


class GrantType(str, Enum):
    """
    Determines the mechanism Okta uses to authorize the creation of the tokens.
    """

    """
    allowed enum values
    """
    AUTHORIZATION_CODE = "authorization_code"
    CLIENT_CREDENTIALS = "client_credentials"
    IMPLICIT = "implicit"
    INTERACTION_CODE = "interaction_code"
    PASSWORD = "password"
    REFRESH_TOKEN = "refresh_token"
    URN_COLON_IETF_COLON_PARAMS_COLON_OAUTH_COLON_GRANT_MINUS_TYPE_COLON_DEVICE_CODE = (
        "urn:ietf:params:oauth:grant-type:device_code"
    )
    URN_COLON_IETF_COLON_PARAMS_COLON_OAUTH_COLON_GRANT_MINUS_TYPE_COLON_JWT_MINUS_BEARER = (
        "urn:ietf:params:oauth:grant-type:jwt-bearer"
    )
    URN_COLON_IETF_COLON_PARAMS_COLON_OAUTH_COLON_GRANT_MINUS_TYPE_COLON_SAML2_MINUS_BEARER = (
        "urn:ietf:params:oauth:grant-type:saml2-bearer"
    )
    URN_COLON_IETF_COLON_PARAMS_COLON_OAUTH_COLON_GRANT_MINUS_TYPE_COLON_TOKEN_MINUS_EXCHANGE = (
        "urn:ietf:params:oauth:grant-type:token-exchange"
    )
    URN_COLON_OPENID_COLON_PARAMS_COLON_GRANT_MINUS_TYPE_COLON_CIBA = (
        "urn:openid:params:grant-type:ciba"
    )
    URN_COLON_OKTA_COLON_PARAMS_COLON_OAUTH_COLON_GRANT_MINUS_TYPE_COLON_OTP = (
        "urn:okta:params:oauth:grant-type:otp"
    )
    URN_COLON_OKTA_COLON_PARAMS_COLON_OAUTH_COLON_GRANT_MINUS_TYPE_COLON_OOB = (
        "urn:okta:params:oauth:grant-type:oob"
    )
    HTTP_COLON_SLASH_SLASH_AUTH0_DOT_COM_SLASH_OAUTH_SLASH_GRANT_MINUS_TYPE_SLASH_MFA_MINUS_OTP = (
        "http://auth0.com/oauth/grant-type/mfa-otp"
    )
    HTTP_COLON_SLASH_SLASH_AUTH0_DOT_COM_SLASH_OAUTH_SLASH_GRANT_MINUS_TYPE_SLASH_MFA_MINUS_OOB = (
        "http://auth0.com/oauth/grant-type/mfa-oob"
    )

    @classmethod
    def from_json(cls, json_str: str) -> Self:
        """Create an instance of GrantType from a JSON string"""
        return cls(json.loads(json_str))
