#if MIN_VERSION_base(4,9,0)
#endif
module Servant.Auth.Client.Internal where
import qualified Data.ByteString as BS
import Data.Monoid
import Data.Proxy (Proxy (..))
import Data.String (IsString)
import qualified Data.Text.Encoding as T
import GHC.Exts (Constraint)
import GHC.Generics (Generic)
import Servant.API ((:>))
import Servant.Auth
import Servant.Client
import Servant.Common.Req (Req (..))
newtype Token = Token { getToken :: BS.ByteString }
deriving (Eq, Show, Read, Generic, IsString)
instance (HasJWT auths, HasClient api) => HasClient (Auth auths a :> api) where
type Client (Auth auths a :> api) = Token -> Client api
clientWithRoute _ req (Token token)
= clientWithRoute (Proxy :: Proxy api)
$ req { headers = ("Authorization", headerVal):headers req }
where
headerVal = "Bearer " <> T.decodeLatin1 token
type family HasJWT xs :: Constraint where
HasJWT (JWT ': xs) = ()
HasJWT (x ': xs) = HasJWT xs
HasJWT '[] = JWTAuthNotEnabled
class JWTAuthNotEnabled