iptadmin-1.0.0: src/IptAdmin/ShowPage.hs
{-# LANGUAGE OverloadedStrings #-}
module IptAdmin.ShowPage where
import Control.Monad.Error
import Happstack.Server.SimpleHTTP
import Template
import IptAdmin.Render
import IptAdmin.ShowPage.Render
import IptAdmin.System
import IptAdmin.Types
import IptAdmin.Utils
import Iptables
import Iptables.Types
import Text.Blaze
import qualified Text.Blaze.Html5 as H
import qualified Text.Blaze.Html5.Attributes as A
import Text.Blaze.Renderer.String (renderHtml)
pageHandlers :: IptAdmin Response
pageHandlers = msum [ methodSP GET pageHandlerGet
, methodSP POST pageHandlerPost
]
pageHandlerGet :: IptAdmin Response
pageHandlerGet = do
table <- getInputOrEmptyString "table"
iptables <- getIptables
case table of
"" -> showFilter iptables
"filter" -> showFilter iptables
"nat" -> showNat iptables
"mangle" -> showMangle iptables
"raw" -> throwError "We're sorry, the Raw table is not supported yet"
a -> throwError $ "Invalid table parameter: " ++ a
showFilter :: Iptables -> IptAdmin Response
showFilter iptables = do
let filter' = renderTable ("filter", "Filter") $ sortFilterTable $ tFilter iptables
return $ buildResponse $ Template.htmlWrapper $ renderHtml $ do
header "filter" "Iptables Filter table"
showPageHtml filter'
showNat :: Iptables -> IptAdmin Response
showNat iptables = do
let nat = renderTable ("nat", "Nat") $ sortNatTable $ tNat iptables
return $ buildResponse $ Template.htmlWrapper $ renderHtml $ do
header "nat" "Iptables Nat table"
showPageHtml nat
showMangle :: Iptables -> IptAdmin Response
showMangle iptables = do
let mangle = renderTable ("mangle", "Mangle") $ sortMangleTable $ tMangle iptables
return $ buildResponse $ Template.htmlWrapper $ renderHtml $ do
header "mangle" "Iptables Mangle table. Unfortunately rule editing is not supported for Mangle yet."
showPageHtml mangle
pageHandlerPost :: IptAdmin Response
pageHandlerPost = undefined
showPageHtml :: Html -> Html
showPageHtml table =
H.div ! A.id "rules" $
table