# coding=utf-8
# *** WARNING: this file was generated by pulumi-language-python. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import builtins as _builtins
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities
from . import outputs

__all__ = [
    'RuleIdpDiscoveryAppExclude',
    'RuleIdpDiscoveryAppInclude',
    'RuleIdpDiscoveryIdpProvider',
    'RuleIdpDiscoveryPlatformInclude',
    'RuleIdpDiscoveryUserIdentifierPattern',
    'RuleMfaAppExclude',
    'RuleMfaAppInclude',
    'RuleSignonFactorSequence',
    'RuleSignonFactorSequenceSecondaryCriteria',
]

@pulumi.output_type
class RuleIdpDiscoveryAppExclude(dict):
    def __init__(__self__, *,
                 type: _builtins.str,
                 id: Optional[_builtins.str] = None,
                 name: Optional[_builtins.str] = None):
        pulumi.set(__self__, "type", type)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @_builtins.property
    @pulumi.getter
    def type(self) -> _builtins.str:
        return pulumi.get(self, "type")

    @_builtins.property
    @pulumi.getter
    def id(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "id")

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "name")


@pulumi.output_type
class RuleIdpDiscoveryAppInclude(dict):
    def __init__(__self__, *,
                 type: _builtins.str,
                 id: Optional[_builtins.str] = None,
                 name: Optional[_builtins.str] = None):
        pulumi.set(__self__, "type", type)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @_builtins.property
    @pulumi.getter
    def type(self) -> _builtins.str:
        return pulumi.get(self, "type")

    @_builtins.property
    @pulumi.getter
    def id(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "id")

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "name")


@pulumi.output_type
class RuleIdpDiscoveryIdpProvider(dict):
    def __init__(__self__, *,
                 id: Optional[_builtins.str] = None,
                 type: Optional[_builtins.str] = None):
        """
        :param _builtins.str id: The identifier for the Idp the rule should route to if all conditions are met.
        :param _builtins.str type: Type of IdP. One of: `AMAZON`, `APPLE`, `DISCORD`, `FACEBOOK`, `GITHUB`, `GITLAB`, `GOOGLE`, `IDV_CLEAR`, `IDV_INCODE`, `IDV_PERSONA`, `LINKEDIN`, `LOGINGOV`, `LOGINGOV_SANDBOX`, `MICROSOFT`, `OIDC`, `PAYPAL`, `PAYPAL_SANDBOX`, `SALESFORCE`, `SAML2`, `SPOTIFY`, `X509`, `XERO`, `YAHOO`, `YAHOOJP`, Default: `OKTA`
        """
        if id is not None:
            pulumi.set(__self__, "id", id)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @_builtins.property
    @pulumi.getter
    def id(self) -> Optional[_builtins.str]:
        """
        The identifier for the Idp the rule should route to if all conditions are met.
        """
        return pulumi.get(self, "id")

    @_builtins.property
    @pulumi.getter
    def type(self) -> Optional[_builtins.str]:
        """
        Type of IdP. One of: `AMAZON`, `APPLE`, `DISCORD`, `FACEBOOK`, `GITHUB`, `GITLAB`, `GOOGLE`, `IDV_CLEAR`, `IDV_INCODE`, `IDV_PERSONA`, `LINKEDIN`, `LOGINGOV`, `LOGINGOV_SANDBOX`, `MICROSOFT`, `OIDC`, `PAYPAL`, `PAYPAL_SANDBOX`, `SALESFORCE`, `SAML2`, `SPOTIFY`, `X509`, `XERO`, `YAHOO`, `YAHOOJP`, Default: `OKTA`
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class RuleIdpDiscoveryPlatformInclude(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "osExpression":
            suggest = "os_expression"
        elif key == "osType":
            suggest = "os_type"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in RuleIdpDiscoveryPlatformInclude. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        RuleIdpDiscoveryPlatformInclude.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        RuleIdpDiscoveryPlatformInclude.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 os_expression: Optional[_builtins.str] = None,
                 os_type: Optional[_builtins.str] = None,
                 type: Optional[_builtins.str] = None):
        """
        :param _builtins.str os_expression: Only available with OTHER OS type
        """
        if os_expression is not None:
            pulumi.set(__self__, "os_expression", os_expression)
        if os_type is not None:
            pulumi.set(__self__, "os_type", os_type)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @_builtins.property
    @pulumi.getter(name="osExpression")
    def os_expression(self) -> Optional[_builtins.str]:
        """
        Only available with OTHER OS type
        """
        return pulumi.get(self, "os_expression")

    @_builtins.property
    @pulumi.getter(name="osType")
    def os_type(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "os_type")

    @_builtins.property
    @pulumi.getter
    def type(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "type")


@pulumi.output_type
class RuleIdpDiscoveryUserIdentifierPattern(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "matchType":
            suggest = "match_type"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in RuleIdpDiscoveryUserIdentifierPattern. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        RuleIdpDiscoveryUserIdentifierPattern.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        RuleIdpDiscoveryUserIdentifierPattern.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 match_type: Optional[_builtins.str] = None,
                 value: Optional[_builtins.str] = None):
        if match_type is not None:
            pulumi.set(__self__, "match_type", match_type)
        if value is not None:
            pulumi.set(__self__, "value", value)

    @_builtins.property
    @pulumi.getter(name="matchType")
    def match_type(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "match_type")

    @_builtins.property
    @pulumi.getter
    def value(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "value")


@pulumi.output_type
class RuleMfaAppExclude(dict):
    def __init__(__self__, *,
                 type: _builtins.str,
                 id: Optional[_builtins.str] = None,
                 name: Optional[_builtins.str] = None):
        pulumi.set(__self__, "type", type)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @_builtins.property
    @pulumi.getter
    def type(self) -> _builtins.str:
        return pulumi.get(self, "type")

    @_builtins.property
    @pulumi.getter
    def id(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "id")

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "name")


@pulumi.output_type
class RuleMfaAppInclude(dict):
    def __init__(__self__, *,
                 type: _builtins.str,
                 id: Optional[_builtins.str] = None,
                 name: Optional[_builtins.str] = None):
        pulumi.set(__self__, "type", type)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @_builtins.property
    @pulumi.getter
    def type(self) -> _builtins.str:
        return pulumi.get(self, "type")

    @_builtins.property
    @pulumi.getter
    def id(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "id")

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "name")


@pulumi.output_type
class RuleSignonFactorSequence(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "primaryCriteriaFactorType":
            suggest = "primary_criteria_factor_type"
        elif key == "primaryCriteriaProvider":
            suggest = "primary_criteria_provider"
        elif key == "secondaryCriterias":
            suggest = "secondary_criterias"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in RuleSignonFactorSequence. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        RuleSignonFactorSequence.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        RuleSignonFactorSequence.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 primary_criteria_factor_type: _builtins.str,
                 primary_criteria_provider: _builtins.str,
                 secondary_criterias: Optional[Sequence['outputs.RuleSignonFactorSequenceSecondaryCriteria']] = None):
        """
        :param _builtins.str primary_criteria_factor_type: Type of a Factor
        :param _builtins.str primary_criteria_provider: Factor provider
        """
        pulumi.set(__self__, "primary_criteria_factor_type", primary_criteria_factor_type)
        pulumi.set(__self__, "primary_criteria_provider", primary_criteria_provider)
        if secondary_criterias is not None:
            pulumi.set(__self__, "secondary_criterias", secondary_criterias)

    @_builtins.property
    @pulumi.getter(name="primaryCriteriaFactorType")
    def primary_criteria_factor_type(self) -> _builtins.str:
        """
        Type of a Factor
        """
        return pulumi.get(self, "primary_criteria_factor_type")

    @_builtins.property
    @pulumi.getter(name="primaryCriteriaProvider")
    def primary_criteria_provider(self) -> _builtins.str:
        """
        Factor provider
        """
        return pulumi.get(self, "primary_criteria_provider")

    @_builtins.property
    @pulumi.getter(name="secondaryCriterias")
    def secondary_criterias(self) -> Optional[Sequence['outputs.RuleSignonFactorSequenceSecondaryCriteria']]:
        return pulumi.get(self, "secondary_criterias")


@pulumi.output_type
class RuleSignonFactorSequenceSecondaryCriteria(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "factorType":
            suggest = "factor_type"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in RuleSignonFactorSequenceSecondaryCriteria. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        RuleSignonFactorSequenceSecondaryCriteria.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        RuleSignonFactorSequenceSecondaryCriteria.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 factor_type: _builtins.str,
                 provider: _builtins.str):
        """
        :param _builtins.str factor_type: Type of a Factor
        :param _builtins.str provider: Factor provider
        """
        pulumi.set(__self__, "factor_type", factor_type)
        pulumi.set(__self__, "provider", provider)

    @_builtins.property
    @pulumi.getter(name="factorType")
    def factor_type(self) -> _builtins.str:
        """
        Type of a Factor
        """
        return pulumi.get(self, "factor_type")

    @_builtins.property
    @pulumi.getter
    def provider(self) -> _builtins.str:
        """
        Factor provider
        """
        return pulumi.get(self, "provider")


