From 3fd1c61d1c526bf68b5e52b638bf68a1af95bc2b Mon Sep 17 00:00:00 2001 From: FĂ©lix Sipma Date: Thu, 25 Feb 2016 17:55:26 +0100 Subject: add FromTarget class (cherry picked from commit 226bf3e8230037ad2de38760c962033ab6c64d9f) --- src/Propellor/Property/Firewall.hs | 67 ++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 32 deletions(-) (limited to 'src/Propellor/Property/Firewall.hs') diff --git a/src/Propellor/Property/Firewall.hs b/src/Propellor/Property/Firewall.hs index d7a2d9bc..eefc8342 100644 --- a/src/Propellor/Property/Firewall.hs +++ b/src/Propellor/Property/Firewall.hs @@ -94,11 +94,11 @@ toIpTableTable f = ["-t", table, "-j", target] (table, target) = toIpTableTable' f toIpTableTable' :: Table -> (String, String) -toIpTableTable' (Filter target) = ("filter", fromTargetFilter target) -toIpTableTable' (Nat target) = ("nat", fromTargetNat target) -toIpTableTable' (Mangle target) = ("mangle", fromTargetMangle target) -toIpTableTable' (Raw target) = ("raw", fromTargetRaw target) -toIpTableTable' (Security target) = ("security", fromTargetSecurity target) +toIpTableTable' (Filter target) = ("filter", fromTarget target) +toIpTableTable' (Nat target) = ("nat", fromTarget target) +toIpTableTable' (Mangle target) = ("mangle", fromTarget target) +toIpTableTable' (Raw target) = ("raw", fromTarget target) +toIpTableTable' (Security target) = ("security", fromTarget target) data Chain = INPUT | OUTPUT | FORWARD deriving (Eq, Show) @@ -106,49 +106,52 @@ data Chain = INPUT | OUTPUT | FORWARD data TargetFilter = ACCEPT | REJECT | DROP | LOG | FilterCustom String deriving (Eq, Show) -fromTargetFilter :: TargetFilter -> String -fromTargetFilter ACCEPT = "ACCEPT" -fromTargetFilter REJECT = "REJECT" -fromTargetFilter DROP = "DROP" -fromTargetFilter LOG = "LOG" -fromTargetFilter (FilterCustom f) = f +class FromTarget a where + fromTarget :: a -> String + +instance FromTarget TargetFilter where + fromTarget ACCEPT = "ACCEPT" + fromTarget REJECT = "REJECT" + fromTarget DROP = "DROP" + fromTarget LOG = "LOG" + fromTarget (FilterCustom f) = f data TargetNat = NatPREROUTING | NatOUTPUT | NatPOSTROUTING | NatCustom String deriving (Eq, Show) -fromTargetNat :: TargetNat -> String -fromTargetNat NatPREROUTING = "PREROUTING" -fromTargetNat NatOUTPUT = "OUTPUT" -fromTargetNat NatPOSTROUTING = "POSTROUTING" -fromTargetNat (NatCustom f) = f +instance FromTarget TargetNat where + fromTarget NatPREROUTING = "PREROUTING" + fromTarget NatOUTPUT = "OUTPUT" + fromTarget NatPOSTROUTING = "POSTROUTING" + fromTarget (NatCustom f) = f data TargetMangle = ManglePREROUTING | MangleOUTPUT | MangleINPUT | MangleFORWARD | ManglePOSTROUTING | MangleCustom String deriving (Eq, Show) -fromTargetMangle :: TargetMangle -> String -fromTargetMangle ManglePREROUTING = "PREROUTING" -fromTargetMangle MangleOUTPUT = "OUTPUT" -fromTargetMangle MangleINPUT = "INPUT" -fromTargetMangle MangleFORWARD = "FORWARD" -fromTargetMangle ManglePOSTROUTING = "POSTROUTING" -fromTargetMangle (MangleCustom f) = f +instance FromTarget TargetMangle where + fromTarget ManglePREROUTING = "PREROUTING" + fromTarget MangleOUTPUT = "OUTPUT" + fromTarget MangleINPUT = "INPUT" + fromTarget MangleFORWARD = "FORWARD" + fromTarget ManglePOSTROUTING = "POSTROUTING" + fromTarget (MangleCustom f) = f data TargetRaw = RawPREROUTING | RawOUTPUT | RawCustom String deriving (Eq, Show) -fromTargetRaw :: TargetRaw -> String -fromTargetRaw RawPREROUTING = "PREROUTING" -fromTargetRaw RawOUTPUT = "OUTPUT" -fromTargetRaw (RawCustom f) = f +instance FromTarget TargetRaw where + fromTarget RawPREROUTING = "PREROUTING" + fromTarget RawOUTPUT = "OUTPUT" + fromTarget (RawCustom f) = f data TargetSecurity = SecurityINPUT | SecurityOUTPUT | SecurityFORWARD | SecurityCustom String deriving (Eq, Show) -fromTargetSecurity :: TargetSecurity -> String -fromTargetSecurity SecurityINPUT = "INPUT" -fromTargetSecurity SecurityOUTPUT = "OUTPUT" -fromTargetSecurity SecurityFORWARD = "FORWARD" -fromTargetSecurity (SecurityCustom f) = f +instance FromTarget TargetSecurity where + fromTarget SecurityINPUT = "INPUT" + fromTarget SecurityOUTPUT = "OUTPUT" + fromTarget SecurityFORWARD = "FORWARD" + fromTarget (SecurityCustom f) = f data Proto = TCP | UDP | ICMP deriving (Eq, Show) -- cgit v1.2.3