iptadmin 1.3.0 → 1.3.1
raw patch · 4 files changed
+89/−2 lines, 4 filesdep ~happstack-server
Dependency ranges changed: happstack-server
Files
- Changelog +3/−0
- iptadmin.cabal +4/−2
- src/IptAdmin/EditIpForwForm/Render.hs +29/−0
- src/IptAdmin/EditIpForwPage.hs +53/−0
Changelog view
@@ -1,3 +1,6 @@+iptadmin 1.3.1 23.10.2012:+ * fix cabal description - add missing files to a hackage tarball (again)+ iptadmin 1.3.0 22.10.2012: * Add https support * Add dialog for configuring ipv4 forwarding
iptadmin.cabal view
@@ -1,5 +1,5 @@ Name: iptadmin-Version: 1.3.0+Version: 1.3.1 Cabal-Version: >= 1.4 Author: Evgeny Tarasov Build-type: Simple@@ -46,7 +46,7 @@ Build-Depends: base >= 4 && < 5, utf8-string >= 0.3, bytestring >= 0.9,- happstack-server >= 7.0 && < 7.1,+ happstack-server >= 7.0.5 && < 7.1, happstack-server-tls >= 7.0 && < 7.1, mtl >= 1.1, safe >= 0.3,@@ -86,6 +86,8 @@ IptAdmin.EditForm.Render IptAdmin.EditForm.Types IptAdmin.EditForm.Utils+ IptAdmin.EditIpForwPage+ IptAdmin.EditIpForwForm.Render IptAdmin.EditPage IptAdmin.EditPolicyForm.Render IptAdmin.EditPolicyPage
+ src/IptAdmin/EditIpForwForm/Render.hs view
@@ -0,0 +1,29 @@+{-# LANGUAGE OverloadedStrings #-}++module IptAdmin.EditIpForwForm.Render where++import Data.Monoid+import Data.String+import Text.Blaze+import qualified Text.Blaze.Html5 as H+import qualified Text.Blaze.Html5.Attributes as A++editIpForwForm :: Bool -> Markup+editIpForwForm ipForwState = do+ H.div ! A.class_ "editForm" $+ H.form ! A.id "editIpForwForm" ! A.method "post" $ do+ H.table $ do+ H.tr $+ H.td $ do+ let forwOn = H.input ! A.type_ "radio" ! A.name "ipForwState" ! A.value "on"+ case ipForwState of+ True -> forwOn ! A.checked "checked"+ _ -> forwOn+ "On"+ H.tr $+ H.td $ do+ let forwOff = H.input ! A.type_ "radio" ! A.name "ipForwState" ! A.value "off"+ case ipForwState of+ False -> forwOff ! A.checked "checked"+ _ -> forwOff+ "Off"
+ src/IptAdmin/EditIpForwPage.hs view
@@ -0,0 +1,53 @@++module IptAdmin.EditIpForwPage where++import Control.Monad.Error+import Happstack.Server.SimpleHTTP+import Template+import IptAdmin.EditIpForwForm.Render+import IptAdmin.Render+import IptAdmin.System+import IptAdmin.Types+import IptAdmin.Utils+import Iptables+import Iptables.Types+import Text.Blaze.Renderer.Pretty (renderHtml)++pageHandlers :: IptAdmin Response+pageHandlers = msum [ methodSP GET pageHandlerGet+ , methodSP POST pageHandlerPost+ ]++pageHandlerGet :: IptAdmin Response+pageHandlerGet = do+ -- 1. Получение текущего значения из /proc/...+ forwState <- getForwardingState+ -- 2. Отрисовка формы+ return $ buildResponse $ renderHtml $ do+ editIpForwForm forwState+++pageHandlerPost :: IptAdmin Response+pageHandlerPost = do+ forwStateStr <- getInputString "ipForwState"++ -- 1. Проверка параметра формы.+ newValue <- case forwStateStr of+ "off" -> return False+ "on" -> return True+ a -> throwError $ "Ivalid parameter 'ipForwState': " ++ a++ -- 2. Применяем изменения в /proc/sys/net/ipv4/ip_forward и sysctl.conf+ {-+ if newPolicy == policy+ then -- redir $ "/show?table=" ++ tableName ++ bookmarkForJump chainName Nothing+ return $ buildResponse $ "ok:" ++ show newPolicy+ else do+ tryChange (setPolicy tableName chainName newPolicy)+ -- redir $ "/show?table=" ++ tableName ++ bookmarkForJump chainName Nothing+ return $ buildResponse $ "ok:" ++ show newPolicy+ -}++ setForwardingState newValue++ return $ buildResponse $ "ok:" ++ forwStateStr