gitit-0.16: Wiki using happstack, git or darcs, and pandoc.

Safe Haskell | None
Language | Haskell2010

Network.Gitit.Framework

Contents

- Combinators for dealing with users
- Combinators to exclude certain actions
- Guards for routing
- Functions to get info from the request
- Useful predicates
- Combinators that change the request locally
- Miscellaneous

Description

Useful functions for defining wiki handlers.

Synopsis

- withUserFromSession :: Handler -> Handler
- withUserFromHTTPAuth :: Handler -> Handler
- authenticateUserThat :: (User -> Bool) -> AuthenticationLevel -> Handler -> Handler
- authenticate :: AuthenticationLevel -> Handler -> Handler
- getLoggedInUser :: GititServerPart (Maybe User)
- unlessNoEdit :: Handler -> Handler -> Handler
- unlessNoDelete :: Handler -> Handler -> Handler
- guardCommand :: String -> GititServerPart ()
- guardPath :: (String -> Bool) -> GititServerPart ()
- guardIndex :: GititServerPart ()
- guardBareBase :: GititServerPart ()
- getPath :: ServerMonad m => m String
- getPage :: GititServerPart String
- getReferer :: ServerMonad m => m String
- getWikiBase :: ServerMonad m => m String
- uriPath :: String -> String
- isPage :: String -> Bool
- isPageFile :: FilePath -> GititServerPart Bool
- isDiscussPage :: String -> Bool
- isDiscussPageFile :: FilePath -> GititServerPart Bool
- isNotDiscussPageFile :: FilePath -> GititServerPart Bool
- isSourceCode :: String -> Bool
- withMessages :: ServerMonad m => [String] -> m a -> m a
- urlForPage :: String -> String
- pathForPage :: String -> String -> FilePath
- getMimeTypeForExtension :: String -> GititServerPart String
- validate :: [(Bool, String)] -> [String]
- filestoreFromConfig :: Config -> FileStore
- mkSessionCookie :: SessionKey -> Cookie

# Combinators for dealing with users

withUserFromSession :: Handler -> Handler Source #

Run the handler after setting `REMOTE_USER` with the user from the session.

withUserFromHTTPAuth :: Handler -> Handler Source #

Run the handler after setting `REMOTE_USER` from the "authorization" header. Works with simple HTTP authentication or digest authentication.

authenticateUserThat :: (User -> Bool) -> AuthenticationLevel -> Handler -> Handler Source #

Like `authenticate`, but with a predicate that the user must satisfy.

authenticate :: AuthenticationLevel -> Handler -> Handler Source #

Require a logged in user if the authentication level demands it. Run the handler if a user is logged in, otherwise redirect to login page.

getLoggedInUser :: GititServerPart (Maybe User) Source #

Returns `Just` logged in user or `Nothing`.

# Combinators to exclude certain actions

unlessNoEdit :: Handler -> Handler -> Handler Source #

`unlessNoEdit responder fallback` runs `responder` unless the page has been designated not editable in configuration; in that case, runs `fallback`.

unlessNoDelete :: Handler -> Handler -> Handler Source #

`unlessNoDelete responder fallback` runs `responder` unless the page has been designated not deletable in configuration; in that case, runs `fallback`.

# Guards for routing

guardCommand :: String -> GititServerPart () Source #

guardPath :: (String -> Bool) -> GititServerPart () Source #

guardIndex :: GititServerPart () Source #

Succeeds if path is an index path: e.g. `/foo/bar/`.

guardBareBase :: GititServerPart () Source #

# Functions to get info from the request

getPath :: ServerMonad m => m String Source #

Returns the current path (subtracting initial commands like `/_edit`).

getPage :: GititServerPart String Source #

Returns the current page name (derived from the path).

getReferer :: ServerMonad m => m String Source #

Returns the contents of the "referer" header.

getWikiBase :: ServerMonad m => m String Source #

Returns the base URL of the wiki in the happstack server. So, if the wiki handlers are behind a `dir `foo``, getWikiBase will return `/foo/`. getWikiBase doesn't know anything about HTTP proxies, so if you use proxies to map a gitit wiki to `/foo/`, you'll still need to follow the instructions in README.

uriPath :: String -> String Source #

Returns path portion of URI, without initial `/`. Consecutive spaces are collapsed. We don't want to distinguish `Hi There` and `Hi There`.

# Useful predicates

isPage :: String -> Bool Source #

isPageFile :: FilePath -> GititServerPart Bool Source #

isDiscussPage :: String -> Bool Source #

isDiscussPageFile :: FilePath -> GititServerPart Bool Source #

isNotDiscussPageFile :: FilePath -> GititServerPart Bool Source #

isSourceCode :: String -> Bool Source #

# Combinators that change the request locally

withMessages :: ServerMonad m => [String] -> m a -> m a Source #

Runs a server monad in a local context after setting the "message" request header.

# Miscellaneous

urlForPage :: String -> String Source #

Returns encoded URL path for the page with the given name, relative to the wiki base.

pathForPage :: String -> String -> FilePath Source #

Returns the filestore path of the file containing the page's source.

getMimeTypeForExtension :: String -> GititServerPart String Source #

Retrieves a mime type based on file extension.

validate Source #

Arguments

:: [(Bool, String)] | list of conditions and error messages
-> [String] | list of error messages

Simple helper for validation of forms.

filestoreFromConfig :: Config -> FileStore Source #

Returns a filestore object derived from the repository path and filestore type specified in configuration.

mkSessionCookie :: SessionKey -> Cookie Source #