import Control.Monad.IO.Class (MonadIO(..), liftIO)
import Data.Maybe (fromMaybe)
import Lucid
+import Sanitize
import Servant
import System.Directory (getDirectoryContents)
import qualified Data.Text as T
htmlContainer :: (MonadIO m) => Maybe Theme -> Html a -> m (Html ())
htmlContainer theme contents = do
nav <- navigation theme
- pure $ void $ with doctypehtml_ [lang_ "en"] $ do
+ pure $ sanitizeHtml $ void $ with doctypehtml_ [lang_ "en"] $ do
head_ $ do
title_ $ toHtml siteTitle
meta_ [charset_ "utf8"]
--- /dev/null
+module Sanitize where
+
+import Lucid (Html(..), renderText, toHtmlRaw)
+import Text.HTML.TagSoup.Tree (parseTree, renderTree, transformTree, TagTree(..))
+import qualified Data.Text.Lazy as T
+
+sanitizeHtml :: Html () -> Html ()
+sanitizeHtml = toHtmlRaw . renderTree . transformTree sanitizeTree . parseTree . renderText
+
+sanitizeTree :: TagTree T.Text -> [TagTree T.Text]
+sanitizeTree = pure