{-# LANGUAGE GADTs #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} module ExampleApp where import ClassyPrelude.Yesod hiding (addScript, addScriptRemote) import Yesod.Core.Types (Logger) import Yesod.EmbeddedStatic import Yesod.Middleware.CSP data ExampleApp = ExampleApp { appLogger :: Logger , getStatic :: EmbeddedStatic } mkEmbeddedStatic False "eStatic" [ embedDir "test/static" ] mkYesod "ExampleApp" [parseRoutes| /static StaticR EmbeddedStatic getStatic /1 Example1 GET /2 Example2 GET /3 Example3 GET /4 Example4 GET /5 Example5 GET /6 Example6 GET /7 Example7 GET /8 Example8 GET |] getExample1 :: Handler Html getExample1 = defaultLayout $ do addCSP ScriptSrc Https addCSP ScriptSrc StrictDynamic addCSP ObjectSrc None toWidget $ asText "" getExample2 :: Handler Html getExample2 = defaultLayout $ do addCSP ScriptSrc None addCSP ScriptSrc Wildcard toWidget $ asText "" getExample3 :: Handler Html getExample3 = defaultLayout $ do addCSP ScriptSrc Wildcard addCSP ScriptSrc None toWidget $ asText "" getExample4 :: Handler Html getExample4 = defaultLayout $ do addCSP ScriptSrc Wildcard addCSP ScriptSrc None addCSP ScriptSrc DataScheme addCSP ScriptSrc Https toWidget $ asText "" getExample5 :: Handler Html getExample5 = defaultLayout $ do addScript $ StaticR js_test_js toWidget $ asText "" getExample6 :: Handler Html getExample6 = defaultLayout $ do addScriptRemote "https://example.com/test.js" toWidget $ asText "" getExample7 :: Handler Html getExample7 = defaultLayout $ toWidget $ asText "" getExample8 :: Handler Html getExample8 = defaultLayout $ do addScript $ StaticR js_test_js addCSP ScriptSrc None toWidget $ asText "" instance Yesod ExampleApp where yesodMiddleware = addCSPMiddleware addStaticContent = embedStaticContent getStatic StaticR Right