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"
show UDP = "udp"
show ICMP = "icmp"
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"