{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-binds #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Network.AWS.WAF.CreateWebACL -- Copyright : (c) 2013-2016 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- Creates a 'WebACL', which contains the 'Rules' that identify the CloudFront web requests that you want to allow, block, or count. AWS WAF evaluates 'Rules' in order based on the value of 'Priority' for each 'Rule'. -- -- You also specify a default action, either 'ALLOW' or 'BLOCK'. If a web request doesn\'t match any of the 'Rules' in a 'WebACL', AWS WAF responds to the request with the default action. -- -- To create and configure a 'WebACL', perform the following steps: -- -- 1. Create and update the 'ByteMatchSet' objects and other predicates that you want to include in 'Rules'. For more information, see < CreateByteMatchSet>, < UpdateByteMatchSet>, < CreateIPSet>, < UpdateIPSet>, < CreateSqlInjectionMatchSet>, and < UpdateSqlInjectionMatchSet>. -- 2. Create and update the 'Rules' that you want to include in the 'WebACL'. For more information, see < CreateRule> and < UpdateRule>. -- 3. Use < GetChangeToken> to get the change token that you provide in the 'ChangeToken' parameter of a 'CreateWebACL' request. -- 4. Submit a 'CreateWebACL' request. -- 5. Use 'GetChangeToken' to get the change token that you provide in the 'ChangeToken' parameter of an < UpdateWebACL> request. -- 6. Submit an < UpdateWebACL> request to specify the 'Rules' that you want to include in the 'WebACL', to specify the default action, and to associate the 'WebACL' with a CloudFront distribution. -- -- For more information about how to use the AWS WAF API, see the . module Network.AWS.WAF.CreateWebACL ( -- * Creating a Request createWebACL , CreateWebACL -- * Request Lenses , cwaName , cwaMetricName , cwaDefaultAction , cwaChangeToken -- * Destructuring the Response , createWebACLResponse , CreateWebACLResponse -- * Response Lenses , cwarsWebACL , cwarsChangeToken , cwarsResponseStatus ) where import Network.AWS.Lens import Network.AWS.Prelude import Network.AWS.Request import Network.AWS.Response import Network.AWS.WAF.Types import Network.AWS.WAF.Types.Product -- | /See:/ 'createWebACL' smart constructor. data CreateWebACL = CreateWebACL' { _cwaName :: !Text , _cwaMetricName :: !Text , _cwaDefaultAction :: !WafAction , _cwaChangeToken :: !Text } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'CreateWebACL' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'cwaName' -- -- * 'cwaMetricName' -- -- * 'cwaDefaultAction' -- -- * 'cwaChangeToken' createWebACL :: Text -- ^ 'cwaName' -> Text -- ^ 'cwaMetricName' -> WafAction -- ^ 'cwaDefaultAction' -> Text -- ^ 'cwaChangeToken' -> CreateWebACL createWebACL pName_ pMetricName_ pDefaultAction_ pChangeToken_ = CreateWebACL' { _cwaName = pName_ , _cwaMetricName = pMetricName_ , _cwaDefaultAction = pDefaultAction_ , _cwaChangeToken = pChangeToken_ } -- | A friendly name or description of the < WebACL>. You can\'t change 'Name' after you create the 'WebACL'. cwaName :: Lens' CreateWebACL Text cwaName = lens _cwaName (\ s a -> s{_cwaName = a}); -- | A friendly name or description for the metrics for this 'WebACL'. The name can contain only alphanumeric characters (A-Z, a-z, 0-9); the name can\'t contain whitespace. You can\'t change 'MetricName' after you create the 'WebACL'. cwaMetricName :: Lens' CreateWebACL Text cwaMetricName = lens _cwaMetricName (\ s a -> s{_cwaMetricName = a}); -- | The action that you want AWS WAF to take when a request doesn\'t match the criteria specified in any of the 'Rule' objects that are associated with the 'WebACL'. cwaDefaultAction :: Lens' CreateWebACL WafAction cwaDefaultAction = lens _cwaDefaultAction (\ s a -> s{_cwaDefaultAction = a}); -- | The value returned by the most recent call to < GetChangeToken>. cwaChangeToken :: Lens' CreateWebACL Text cwaChangeToken = lens _cwaChangeToken (\ s a -> s{_cwaChangeToken = a}); instance AWSRequest CreateWebACL where type Rs CreateWebACL = CreateWebACLResponse request = postJSON waf response = receiveJSON (\ s h x -> CreateWebACLResponse' <$> (x .?> "WebACL") <*> (x .?> "ChangeToken") <*> (pure (fromEnum s))) instance Hashable CreateWebACL instance NFData CreateWebACL instance ToHeaders CreateWebACL where toHeaders = const (mconcat ["X-Amz-Target" =# ("AWSWAF_20150824.CreateWebACL" :: ByteString), "Content-Type" =# ("application/x-amz-json-1.1" :: ByteString)]) instance ToJSON CreateWebACL where toJSON CreateWebACL'{..} = object (catMaybes [Just ("Name" .= _cwaName), Just ("MetricName" .= _cwaMetricName), Just ("DefaultAction" .= _cwaDefaultAction), Just ("ChangeToken" .= _cwaChangeToken)]) instance ToPath CreateWebACL where toPath = const "/" instance ToQuery CreateWebACL where toQuery = const mempty -- | /See:/ 'createWebACLResponse' smart constructor. data CreateWebACLResponse = CreateWebACLResponse' { _cwarsWebACL :: !(Maybe WebACL) , _cwarsChangeToken :: !(Maybe Text) , _cwarsResponseStatus :: !Int } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'CreateWebACLResponse' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'cwarsWebACL' -- -- * 'cwarsChangeToken' -- -- * 'cwarsResponseStatus' createWebACLResponse :: Int -- ^ 'cwarsResponseStatus' -> CreateWebACLResponse createWebACLResponse pResponseStatus_ = CreateWebACLResponse' { _cwarsWebACL = Nothing , _cwarsChangeToken = Nothing , _cwarsResponseStatus = pResponseStatus_ } -- | The < WebACL> returned in the 'CreateWebACL' response. cwarsWebACL :: Lens' CreateWebACLResponse (Maybe WebACL) cwarsWebACL = lens _cwarsWebACL (\ s a -> s{_cwarsWebACL = a}); -- | The 'ChangeToken' that you used to submit the 'CreateWebACL' request. You can also use this value to query the status of the request. For more information, see < GetChangeTokenStatus>. cwarsChangeToken :: Lens' CreateWebACLResponse (Maybe Text) cwarsChangeToken = lens _cwarsChangeToken (\ s a -> s{_cwarsChangeToken = a}); -- | The response status code. cwarsResponseStatus :: Lens' CreateWebACLResponse Int cwarsResponseStatus = lens _cwarsResponseStatus (\ s a -> s{_cwarsResponseStatus = a}); instance NFData CreateWebACLResponse