import Control.Arrow.ArrowIO
import Control.Concurrent.STM
+import Control.Monad
import Control.Monad.Trans
import qualified Data.ByteString.Char8 as C8
import Data.Dynamic
fromConfPath :: FilePath -> FilePath
-fromConfPath = combine "/config"
+fromConfPath = ("/config" </>)
serializeStringPairs :: [(String, String)] -> String
instance SysConfValue BaseURI where
confPath _ = "baseURI"
serialize (BaseURI uri) = uriToString id uri ""
- deserialize uri = fmap BaseURI (parseURI uri)
+ deserialize uri = fmap BaseURI
+ $ do parsed <- parseURI uri
+ when (uriPath parsed == "" ) (fail undefined)
+ when (last (uriPath parsed) /= '/') (fail undefined)
+ when (uriQuery parsed /= "" ) (fail undefined)
+ when (uriFragment parsed /= "" ) (fail undefined)
+ return parsed
defaultValue sc
= let conf = scLucuConf sc
host = C8.unpack $ LC.cnfServerHost conf
PortNumber num -> fromIntegral num
defaultURI
- = "http://" ++ host ++
+ = "http://" ++ host ++ -- FIXME: consider IPv6 address
(if port == 80
then ""
else ':' : show port) ++ "/"