{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.CertificateManager.Types.DomainValidation
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.CertificateManager.Types.DomainValidation where

import Amazonka.CertificateManager.Types.DomainStatus
import Amazonka.CertificateManager.Types.ResourceRecord
import Amazonka.CertificateManager.Types.ValidationMethod
import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude

-- | Contains information about the validation of each domain name in the
-- certificate.
--
-- /See:/ 'newDomainValidation' smart constructor.
data DomainValidation = DomainValidation'
  { -- | Contains the CNAME record that you add to your DNS database for domain
    -- validation. For more information, see
    -- <https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html Use DNS to Validate Domain Ownership>.
    --
    -- Note: The CNAME information that you need does not include the name of
    -- your domain. If you include
 your domain name in the DNS database CNAME
    -- record, validation fails.
 For example, if the name is
    -- \"_a79865eb4cd1a6ab990a45779b4e0b96.yourdomain.com\", only
    -- \"_a79865eb4cd1a6ab990a45779b4e0b96\" must be used.
    DomainValidation -> Maybe ResourceRecord
resourceRecord :: Prelude.Maybe ResourceRecord,
    -- | The domain name that ACM used to send domain validation emails.
    DomainValidation -> Maybe Text
validationDomain :: Prelude.Maybe Prelude.Text,
    -- | A list of email addresses that ACM used to send domain validation
    -- emails.
    DomainValidation -> Maybe [Text]
validationEmails :: Prelude.Maybe [Prelude.Text],
    -- | Specifies the domain validation method.
    DomainValidation -> Maybe ValidationMethod
validationMethod :: Prelude.Maybe ValidationMethod,
    -- | The validation status of the domain name. This can be one of the
    -- following values:
    --
    -- -   @PENDING_VALIDATION@
    --
    -- -   SUCCESS
    --
    -- -   FAILED
    DomainValidation -> Maybe DomainStatus
validationStatus :: Prelude.Maybe DomainStatus,
    -- | A fully qualified domain name (FQDN) in the certificate. For example,
    -- @www.example.com@ or @example.com@.
    DomainValidation -> Text
domainName :: Prelude.Text
  }
  deriving (DomainValidation -> DomainValidation -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DomainValidation -> DomainValidation -> Bool
$c/= :: DomainValidation -> DomainValidation -> Bool
== :: DomainValidation -> DomainValidation -> Bool
$c== :: DomainValidation -> DomainValidation -> Bool
Prelude.Eq, ReadPrec [DomainValidation]
ReadPrec DomainValidation
Int -> ReadS DomainValidation
ReadS [DomainValidation]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DomainValidation]
$creadListPrec :: ReadPrec [DomainValidation]
readPrec :: ReadPrec DomainValidation
$creadPrec :: ReadPrec DomainValidation
readList :: ReadS [DomainValidation]
$creadList :: ReadS [DomainValidation]
readsPrec :: Int -> ReadS DomainValidation
$creadsPrec :: Int -> ReadS DomainValidation
Prelude.Read, Int -> DomainValidation -> ShowS
[DomainValidation] -> ShowS
DomainValidation -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DomainValidation] -> ShowS
$cshowList :: [DomainValidation] -> ShowS
show :: DomainValidation -> String
$cshow :: DomainValidation -> String
showsPrec :: Int -> DomainValidation -> ShowS
$cshowsPrec :: Int -> DomainValidation -> ShowS
Prelude.Show, forall x. Rep DomainValidation x -> DomainValidation
forall x. DomainValidation -> Rep DomainValidation x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DomainValidation x -> DomainValidation
$cfrom :: forall x. DomainValidation -> Rep DomainValidation x
Prelude.Generic)

-- |
-- Create a value of 'DomainValidation' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'resourceRecord', 'domainValidation_resourceRecord' - Contains the CNAME record that you add to your DNS database for domain
-- validation. For more information, see
-- <https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html Use DNS to Validate Domain Ownership>.
--
-- Note: The CNAME information that you need does not include the name of
-- your domain. If you include
 your domain name in the DNS database CNAME
-- record, validation fails.
 For example, if the name is
-- \"_a79865eb4cd1a6ab990a45779b4e0b96.yourdomain.com\", only
-- \"_a79865eb4cd1a6ab990a45779b4e0b96\" must be used.
--
-- 'validationDomain', 'domainValidation_validationDomain' - The domain name that ACM used to send domain validation emails.
--
-- 'validationEmails', 'domainValidation_validationEmails' - A list of email addresses that ACM used to send domain validation
-- emails.
--
-- 'validationMethod', 'domainValidation_validationMethod' - Specifies the domain validation method.
--
-- 'validationStatus', 'domainValidation_validationStatus' - The validation status of the domain name. This can be one of the
-- following values:
--
-- -   @PENDING_VALIDATION@
--
-- -   SUCCESS
--
-- -   FAILED
--
-- 'domainName', 'domainValidation_domainName' - A fully qualified domain name (FQDN) in the certificate. For example,
-- @www.example.com@ or @example.com@.
newDomainValidation ::
  -- | 'domainName'
  Prelude.Text ->
  DomainValidation
newDomainValidation :: Text -> DomainValidation
newDomainValidation Text
pDomainName_ =
  DomainValidation'
    { $sel:resourceRecord:DomainValidation' :: Maybe ResourceRecord
resourceRecord = forall a. Maybe a
Prelude.Nothing,
      $sel:validationDomain:DomainValidation' :: Maybe Text
validationDomain = forall a. Maybe a
Prelude.Nothing,
      $sel:validationEmails:DomainValidation' :: Maybe [Text]
validationEmails = forall a. Maybe a
Prelude.Nothing,
      $sel:validationMethod:DomainValidation' :: Maybe ValidationMethod
validationMethod = forall a. Maybe a
Prelude.Nothing,
      $sel:validationStatus:DomainValidation' :: Maybe DomainStatus
validationStatus = forall a. Maybe a
Prelude.Nothing,
      $sel:domainName:DomainValidation' :: Text
domainName = Text
pDomainName_
    }

-- | Contains the CNAME record that you add to your DNS database for domain
-- validation. For more information, see
-- <https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html Use DNS to Validate Domain Ownership>.
--
-- Note: The CNAME information that you need does not include the name of
-- your domain. If you include
 your domain name in the DNS database CNAME
-- record, validation fails.
 For example, if the name is
-- \"_a79865eb4cd1a6ab990a45779b4e0b96.yourdomain.com\", only
-- \"_a79865eb4cd1a6ab990a45779b4e0b96\" must be used.
domainValidation_resourceRecord :: Lens.Lens' DomainValidation (Prelude.Maybe ResourceRecord)
domainValidation_resourceRecord :: Lens' DomainValidation (Maybe ResourceRecord)
domainValidation_resourceRecord = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DomainValidation' {Maybe ResourceRecord
resourceRecord :: Maybe ResourceRecord
$sel:resourceRecord:DomainValidation' :: DomainValidation -> Maybe ResourceRecord
resourceRecord} -> Maybe ResourceRecord
resourceRecord) (\s :: DomainValidation
s@DomainValidation' {} Maybe ResourceRecord
a -> DomainValidation
s {$sel:resourceRecord:DomainValidation' :: Maybe ResourceRecord
resourceRecord = Maybe ResourceRecord
a} :: DomainValidation)

-- | The domain name that ACM used to send domain validation emails.
domainValidation_validationDomain :: Lens.Lens' DomainValidation (Prelude.Maybe Prelude.Text)
domainValidation_validationDomain :: Lens' DomainValidation (Maybe Text)
domainValidation_validationDomain = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DomainValidation' {Maybe Text
validationDomain :: Maybe Text
$sel:validationDomain:DomainValidation' :: DomainValidation -> Maybe Text
validationDomain} -> Maybe Text
validationDomain) (\s :: DomainValidation
s@DomainValidation' {} Maybe Text
a -> DomainValidation
s {$sel:validationDomain:DomainValidation' :: Maybe Text
validationDomain = Maybe Text
a} :: DomainValidation)

-- | A list of email addresses that ACM used to send domain validation
-- emails.
domainValidation_validationEmails :: Lens.Lens' DomainValidation (Prelude.Maybe [Prelude.Text])
domainValidation_validationEmails :: Lens' DomainValidation (Maybe [Text])
domainValidation_validationEmails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DomainValidation' {Maybe [Text]
validationEmails :: Maybe [Text]
$sel:validationEmails:DomainValidation' :: DomainValidation -> Maybe [Text]
validationEmails} -> Maybe [Text]
validationEmails) (\s :: DomainValidation
s@DomainValidation' {} Maybe [Text]
a -> DomainValidation
s {$sel:validationEmails:DomainValidation' :: Maybe [Text]
validationEmails = Maybe [Text]
a} :: DomainValidation) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Specifies the domain validation method.
domainValidation_validationMethod :: Lens.Lens' DomainValidation (Prelude.Maybe ValidationMethod)
domainValidation_validationMethod :: Lens' DomainValidation (Maybe ValidationMethod)
domainValidation_validationMethod = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DomainValidation' {Maybe ValidationMethod
validationMethod :: Maybe ValidationMethod
$sel:validationMethod:DomainValidation' :: DomainValidation -> Maybe ValidationMethod
validationMethod} -> Maybe ValidationMethod
validationMethod) (\s :: DomainValidation
s@DomainValidation' {} Maybe ValidationMethod
a -> DomainValidation
s {$sel:validationMethod:DomainValidation' :: Maybe ValidationMethod
validationMethod = Maybe ValidationMethod
a} :: DomainValidation)

-- | The validation status of the domain name. This can be one of the
-- following values:
--
-- -   @PENDING_VALIDATION@
--
-- -   SUCCESS
--
-- -   FAILED
domainValidation_validationStatus :: Lens.Lens' DomainValidation (Prelude.Maybe DomainStatus)
domainValidation_validationStatus :: Lens' DomainValidation (Maybe DomainStatus)
domainValidation_validationStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DomainValidation' {Maybe DomainStatus
validationStatus :: Maybe DomainStatus
$sel:validationStatus:DomainValidation' :: DomainValidation -> Maybe DomainStatus
validationStatus} -> Maybe DomainStatus
validationStatus) (\s :: DomainValidation
s@DomainValidation' {} Maybe DomainStatus
a -> DomainValidation
s {$sel:validationStatus:DomainValidation' :: Maybe DomainStatus
validationStatus = Maybe DomainStatus
a} :: DomainValidation)

-- | A fully qualified domain name (FQDN) in the certificate. For example,
-- @www.example.com@ or @example.com@.
domainValidation_domainName :: Lens.Lens' DomainValidation Prelude.Text
domainValidation_domainName :: Lens' DomainValidation Text
domainValidation_domainName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DomainValidation' {Text
domainName :: Text
$sel:domainName:DomainValidation' :: DomainValidation -> Text
domainName} -> Text
domainName) (\s :: DomainValidation
s@DomainValidation' {} Text
a -> DomainValidation
s {$sel:domainName:DomainValidation' :: Text
domainName = Text
a} :: DomainValidation)

instance Data.FromJSON DomainValidation where
  parseJSON :: Value -> Parser DomainValidation
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"DomainValidation"
      ( \Object
x ->
          Maybe ResourceRecord
-> Maybe Text
-> Maybe [Text]
-> Maybe ValidationMethod
-> Maybe DomainStatus
-> Text
-> DomainValidation
DomainValidation'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ResourceRecord")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ValidationDomain")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ValidationEmails"
                            forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ValidationMethod")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ValidationStatus")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"DomainName")
      )

instance Prelude.Hashable DomainValidation where
  hashWithSalt :: Int -> DomainValidation -> Int
hashWithSalt Int
_salt DomainValidation' {Maybe [Text]
Maybe Text
Maybe DomainStatus
Maybe ResourceRecord
Maybe ValidationMethod
Text
domainName :: Text
validationStatus :: Maybe DomainStatus
validationMethod :: Maybe ValidationMethod
validationEmails :: Maybe [Text]
validationDomain :: Maybe Text
resourceRecord :: Maybe ResourceRecord
$sel:domainName:DomainValidation' :: DomainValidation -> Text
$sel:validationStatus:DomainValidation' :: DomainValidation -> Maybe DomainStatus
$sel:validationMethod:DomainValidation' :: DomainValidation -> Maybe ValidationMethod
$sel:validationEmails:DomainValidation' :: DomainValidation -> Maybe [Text]
$sel:validationDomain:DomainValidation' :: DomainValidation -> Maybe Text
$sel:resourceRecord:DomainValidation' :: DomainValidation -> Maybe ResourceRecord
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResourceRecord
resourceRecord
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
validationDomain
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
validationEmails
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ValidationMethod
validationMethod
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DomainStatus
validationStatus
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
domainName

instance Prelude.NFData DomainValidation where
  rnf :: DomainValidation -> ()
rnf DomainValidation' {Maybe [Text]
Maybe Text
Maybe DomainStatus
Maybe ResourceRecord
Maybe ValidationMethod
Text
domainName :: Text
validationStatus :: Maybe DomainStatus
validationMethod :: Maybe ValidationMethod
validationEmails :: Maybe [Text]
validationDomain :: Maybe Text
resourceRecord :: Maybe ResourceRecord
$sel:domainName:DomainValidation' :: DomainValidation -> Text
$sel:validationStatus:DomainValidation' :: DomainValidation -> Maybe DomainStatus
$sel:validationMethod:DomainValidation' :: DomainValidation -> Maybe ValidationMethod
$sel:validationEmails:DomainValidation' :: DomainValidation -> Maybe [Text]
$sel:validationDomain:DomainValidation' :: DomainValidation -> Maybe Text
$sel:resourceRecord:DomainValidation' :: DomainValidation -> Maybe ResourceRecord
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ResourceRecord
resourceRecord
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
validationDomain
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
validationEmails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ValidationMethod
validationMethod
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DomainStatus
validationStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
domainName