packages feed

amazonka-codeartifact-2.0: gen/Amazonka/CodeArtifact/PutPackageOriginConfiguration.hs

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

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

-- |
-- Module      : Amazonka.CodeArtifact.PutPackageOriginConfiguration
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Sets the package origin configuration for a package.
--
-- The package origin configuration determines how new versions of a
-- package can be added to a repository. You can allow or block direct
-- publishing of new package versions, or ingestion and retaining of new
-- package versions from an external connection or upstream source. For
-- more information about package origin controls and configuration, see
-- <https://docs.aws.amazon.com/codeartifact/latest/ug/package-origin-controls.html Editing package origin controls>
-- in the /CodeArtifact User Guide/.
--
-- @PutPackageOriginConfiguration@ can be called on a package that doesn\'t
-- yet exist in the repository. When called on a package that does not
-- exist, a package is created in the repository with no versions and the
-- requested restrictions are set on the package. This can be used to
-- preemptively block ingesting or retaining any versions from external
-- connections or upstream repositories, or to block publishing any
-- versions of the package into the repository before connecting any
-- package managers or publishers to the repository.
module Amazonka.CodeArtifact.PutPackageOriginConfiguration
  ( -- * Creating a Request
    PutPackageOriginConfiguration (..),
    newPutPackageOriginConfiguration,

    -- * Request Lenses
    putPackageOriginConfiguration_domainOwner,
    putPackageOriginConfiguration_namespace,
    putPackageOriginConfiguration_domain,
    putPackageOriginConfiguration_repository,
    putPackageOriginConfiguration_format,
    putPackageOriginConfiguration_package,
    putPackageOriginConfiguration_restrictions,

    -- * Destructuring the Response
    PutPackageOriginConfigurationResponse (..),
    newPutPackageOriginConfigurationResponse,

    -- * Response Lenses
    putPackageOriginConfigurationResponse_originConfiguration,
    putPackageOriginConfigurationResponse_httpStatus,
  )
where

import Amazonka.CodeArtifact.Types
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
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newPutPackageOriginConfiguration' smart constructor.
data PutPackageOriginConfiguration = PutPackageOriginConfiguration'
  { -- | The 12-digit account number of the Amazon Web Services account that owns
    -- the domain. It does not include dashes or spaces.
    domainOwner :: Prelude.Maybe Prelude.Text,
    -- | The namespace of the package to be updated. The package component that
    -- specifies its namespace depends on its type. For example:
    --
    -- -   The namespace of a Maven package is its @groupId@.
    --
    -- -   The namespace of an npm package is its @scope@.
    --
    -- -   Python and NuGet packages do not contain a corresponding component,
    --     packages of those formats do not have a namespace.
    namespace :: Prelude.Maybe Prelude.Text,
    -- | The name of the domain that contains the repository that contains the
    -- package.
    domain :: Prelude.Text,
    -- | The name of the repository that contains the package.
    repository :: Prelude.Text,
    -- | A format that specifies the type of the package to be updated.
    format :: PackageFormat,
    -- | The name of the package to be updated.
    package :: Prelude.Text,
    -- | A
    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
    -- object that contains information about the @upstream@ and @publish@
    -- package origin restrictions. The @upstream@ restriction determines if
    -- new package versions can be ingested or retained from external
    -- connections or upstream repositories. The @publish@ restriction
    -- determines if new package versions can be published directly to the
    -- repository.
    --
    -- You must include both the desired @upstream@ and @publish@ restrictions.
    restrictions :: PackageOriginRestrictions
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'PutPackageOriginConfiguration' 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:
--
-- 'domainOwner', 'putPackageOriginConfiguration_domainOwner' - The 12-digit account number of the Amazon Web Services account that owns
-- the domain. It does not include dashes or spaces.
--
-- 'namespace', 'putPackageOriginConfiguration_namespace' - The namespace of the package to be updated. The package component that
-- specifies its namespace depends on its type. For example:
--
-- -   The namespace of a Maven package is its @groupId@.
--
-- -   The namespace of an npm package is its @scope@.
--
-- -   Python and NuGet packages do not contain a corresponding component,
--     packages of those formats do not have a namespace.
--
-- 'domain', 'putPackageOriginConfiguration_domain' - The name of the domain that contains the repository that contains the
-- package.
--
-- 'repository', 'putPackageOriginConfiguration_repository' - The name of the repository that contains the package.
--
-- 'format', 'putPackageOriginConfiguration_format' - A format that specifies the type of the package to be updated.
--
-- 'package', 'putPackageOriginConfiguration_package' - The name of the package to be updated.
--
-- 'restrictions', 'putPackageOriginConfiguration_restrictions' - A
-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
-- object that contains information about the @upstream@ and @publish@
-- package origin restrictions. The @upstream@ restriction determines if
-- new package versions can be ingested or retained from external
-- connections or upstream repositories. The @publish@ restriction
-- determines if new package versions can be published directly to the
-- repository.
--
-- You must include both the desired @upstream@ and @publish@ restrictions.
newPutPackageOriginConfiguration ::
  -- | 'domain'
  Prelude.Text ->
  -- | 'repository'
  Prelude.Text ->
  -- | 'format'
  PackageFormat ->
  -- | 'package'
  Prelude.Text ->
  -- | 'restrictions'
  PackageOriginRestrictions ->
  PutPackageOriginConfiguration
newPutPackageOriginConfiguration
  pDomain_
  pRepository_
  pFormat_
  pPackage_
  pRestrictions_ =
    PutPackageOriginConfiguration'
      { domainOwner =
          Prelude.Nothing,
        namespace = Prelude.Nothing,
        domain = pDomain_,
        repository = pRepository_,
        format = pFormat_,
        package = pPackage_,
        restrictions = pRestrictions_
      }

-- | The 12-digit account number of the Amazon Web Services account that owns
-- the domain. It does not include dashes or spaces.
putPackageOriginConfiguration_domainOwner :: Lens.Lens' PutPackageOriginConfiguration (Prelude.Maybe Prelude.Text)
putPackageOriginConfiguration_domainOwner = Lens.lens (\PutPackageOriginConfiguration' {domainOwner} -> domainOwner) (\s@PutPackageOriginConfiguration' {} a -> s {domainOwner = a} :: PutPackageOriginConfiguration)

-- | The namespace of the package to be updated. The package component that
-- specifies its namespace depends on its type. For example:
--
-- -   The namespace of a Maven package is its @groupId@.
--
-- -   The namespace of an npm package is its @scope@.
--
-- -   Python and NuGet packages do not contain a corresponding component,
--     packages of those formats do not have a namespace.
putPackageOriginConfiguration_namespace :: Lens.Lens' PutPackageOriginConfiguration (Prelude.Maybe Prelude.Text)
putPackageOriginConfiguration_namespace = Lens.lens (\PutPackageOriginConfiguration' {namespace} -> namespace) (\s@PutPackageOriginConfiguration' {} a -> s {namespace = a} :: PutPackageOriginConfiguration)

-- | The name of the domain that contains the repository that contains the
-- package.
putPackageOriginConfiguration_domain :: Lens.Lens' PutPackageOriginConfiguration Prelude.Text
putPackageOriginConfiguration_domain = Lens.lens (\PutPackageOriginConfiguration' {domain} -> domain) (\s@PutPackageOriginConfiguration' {} a -> s {domain = a} :: PutPackageOriginConfiguration)

-- | The name of the repository that contains the package.
putPackageOriginConfiguration_repository :: Lens.Lens' PutPackageOriginConfiguration Prelude.Text
putPackageOriginConfiguration_repository = Lens.lens (\PutPackageOriginConfiguration' {repository} -> repository) (\s@PutPackageOriginConfiguration' {} a -> s {repository = a} :: PutPackageOriginConfiguration)

-- | A format that specifies the type of the package to be updated.
putPackageOriginConfiguration_format :: Lens.Lens' PutPackageOriginConfiguration PackageFormat
putPackageOriginConfiguration_format = Lens.lens (\PutPackageOriginConfiguration' {format} -> format) (\s@PutPackageOriginConfiguration' {} a -> s {format = a} :: PutPackageOriginConfiguration)

-- | The name of the package to be updated.
putPackageOriginConfiguration_package :: Lens.Lens' PutPackageOriginConfiguration Prelude.Text
putPackageOriginConfiguration_package = Lens.lens (\PutPackageOriginConfiguration' {package} -> package) (\s@PutPackageOriginConfiguration' {} a -> s {package = a} :: PutPackageOriginConfiguration)

-- | A
-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
-- object that contains information about the @upstream@ and @publish@
-- package origin restrictions. The @upstream@ restriction determines if
-- new package versions can be ingested or retained from external
-- connections or upstream repositories. The @publish@ restriction
-- determines if new package versions can be published directly to the
-- repository.
--
-- You must include both the desired @upstream@ and @publish@ restrictions.
putPackageOriginConfiguration_restrictions :: Lens.Lens' PutPackageOriginConfiguration PackageOriginRestrictions
putPackageOriginConfiguration_restrictions = Lens.lens (\PutPackageOriginConfiguration' {restrictions} -> restrictions) (\s@PutPackageOriginConfiguration' {} a -> s {restrictions = a} :: PutPackageOriginConfiguration)

instance
  Core.AWSRequest
    PutPackageOriginConfiguration
  where
  type
    AWSResponse PutPackageOriginConfiguration =
      PutPackageOriginConfigurationResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          PutPackageOriginConfigurationResponse'
            Prelude.<$> (x Data..?> "originConfiguration")
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance
  Prelude.Hashable
    PutPackageOriginConfiguration
  where
  hashWithSalt _salt PutPackageOriginConfiguration' {..} =
    _salt
      `Prelude.hashWithSalt` domainOwner
      `Prelude.hashWithSalt` namespace
      `Prelude.hashWithSalt` domain
      `Prelude.hashWithSalt` repository
      `Prelude.hashWithSalt` format
      `Prelude.hashWithSalt` package
      `Prelude.hashWithSalt` restrictions

instance Prelude.NFData PutPackageOriginConfiguration where
  rnf PutPackageOriginConfiguration' {..} =
    Prelude.rnf domainOwner
      `Prelude.seq` Prelude.rnf namespace
      `Prelude.seq` Prelude.rnf domain
      `Prelude.seq` Prelude.rnf repository
      `Prelude.seq` Prelude.rnf format
      `Prelude.seq` Prelude.rnf package
      `Prelude.seq` Prelude.rnf restrictions

instance Data.ToHeaders PutPackageOriginConfiguration where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON PutPackageOriginConfiguration where
  toJSON PutPackageOriginConfiguration' {..} =
    Data.object
      ( Prelude.catMaybes
          [Prelude.Just ("restrictions" Data..= restrictions)]
      )

instance Data.ToPath PutPackageOriginConfiguration where
  toPath = Prelude.const "/v1/package"

instance Data.ToQuery PutPackageOriginConfiguration where
  toQuery PutPackageOriginConfiguration' {..} =
    Prelude.mconcat
      [ "domain-owner" Data.=: domainOwner,
        "namespace" Data.=: namespace,
        "domain" Data.=: domain,
        "repository" Data.=: repository,
        "format" Data.=: format,
        "package" Data.=: package
      ]

-- | /See:/ 'newPutPackageOriginConfigurationResponse' smart constructor.
data PutPackageOriginConfigurationResponse = PutPackageOriginConfigurationResponse'
  { -- | A
    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginConfiguration.html PackageOriginConfiguration>
    -- object that describes the origin configuration set for the package. It
    -- contains a
    -- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
    -- object that describes how new versions of the package can be introduced
    -- to the repository.
    originConfiguration :: Prelude.Maybe PackageOriginConfiguration,
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'PutPackageOriginConfigurationResponse' 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:
--
-- 'originConfiguration', 'putPackageOriginConfigurationResponse_originConfiguration' - A
-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginConfiguration.html PackageOriginConfiguration>
-- object that describes the origin configuration set for the package. It
-- contains a
-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
-- object that describes how new versions of the package can be introduced
-- to the repository.
--
-- 'httpStatus', 'putPackageOriginConfigurationResponse_httpStatus' - The response's http status code.
newPutPackageOriginConfigurationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  PutPackageOriginConfigurationResponse
newPutPackageOriginConfigurationResponse pHttpStatus_ =
  PutPackageOriginConfigurationResponse'
    { originConfiguration =
        Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | A
-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginConfiguration.html PackageOriginConfiguration>
-- object that describes the origin configuration set for the package. It
-- contains a
-- <https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageOriginRestrictions.html PackageOriginRestrictions>
-- object that describes how new versions of the package can be introduced
-- to the repository.
putPackageOriginConfigurationResponse_originConfiguration :: Lens.Lens' PutPackageOriginConfigurationResponse (Prelude.Maybe PackageOriginConfiguration)
putPackageOriginConfigurationResponse_originConfiguration = Lens.lens (\PutPackageOriginConfigurationResponse' {originConfiguration} -> originConfiguration) (\s@PutPackageOriginConfigurationResponse' {} a -> s {originConfiguration = a} :: PutPackageOriginConfigurationResponse)

-- | The response's http status code.
putPackageOriginConfigurationResponse_httpStatus :: Lens.Lens' PutPackageOriginConfigurationResponse Prelude.Int
putPackageOriginConfigurationResponse_httpStatus = Lens.lens (\PutPackageOriginConfigurationResponse' {httpStatus} -> httpStatus) (\s@PutPackageOriginConfigurationResponse' {} a -> s {httpStatus = a} :: PutPackageOriginConfigurationResponse)

instance
  Prelude.NFData
    PutPackageOriginConfigurationResponse
  where
  rnf PutPackageOriginConfigurationResponse' {..} =
    Prelude.rnf originConfiguration
      `Prelude.seq` Prelude.rnf httpStatus