shomei-servant-0.2.0.0: src/Shomei/Mfa/Api.hs
-- | Multi-factor authentication HTTP routes.
module Shomei.Mfa.Api
( MfaApi (..),
MfaCompleteRoute,
TotpEnrollRoute,
TotpVerifyRoute,
TotpDeleteRoute,
RecoveryCodesGenerateRoute,
RecoveryCodesCountRoute,
)
where
import Servant.API
import Servant.API.MultiVerb (MultiVerb)
import Shomei.Mfa.Dto
( MfaCompleteRequest,
TotpRemoveRequest,
TotpVerifyRequest,
)
import Shomei.Mfa.Result
import Shomei.Prelude
import Shomei.Servant.Auth (Authenticated)
import Shomei.Servant.PreHandler (CsrfProtected, PreHandlerResponses, RateLimited)
import Shomei.Servant.Result (ApplicationContentTypes, BadRequestPreHandlerResponses)
type MfaCompleteRoute = "mfa" :> "complete" :> RateLimited :> RemoteHost :> PreHandlerResponses BadRequestPreHandlerResponses :> ReqBody '[JSON] MfaCompleteRequest :> MultiVerb 'POST ApplicationContentTypes MfaCompleteResponses MfaCompleteResult
type TotpEnrollRoute = "totp" :> "enroll" :> Authenticated :> CsrfProtected :> MultiVerb 'POST ApplicationContentTypes TotpEnrollResponses TotpEnrollResult
type TotpVerifyRoute = "totp" :> "verify" :> Authenticated :> CsrfProtected :> PreHandlerResponses BadRequestPreHandlerResponses :> ReqBody '[JSON] TotpVerifyRequest :> MultiVerb 'POST ApplicationContentTypes TotpVerifyResponses TotpVerifyResult
type TotpDeleteRoute = "totp" :> RateLimited :> Authenticated :> CsrfProtected :> RemoteHost :> PreHandlerResponses BadRequestPreHandlerResponses :> ReqBody '[JSON] TotpRemoveRequest :> MultiVerb 'DELETE ApplicationContentTypes TotpDeleteResponses TotpDeleteResult
type RecoveryCodesGenerateRoute = "recovery-codes" :> Authenticated :> CsrfProtected :> MultiVerb 'POST ApplicationContentTypes RecoveryCodesGenerateResponses RecoveryCodesGenerateResult
type RecoveryCodesCountRoute = "recovery-codes" :> Authenticated :> MultiVerb 'GET ApplicationContentTypes RecoveryCodesCountResponses RecoveryCodesCountResult
data MfaApi mode = MfaApi
{ complete :: mode :- MfaCompleteRoute,
totpEnroll :: mode :- TotpEnrollRoute,
totpVerify :: mode :- TotpVerifyRoute,
totpDelete :: mode :- TotpDeleteRoute,
recoveryCodesGenerate :: mode :- RecoveryCodesGenerateRoute,
recoveryCodesCount :: mode :- RecoveryCodesCountRoute
}
deriving stock (Generic)