123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- {-# LANGUAGE TemplateHaskell #-}
- {-# LANGUAGE UndecidableInstances #-}
- {-# LANGUAGE FlexibleInstances #-}
- {-# LANGUAGE FlexibleContexts #-}
- {-# LANGUAGE TypeFamilies #-}
- {-# OPTIONS_GHC -fno-warn-warnings-deprecations #-}
- module Yesod.Core
- ( -- * Type classes
- Yesod (..)
- , YesodDispatch (..)
- , YesodSubDispatch (..)
- , RenderRoute (..)
- , ParseRoute (..)
- , RouteAttrs (..)
- -- ** Breadcrumbs
- , YesodBreadcrumbs (..)
- , breadcrumbs
- -- * Types
- , Approot (..)
- , FileUpload (..)
- , ErrorResponse (..)
- -- * Utitlities
- , maybeAuthorized
- , widgetToPageContent
- -- * Defaults
- , defaultErrorHandler
- , defaultYesodMiddleware
- , authorizationCheck
- -- * Data types
- , AuthResult (..)
- , unauthorizedI
- -- * Logging
- , defaultMakeLogger
- , defaultMessageLoggerSource
- , defaultShouldLog
- , defaultShouldLogIO
- , formatLogMessage
- , LogLevel (..)
- , logDebug
- , logInfo
- , logWarn
- , logError
- , logOther
- , logDebugS
- , logInfoS
- , logWarnS
- , logErrorS
- , logOtherS
- -- * Sessions
- , SessionBackend (..)
- , customizeSessionCookies
- , defaultClientSessionBackend
- , envClientSessionBackend
- , clientSessionBackend
- , sslOnlySessions
- , sslOnlyMiddleware
- , clientSessionDateCacher
- , loadClientSession
- , Header(..)
- -- * CSRF protection
- , defaultCsrfMiddleware
- , defaultCsrfSetCookieMiddleware
- , csrfSetCookieMiddleware
- , defaultCsrfCheckMiddleware
- , csrfCheckMiddleware
- -- * JS loaders
- , ScriptLoadPosition (..)
- , BottomOfHeadAsync
- -- * Subsites
- , MonadHandler (..)
- , MonadWidget (..)
- , getRouteToParent
- , defaultLayoutSub
- -- * Approot
- , guessApproot
- , guessApprootOr
- , getApprootText
- -- * Misc
- , yesodVersion
- , yesodRender
- , Yesod.Core.runFakeHandler
- -- * LiteApp
- , module Yesod.Core.Internal.LiteApp
- -- * Low-level
- , yesodRunner
- -- * Re-exports
- , module Yesod.Core.Content
- , module Yesod.Core.Dispatch
- , module Yesod.Core.Handler
- , module Yesod.Core.Widget
- , module Yesod.Core.Json
- , module Text.Shakespeare.I18N
- , module Yesod.Core.Internal.Util
- , module Text.Blaze.Html
- , MonadTrans (..)
- , MonadIO (..)
- , MonadBase (..)
- , MonadBaseControl
- , MonadResource (..)
- , MonadLogger
- -- * Commonly referenced functions/datatypes
- , Application
- -- * Utilities
- , showIntegral
- , readIntegral
- -- * Shakespeare
- -- ** Hamlet
- , hamlet
- , shamlet
- , xhamlet
- , HtmlUrl
- -- ** Julius
- , julius
- , JavascriptUrl
- , renderJavascriptUrl
- -- ** Cassius/Lucius
- , cassius
- , lucius
- , CssUrl
- , renderCssUrl
- ) where
- import Yesod.Core.Content
- import Yesod.Core.Dispatch
- import Yesod.Core.Handler
- import Yesod.Core.Class.Handler
- import Yesod.Core.Widget
- import Yesod.Core.Json
- import Yesod.Core.Types
- import Text.Shakespeare.I18N
- import Yesod.Core.Internal.Util (formatW3 , formatRFC1123 , formatRFC822)
- import Text.Blaze.Html (Html, toHtml, preEscapedToMarkup)
- import Control.Monad.Logger
- import Control.Monad.Trans.Class (MonadTrans (..))
- import Yesod.Core.Internal.Session
- import Yesod.Core.Internal.Run (yesodRunner)
- import Yesod.Core.Class.Yesod
- import Yesod.Core.Class.Dispatch
- import Yesod.Core.Class.Breadcrumbs
- import Yesod.Core.Internal.Run (yesodRender)
- import qualified Yesod.Core.Internal.Run
- import qualified Paths_yesod_core
- import Data.Version (showVersion)
- import Yesod.Routes.Class
- import Control.Monad.IO.Class (MonadIO (..))
- import Control.Monad.Base (MonadBase (..))
- import Control.Monad.Trans.Control (MonadBaseControl (..))
- import Control.Monad.Trans.Resource (MonadResource (..))
- import Yesod.Core.Internal.LiteApp
- import Text.Hamlet
- import Text.Cassius
- import Text.Lucius
- import Text.Julius
- import Network.Wai (Application)
- runFakeHandler :: (Yesod site, MonadIO m) =>
- SessionMap
- -> (site -> Logger)
- -> site
- -> HandlerT site IO a
- -> m (Either ErrorResponse a)
- runFakeHandler = Yesod.Core.Internal.Run.runFakeHandler
- {-# DEPRECATED runFakeHandler "import runFakeHandler from Yesod.Core.Unsafe" #-}
- -- | Return an 'Unauthorized' value, with the given i18n message.
- unauthorizedI :: (MonadHandler m, RenderMessage (HandlerSite m) msg) => msg -> m AuthResult
- unauthorizedI msg = do
- mr <- getMessageRender
- return $ Unauthorized $ mr msg
- yesodVersion :: String
- yesodVersion = showVersion Paths_yesod_core.version
- -- | Return the same URL if the user is authorized to see it.
- --
- -- Built on top of 'isAuthorized'. This is useful for building page that only
- -- contain links to pages the user is allowed to see.
- maybeAuthorized :: Yesod site
- => Route site
- -> Bool -- ^ is this a write request?
- -> HandlerT site IO (Maybe (Route site))
- maybeAuthorized r isWrite = do
- x <- isAuthorized r isWrite
- return $ if x == Authorized then Just r else Nothing
- getRouteToParent :: Monad m => HandlerT child (HandlerT parent m) (Route child -> Route parent)
- getRouteToParent = HandlerT $ return . handlerToParent
- defaultLayoutSub :: Yesod parent
- => WidgetT child IO ()
- -> HandlerT child (HandlerT parent IO) Html
- defaultLayoutSub cwidget = widgetToParentWidget cwidget >>= lift . defaultLayout
- showIntegral :: Integral a => a -> String
- showIntegral x = show (fromIntegral x :: Integer)
- readIntegral :: Num a => String -> Maybe a
- readIntegral s =
- case reads s of
- (i, _):_ -> Just $ fromInteger i
- [] -> Nothing
|