{-# LANGUAGE DataKinds, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, RecordWildCards, TemplateHaskell, TypeFamilies, TypeSynonymInstances, TypeOperators, OverloadedStrings #-}
module Happstack.Authenticate.Password.URL where
import Control.Category ((.), id)
import Data.Data (Data, Typeable)
import Data.UserId (UserId(..), rUserId)
import GHC.Generics (Generic)
import Prelude hiding ((.), id)
import Web.Routes (RouteT(..))
import Web.Routes.TH (derivePathInfo)
import Happstack.Authenticate.Core (AuthenticateURL, AuthenticationMethod(..), nestAuthenticationMethod)
import Happstack.Authenticate.Password.PartialsURL (PartialURL(..), partialURL)
import Text.Boomerang.TH (makeBoomerangs)
import Web.Routes (PathInfo(..))
import Web.Routes.Boomerang
passwordAuthenticationMethod :: AuthenticationMethod
passwordAuthenticationMethod = AuthenticationMethod "password"
data AccountURL
= Password
deriving (Eq, Ord, Read, Show, Data, Typeable, Generic)
makeBoomerangs ''AccountURL
accountURL :: Router () (AccountURL :- ())
accountURL =
( rPassword . "password"
)
instance PathInfo AccountURL where
fromPathSegments = boomerangFromPathSegments accountURL
toPathSegments = boomerangToPathSegments accountURL
data PasswordURL
= Token
| Account (Maybe (UserId, AccountURL))
| Partial PartialURL
| PasswordRequestReset
| PasswordReset
| UsernamePasswordCtrl
deriving (Eq, Ord, Data, Typeable, Generic)
makeBoomerangs ''PasswordURL
passwordURL :: Router () (PasswordURL :- ())
passwordURL =
( "token" . rToken
<> "account" </> rAccount . rMaybe (rPair . (rUserId . integer) </> accountURL)
<> "partial" </> rPartial . partialURL
<> "password-request-reset" . rPasswordRequestReset
<> "password-reset" . rPasswordReset
<> "js" </> rUsernamePasswordCtrl
)
instance PathInfo PasswordURL where
fromPathSegments = boomerangFromPathSegments passwordURL
toPathSegments = boomerangToPathSegments passwordURL
nestPasswordURL :: RouteT PasswordURL m a -> RouteT AuthenticateURL m a
nestPasswordURL =
nestAuthenticationMethod passwordAuthenticationMethod