shomei-servant-0.2.0.0: src/Shomei/Session/Api.hs
-- | Session-owned HTTP routes.
module Shomei.Session.Api
( SessionApi (..),
LoginRoute,
RefreshRoute,
LogoutRoute,
CurrentSessionRoute,
)
where
import Servant.API
import Servant.API.MultiVerb (MultiVerb)
import Shomei.Prelude
import Shomei.Servant.Auth (Authenticated)
import Shomei.Servant.PreHandler (CsrfProtected, PreHandlerResponses, RateLimited)
import Shomei.Servant.Result (ApplicationContentTypes, BadRequestPreHandlerResponses)
import Shomei.Session.Dto (LoginRequest, RefreshRequest)
import Shomei.Session.Result
type LoginRoute = "login" :> RateLimited :> RemoteHost :> PreHandlerResponses BadRequestPreHandlerResponses :> ReqBody '[JSON] LoginRequest :> MultiVerb 'POST ApplicationContentTypes LoginResponses LoginResult
type RefreshRoute = "refresh" :> RateLimited :> CsrfProtected :> Header "Cookie" Text :> Header "Origin" Text :> Header "Referer" Text :> PreHandlerResponses BadRequestPreHandlerResponses :> ReqBody '[JSON] RefreshRequest :> MultiVerb 'POST ApplicationContentTypes RefreshResponses RefreshResult
type LogoutRoute = "logout" :> Authenticated :> CsrfProtected :> MultiVerb 'POST ApplicationContentTypes LogoutResponses LogoutResult
type CurrentSessionRoute = Authenticated :> "session" :> MultiVerb 'GET ApplicationContentTypes CurrentSessionResponses CurrentSessionResult
data SessionApi mode = SessionApi
{ login :: mode :- LoginRoute,
refresh :: mode :- RefreshRoute,
logout :: mode :- LogoutRoute,
currentSession :: mode :- CurrentSessionRoute
}
deriving stock (Generic)