{-# LANGUAGE TypeFamilies , MultiParamTypeClasses , FlexibleInstances , OverloadedStrings , RecordWildCards , TemplateHaskell #-} module Aws.Ec2.Commands.AuthorizeSecurityGroupIngress where import qualified Network.HTTP.Types as HTTP import Data.Monoid (mconcat) import Data.Text (Text) import Data.ByteString.Char8 (pack, ByteString) import Aws.Ec2.TH data IpProtocol = TCP | UDP | ICMP | Proto Int | All instance Show IpProtocol where show TCP = "tcp" -- 6 show UDP = "udp" -- 17 show ICMP = "icmp" -- 1 show (Proto i) = show i show All = "-1" type CidrIp = Text data IpPermission = IpPermission IpProtocol (Maybe Int) (Maybe Int) [CidrIp] deriving (Show) data AuthorizeSecurityGroupIngress = AuthorizeSecurityGroupIngress { asi_groupId :: Text , asi_permissions :: [IpPermission] } deriving (Show) enumeratePermissions :: [IpPermission] -> HTTP.Query enumeratePermissions = enumerateLists "IpPermissions." . fmap unroll where unroll (IpPermission proto from to ips) = [ ("IpProtocol", qShow proto) , ("FromPort", qShow $ maybe (-1) id from) , ("ToPort", qShow $ maybe (-1) id to) ] +++ [(mconcat [k, ".CidrIp"], v)| (k, v) <- enumerate "IpRanges" ips qArg] instance SignQuery AuthorizeSecurityGroupIngress where type ServiceConfiguration AuthorizeSecurityGroupIngress = EC2Configuration signQuery AuthorizeSecurityGroupIngress{..} = ec2SignQuery $ [ ("GroupId", qArg asi_groupId) , ("Action", qArg "AuthorizeSecurityGroupIngress") , defVersion ] +++ enumeratePermissions asi_permissions EC2VALUETRANSACTION(AuthorizeSecurityGroupIngress,"AuthorizeSecurityGroupIngressResponse")