packages feed

iptadmin-1.0.0: src/IptAdmin/EditForm/Types.hs

module IptAdmin.EditForm.Types where

import Data.Set (Set, empty)
import Iptables.Types

data FormEntry = FESrc { feEn :: Bool
                       , feInv :: Bool
                       , feSrc :: String
                       }
               | FEDst { feEn :: Bool
                       , feInv :: Bool
                       , feDst :: String
                       }
               | FEProt { feEn :: Bool
                        , feInv :: Bool
                        , feProt :: FProtocol
                        }
               | FESPort { feEn :: Bool
                         , feInv :: Bool
                         , feSPort :: String
                         }
               | FEDPort { feEn :: Bool
                         , feInv :: Bool
                         , feDPort :: String
                         }
               | FEInput { feEn :: Bool
                         , feInv :: Bool
                         , feInput :: String
                         }
               | FEOutput { feEn :: Bool
                          , feInv :: Bool
                          , feOutput :: String
                          }
               | FEState { feEn :: Bool
                         , feState :: Set CState
                         }
               | FEFiltTar { feFiltTar :: FFiltTar
                           , feRejectType :: RejectType
                           , feUserChain :: String
                           }
               | FENatPrerOutTar { feNatPrerTar :: FNatPrerOutTar
                                 , feDNatAddr :: String
                                 , feDNatRand :: Bool
                                 , feDNatPersist :: Bool
                                 , feRedirPort :: String
                                 , feRedirRand :: Bool
                                 , feUserChain :: String
                                 }
               | FENatPostrTar { feNatPostrTar :: FNatPostrTar
                               , feSNatAddr :: String
                               , feSNatRand :: Bool
                               , feSNatPersist :: Bool
                               , feMasqPort :: String
                               , feMasqRand :: Bool
                               , feUserChain :: String
                               }
               | FENatUserTar { feNatUserTar :: FNatUserTar
                              , feDNatAddr :: String
                              , feDNatRand :: Bool
                              , feDNatPersist :: Bool
                              , feRedirPort :: String
                              , feRedirRand :: Bool
                              , feSNatAddr :: String
                              , feSNatRand :: Bool
                              , feSNatPersist :: Bool
                              , feMasqPort :: String
                              , feMasqRand :: Bool
                              , feUserChain :: String
                              }
               | FEMangTar { feMangTar :: FMangTar
                           , feUserChain :: String
                           }
               deriving (Show, Eq)

data CommonFormPars = CommonFormPars { cfpSrcEn :: Bool
                                     , cfpSrcInv :: Bool -- Парметры *Inv означают "установлена ли галочка !"
                                     , cfpSrc :: String
                                     , cfpDestEn :: Bool
                                     , cfpDestInv :: Bool
                                     , cfpDest :: String
                                     , cfpProtEn :: Bool
                                     , cfpProtInv :: Bool
                                     , cfpProt :: FProtocol
                                     , cfpSPortEn :: Bool
                                     , cfpSPortInv :: Bool
                                     , cfpSPort :: String
                                     , cfpDPortEn :: Bool
                                     , cfpDPortInv :: Bool
                                     , cfpDPort :: String
                                     , cfpInputEn :: Bool
                                     , cfpInputInv :: Bool
                                     , cfpInput :: String
                                     , cfpOutputEn :: Bool
                                     , cfpOutputInv :: Bool
                                     , cfpOutput :: String
                                     -- у state можно не использовать <!>. iptables внутри заменяет отрицание на задание всех остальных состояний.
                                     , cfpStateEn :: Bool
                                     , cfpState :: Set CState
                                     }

nullComPars :: CommonFormPars
nullComPars = CommonFormPars False
                             False
                             ""
                             False
                             False
                             ""
                             False
                             False
                             FTCP
                             False
                             False
                             ""
                             False
                             False
                             ""
                             False
                             False
                             ""
                             False
                             False
                             ""
                             False
                             empty

commParamsToList :: Bool -> Bool -> CommonFormPars -> [FormEntry]
commParamsToList inDev outDev comPar =
        [ FESrc (cfpSrcEn comPar)
                (cfpSrcInv comPar)
                (cfpSrc comPar)
        ]
        ++ [ FEDst (cfpDestEn comPar)
                   (cfpDestInv comPar)
                   (cfpDest comPar)
           ]
        ++ [ FEProt (cfpProtEn comPar)
                    (cfpProtInv comPar)
                    (cfpProt comPar)
           ]
        ++ [ FESPort (cfpSPortEn comPar)
                     (cfpSPortInv comPar)
                     (cfpSPort comPar)
           ]
        ++ [ FEDPort (cfpDPortEn comPar)
                     (cfpDPortInv comPar)
                     (cfpDPort comPar)
           ]
        ++ [ FEInput (cfpInputEn comPar)
                     (cfpInputInv comPar)
                     (cfpInput comPar)
           | inDev ]
        ++ [ FEOutput (cfpOutputEn comPar)
                      (cfpOutputInv comPar)
                      (cfpOutput comPar)
           | outDev ]
        ++ [ FEState (cfpStateEn comPar)
                     (cfpState comPar)
           ]

data FiltInpForm = FiltInpForm { fifCommonPars :: CommonFormPars
                               , fifTarget :: FFiltTar
                               , fifRejectType :: RejectType
                               , fifUserChain :: String
                               }

data FiltForwForm = FiltForwForm { fffCommonPars :: CommonFormPars
                                 , fffTarget :: FFiltTar
                                 , fffRejectType :: RejectType
                                 , fffUserChain :: String
                                 }

data FiltOutForm = FiltOutForm { fofCommonPars :: CommonFormPars
                               , fofTarget :: FFiltTar
                               , fofRejectType :: RejectType
                               , fofUserChain :: String
                               }

data NatPrerForm = NatPrerForm { nrfCommonPars :: CommonFormPars
                               , nrfTarget :: FNatPrerOutTar
                               , nrfDNatAddr :: String
                               , nrfDNatRand :: Bool
                               , nrfDNatPersist :: Bool
                               , nrfRedirPort :: String
                               , nrfRedirRand :: Bool
                               , nrfUserChain :: String
                               }

data NatPostrForm = NatPostrForm { npfCommonPars :: CommonFormPars
                                 , npfTarget :: FNatPostrTar   -- | Radio value
                                 , npfSNatAddr :: String
                                 , npfSNatRand :: Bool
                                 , npfSNatPersist :: Bool
                                 , npfMasqPort :: String
                                 , npfMasqRand :: Bool
                                 , npfUserChain :: String
                                 }

data NatOutForm = NatOutForm { nofCommonPars :: CommonFormPars
                             , nofTarget :: FNatPrerOutTar
                             , nofDNatAddr :: String
                             , nofDNatRand :: Bool
                             , nofDNatPersist :: Bool
                             , nofRedirPort :: String
                             , nofRedirRand :: Bool
                             , nofUserChain :: String
                             }

data NatUserForm = NatUserForm { nufCommonPars :: CommonFormPars
                               , nufTarget :: FNatUserTar
                               , nufDNatAddr :: String
                               , nufDNatRand :: Bool
                               , nufDNatPersist :: Bool
                               , nufRedirPort :: String
                               , nufRedirRand :: Bool
                               , nufSNatAddr :: String
                               , nufSNatRand :: Bool
                               , nufSNatPersist :: Bool
                               , nufMasqPort :: String
                               , nufMasqRand :: Bool
                               , nufUserChain :: String
                               }

data FProtocol = FTCP
               | FUDP
               | FICMP
               deriving (Show, Eq)

data FFiltTar = FAccept
              | FDrop
              | FReject
              | FFUserChain
               deriving (Show, Eq)

data FNatPrerOutTar = FDNat
                    | FRedirect
                    | FNPrerUserChain
                    deriving (Show, Eq)

data FNatPostrTar = FSNat
                  | FMasq
                  | FNPostrUserChain
                  deriving (Show, Eq)

data FNatUserTar = FUDNat
                 | FURedirect
                 | FUSNat
                 | FUMasq
                 | FNUserUserChain
                 deriving (Show, Eq)

data FMangTar = FTTL
              | FTOS
              | FMark
              | FMUserChain
              deriving (Show, Eq)

data ResMessage = RMError String
                | RMSucc String
                | RMIgnore
                deriving (Show, Eq)