{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} module Uber.Auth ( Token (..) , ServerToken (..) , OAuthToken (..) ) where import Data.Monoid ((<>)) import Data.Text import GHC.Generics (Generic) import WebApi data AuthHeader = AuthHeader { authorization :: Text } deriving Generic -- | Data type used to store Server Token newtype ServerToken = ServerToken Text deriving Show -- | Data type used to store OAuth Token newtype OAuthToken = OAuthToken Text deriving Show -- | Data type used to store either Server or OAuth token data Token = Server ServerToken | OAuth OAuthToken deriving Show class FromToken a where fromToken :: a -> Text instance FromToken ServerToken where fromToken (ServerToken x) = "Token " <> x instance FromToken OAuthToken where fromToken (OAuthToken x) = "Bearer " <> x instance FromToken Token where fromToken (Server x) = fromToken x fromToken (OAuth x) = fromToken x instance ToHeader AuthHeader instance ToHeader ServerToken where toHeader = toHeader . AuthHeader . fromToken instance ToHeader OAuthToken where toHeader = toHeader . AuthHeader . fromToken instance ToHeader Token where toHeader = toHeader . AuthHeader . fromToken