packages feed

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 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