{-# OPTIONS_GHC -Wno-orphans #-}
module WebGear.OpenApi.Trait.Auth.JWT where
import Data.OpenApi
import Data.String (fromString)
import Data.Typeable (Proxy (..))
import GHC.TypeLits (KnownSymbol, symbolVal)
import WebGear.Core.Request (Request)
import WebGear.Core.Trait (Attribute, Get (..), TraitAbsence (..), With)
import WebGear.Core.Trait.Auth.JWT (JWTAuth' (..))
import WebGear.OpenApi.Handler (DocNode (DocSecurityScheme), OpenApiHandler (..), singletonNode)
instance
(TraitAbsence (JWTAuth' x scheme m e a) Request, KnownSymbol scheme) =>
Get (OpenApiHandler m) (JWTAuth' x scheme m e a) Request
where
{-# INLINE getTrait #-}
getTrait ::
JWTAuth' x scheme m e a ->
OpenApiHandler m (Request `With` ts) (Either (Absence (JWTAuth' x scheme m e a) Request) (Attribute (JWTAuth' x scheme m e a) Request))
getTrait :: forall (ts :: [*]).
JWTAuth' x scheme m e a
-> OpenApiHandler
m
(With Request ts)
(Either
(Absence (JWTAuth' x scheme m e a) Request)
(Attribute (JWTAuth' x scheme m e a) Request))
getTrait JWTAuth' x scheme m e a
_ =
let schemeName :: Text
schemeName = Text
"http" forall a. Semigroup a => a -> a -> a
<> forall a. IsString a => String -> a
fromString (forall (n :: Symbol) (proxy :: Symbol -> *).
KnownSymbol n =>
proxy n -> String
symbolVal (forall {k} (t :: k). Proxy t
Proxy @scheme))
securityScheme :: SecurityScheme
securityScheme =
SecurityScheme
{ _securitySchemeType :: SecuritySchemeType
_securitySchemeType = HttpSchemeType -> SecuritySchemeType
SecuritySchemeHttp (Maybe Text -> HttpSchemeType
HttpSchemeBearer (forall a. a -> Maybe a
Just Text
"JWT"))
, _securitySchemeDescription :: Maybe Text
_securitySchemeDescription = forall a. Maybe a
Nothing
}
in forall {k} {k} {k} (m :: k) (a :: k) (b :: k).
Tree DocNode -> OpenApiHandler m a b
OpenApiHandler forall a b. (a -> b) -> a -> b
$ forall a. a -> Tree a
singletonNode (Text -> SecurityScheme -> DocNode
DocSecurityScheme Text
schemeName SecurityScheme
securityScheme)