# 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

__all__ = ['SamlKeyArgs', 'SamlKey']

@pulumi.input_type
class SamlKeyArgs:
    def __init__(__self__, *,
                 x5cs: pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]):
        """
        The set of arguments for constructing a SamlKey resource.

        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] x5cs: base64-encoded X.509 certificate chain with DER encoding
        """
        pulumi.set(__self__, "x5cs", x5cs)

    @_builtins.property
    @pulumi.getter
    def x5cs(self) -> pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]:
        """
        base64-encoded X.509 certificate chain with DER encoding
        """
        return pulumi.get(self, "x5cs")

    @x5cs.setter
    def x5cs(self, value: pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]):
        pulumi.set(self, "x5cs", value)


@pulumi.input_type
class _SamlKeyState:
    def __init__(__self__, *,
                 created: Optional[pulumi.Input[_builtins.str]] = None,
                 expires_at: Optional[pulumi.Input[_builtins.str]] = None,
                 kid: Optional[pulumi.Input[_builtins.str]] = None,
                 kty: Optional[pulumi.Input[_builtins.str]] = None,
                 use: Optional[pulumi.Input[_builtins.str]] = None,
                 x5cs: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 x5t_s256: Optional[pulumi.Input[_builtins.str]] = None):
        """
        Input properties used for looking up and filtering SamlKey resources.

        :param pulumi.Input[_builtins.str] created: Date created.
        :param pulumi.Input[_builtins.str] expires_at: Date the cert expires.
        :param pulumi.Input[_builtins.str] kid: Key ID.
        :param pulumi.Input[_builtins.str] kty: Identifies the cryptographic algorithm family used with the key.
        :param pulumi.Input[_builtins.str] use: Intended use of the public key.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] x5cs: base64-encoded X.509 certificate chain with DER encoding
        :param pulumi.Input[_builtins.str] x5t_s256: base64url-encoded SHA-256 thumbprint of the DER encoding of an X.509 certificate.
        """
        if created is not None:
            pulumi.set(__self__, "created", created)
        if expires_at is not None:
            pulumi.set(__self__, "expires_at", expires_at)
        if kid is not None:
            pulumi.set(__self__, "kid", kid)
        if kty is not None:
            pulumi.set(__self__, "kty", kty)
        if use is not None:
            pulumi.set(__self__, "use", use)
        if x5cs is not None:
            pulumi.set(__self__, "x5cs", x5cs)
        if x5t_s256 is not None:
            pulumi.set(__self__, "x5t_s256", x5t_s256)

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

    @created.setter
    def created(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "created", value)

    @_builtins.property
    @pulumi.getter(name="expiresAt")
    def expires_at(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Date the cert expires.
        """
        return pulumi.get(self, "expires_at")

    @expires_at.setter
    def expires_at(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "expires_at", value)

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

    @kid.setter
    def kid(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "kid", value)

    @_builtins.property
    @pulumi.getter
    def kty(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Identifies the cryptographic algorithm family used with the key.
        """
        return pulumi.get(self, "kty")

    @kty.setter
    def kty(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "kty", value)

    @_builtins.property
    @pulumi.getter
    def use(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Intended use of the public key.
        """
        return pulumi.get(self, "use")

    @use.setter
    def use(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "use", value)

    @_builtins.property
    @pulumi.getter
    def x5cs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        base64-encoded X.509 certificate chain with DER encoding
        """
        return pulumi.get(self, "x5cs")

    @x5cs.setter
    def x5cs(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "x5cs", value)

    @_builtins.property
    @pulumi.getter(name="x5tS256")
    def x5t_s256(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        base64url-encoded SHA-256 thumbprint of the DER encoding of an X.509 certificate.
        """
        return pulumi.get(self, "x5t_s256")

    @x5t_s256.setter
    def x5t_s256(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "x5t_s256", value)


@pulumi.type_token("okta:idp/samlKey:SamlKey")
class SamlKey(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 x5cs: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 __props__=None):
        """
        This resource allows you to create and configure a SAML Identity Provider Signing Key.

        Identity Provider Signing Key can not be updated, it can only be created or removed. Thus, in situation
        where Identity Provider Signing Key should be updated, one can not simply change `x5c` and apply the changes.
        This will cause the error, because the key can not be removed if it's used by the provider. To avoid this situation,
        the behavior of the resource update process is as follows:

        - create a new identity provider key
        - list all identity providers that are using the old key (**even the ones that are managed outside terraform!**)
        - assign a new key to these identity providers
        - remove old identity provider key

        For more details, please refer to the original issue.

        ## Example Usage

        ```python
        import pulumi
        import pulumi_okta as okta

        example1 = okta.idp.SamlKey("example_1", x5cs=[example["certificate"]])
        example2 = okta.idp.SamlKey("example_2", x5cs=[\"\"\"MIIDnjCCAoagAwIBAgIGAVG3MN+PMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5p
        YTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEDAOBgNVBAMM
        B2V4YW1wbGUxHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMTUxMjE4MjIyMjMyWhcNMjUxMjE4MjIyMzMyWjCB
        jzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9r
        dGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRAwDgYDVQQDDAdleGFtcGxlMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29t
        MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtcnyvuVCrsFEKCwHDenS3Ocjed8eWDv3zLtD2K/iZfE8BMj2wpTf
        n6Ry8zCYey3mWlKdxIybnV9amrujGRnE0ab6Q16v9D6RlFQLOG6dwqoRKuZy33Uyg8PGdEudZjGbWuKCqqXEp+UKALJHV+k4
        wWeVH8g5d1n3KyR2TVajVJpCrPhLFmq1Il4G/IUnPe4MvjXqB6CpKkog1+ThWsItPRJPAM+RweFHXq7KfChXsYE7Mmfuly8s
        DQlvBmQyxZnFHVuiPfCvGHJjpvHy11YlHdOjfgqHRvZbmo30+y0X/oY/yV4YEJ00LL6eJWU4wi7ViY3HP6/VCdRjHoRdr5L/
        DwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCzzhOFkvyYLNFj2WDcq1YqD4sBy1iCia9QpRH3rjQvMKDwQDYWbi6EdOX0TQ/I
        YR7UWGj+2pXd6v0t33lYtoKocp/4lUvT3tfBnWZ5KnObi+J2uY2teUqoYkASN7F+GRPVOuMVoVgm05ss8tuMb2dLc9vsx93s
        Dt+XlMTv/2qi5VPwaDtqduKkzwW9lUfn4xIMkTiVvCpe0X2HneD2Bpuao3/U8Rk0uiPfq6TooWaoW3kjsmErhEAs9bA7xuqo
        1KKY9CdHcFhkSsMhoeaZylZHtzbnoipUlQKSLMdJQiiYZQ0bYL83/Ta9fulr1EERICMFt3GUmtYaZZKHpWSfdJp9\"\"\"])
        ```

        ## Import

        ```sh
        $ pulumi import okta:idp/samlKey:SamlKey example <key_id>
        ```


        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] x5cs: base64-encoded X.509 certificate chain with DER encoding
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: SamlKeyArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        This resource allows you to create and configure a SAML Identity Provider Signing Key.

        Identity Provider Signing Key can not be updated, it can only be created or removed. Thus, in situation
        where Identity Provider Signing Key should be updated, one can not simply change `x5c` and apply the changes.
        This will cause the error, because the key can not be removed if it's used by the provider. To avoid this situation,
        the behavior of the resource update process is as follows:

        - create a new identity provider key
        - list all identity providers that are using the old key (**even the ones that are managed outside terraform!**)
        - assign a new key to these identity providers
        - remove old identity provider key

        For more details, please refer to the original issue.

        ## Example Usage

        ```python
        import pulumi
        import pulumi_okta as okta

        example1 = okta.idp.SamlKey("example_1", x5cs=[example["certificate"]])
        example2 = okta.idp.SamlKey("example_2", x5cs=[\"\"\"MIIDnjCCAoagAwIBAgIGAVG3MN+PMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5p
        YTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEDAOBgNVBAMM
        B2V4YW1wbGUxHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMTUxMjE4MjIyMjMyWhcNMjUxMjE4MjIyMzMyWjCB
        jzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9r
        dGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRAwDgYDVQQDDAdleGFtcGxlMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29t
        MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtcnyvuVCrsFEKCwHDenS3Ocjed8eWDv3zLtD2K/iZfE8BMj2wpTf
        n6Ry8zCYey3mWlKdxIybnV9amrujGRnE0ab6Q16v9D6RlFQLOG6dwqoRKuZy33Uyg8PGdEudZjGbWuKCqqXEp+UKALJHV+k4
        wWeVH8g5d1n3KyR2TVajVJpCrPhLFmq1Il4G/IUnPe4MvjXqB6CpKkog1+ThWsItPRJPAM+RweFHXq7KfChXsYE7Mmfuly8s
        DQlvBmQyxZnFHVuiPfCvGHJjpvHy11YlHdOjfgqHRvZbmo30+y0X/oY/yV4YEJ00LL6eJWU4wi7ViY3HP6/VCdRjHoRdr5L/
        DwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCzzhOFkvyYLNFj2WDcq1YqD4sBy1iCia9QpRH3rjQvMKDwQDYWbi6EdOX0TQ/I
        YR7UWGj+2pXd6v0t33lYtoKocp/4lUvT3tfBnWZ5KnObi+J2uY2teUqoYkASN7F+GRPVOuMVoVgm05ss8tuMb2dLc9vsx93s
        Dt+XlMTv/2qi5VPwaDtqduKkzwW9lUfn4xIMkTiVvCpe0X2HneD2Bpuao3/U8Rk0uiPfq6TooWaoW3kjsmErhEAs9bA7xuqo
        1KKY9CdHcFhkSsMhoeaZylZHtzbnoipUlQKSLMdJQiiYZQ0bYL83/Ta9fulr1EERICMFt3GUmtYaZZKHpWSfdJp9\"\"\"])
        ```

        ## Import

        ```sh
        $ pulumi import okta:idp/samlKey:SamlKey example <key_id>
        ```


        :param str resource_name: The name of the resource.
        :param SamlKeyArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(SamlKeyArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 x5cs: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = SamlKeyArgs.__new__(SamlKeyArgs)

            if x5cs is None and not opts.urn:
                raise TypeError("Missing required property 'x5cs'")
            __props__.__dict__["x5cs"] = x5cs
            __props__.__dict__["created"] = None
            __props__.__dict__["expires_at"] = None
            __props__.__dict__["kid"] = None
            __props__.__dict__["kty"] = None
            __props__.__dict__["use"] = None
            __props__.__dict__["x5t_s256"] = None
        super(SamlKey, __self__).__init__(
            'okta:idp/samlKey:SamlKey',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            created: Optional[pulumi.Input[_builtins.str]] = None,
            expires_at: Optional[pulumi.Input[_builtins.str]] = None,
            kid: Optional[pulumi.Input[_builtins.str]] = None,
            kty: Optional[pulumi.Input[_builtins.str]] = None,
            use: Optional[pulumi.Input[_builtins.str]] = None,
            x5cs: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
            x5t_s256: Optional[pulumi.Input[_builtins.str]] = None) -> 'SamlKey':
        """
        Get an existing SamlKey resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[_builtins.str] created: Date created.
        :param pulumi.Input[_builtins.str] expires_at: Date the cert expires.
        :param pulumi.Input[_builtins.str] kid: Key ID.
        :param pulumi.Input[_builtins.str] kty: Identifies the cryptographic algorithm family used with the key.
        :param pulumi.Input[_builtins.str] use: Intended use of the public key.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] x5cs: base64-encoded X.509 certificate chain with DER encoding
        :param pulumi.Input[_builtins.str] x5t_s256: base64url-encoded SHA-256 thumbprint of the DER encoding of an X.509 certificate.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _SamlKeyState.__new__(_SamlKeyState)

        __props__.__dict__["created"] = created
        __props__.__dict__["expires_at"] = expires_at
        __props__.__dict__["kid"] = kid
        __props__.__dict__["kty"] = kty
        __props__.__dict__["use"] = use
        __props__.__dict__["x5cs"] = x5cs
        __props__.__dict__["x5t_s256"] = x5t_s256
        return SamlKey(resource_name, opts=opts, __props__=__props__)

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

    @_builtins.property
    @pulumi.getter(name="expiresAt")
    def expires_at(self) -> pulumi.Output[_builtins.str]:
        """
        Date the cert expires.
        """
        return pulumi.get(self, "expires_at")

    @_builtins.property
    @pulumi.getter
    def kid(self) -> pulumi.Output[_builtins.str]:
        """
        Key ID.
        """
        return pulumi.get(self, "kid")

    @_builtins.property
    @pulumi.getter
    def kty(self) -> pulumi.Output[_builtins.str]:
        """
        Identifies the cryptographic algorithm family used with the key.
        """
        return pulumi.get(self, "kty")

    @_builtins.property
    @pulumi.getter
    def use(self) -> pulumi.Output[_builtins.str]:
        """
        Intended use of the public key.
        """
        return pulumi.get(self, "use")

    @_builtins.property
    @pulumi.getter
    def x5cs(self) -> pulumi.Output[Sequence[_builtins.str]]:
        """
        base64-encoded X.509 certificate chain with DER encoding
        """
        return pulumi.get(self, "x5cs")

    @_builtins.property
    @pulumi.getter(name="x5tS256")
    def x5t_s256(self) -> pulumi.Output[_builtins.str]:
        """
        base64url-encoded SHA-256 thumbprint of the DER encoding of an X.509 certificate.
        """
        return pulumi.get(self, "x5t_s256")

