@@ -1,18 +1,14 @@
1module Servant.Auth.Server.Internal.JWT where
1module Servant.Auth.Server.Internal.JWT where
3import Control.Lens
3import Control.Lens
4−import Control.Monad.Except
4+import Control.Monad (MonadPlus(..), guard)
5import Control.Monad.Reader
5import Control.Monad.Reader
6import qualified Crypto.JOSE as Jose
6import qualified Crypto.JOSE as Jose
7import qualified Crypto.JWT as Jose
7import qualified Crypto.JWT as Jose
8−import Data.Aeson (FromJSON, Result (..), ToJSON, fromJSON,
10import Data.ByteArray (constEq)
8import Data.ByteArray (constEq)
11import qualified Data.ByteString as BS
9import qualified Data.ByteString as BS
12import qualified Data.ByteString.Lazy as BSL
10import qualified Data.ByteString.Lazy as BSL
13−import qualified Data.HashMap.Strict as HM
14import Data.Maybe (fromMaybe)
11import Data.Maybe (fromMaybe)
15−import qualified Data.Text as T
16import Data.Time (UTCTime)
12import Data.Time (UTCTime)
17import Network.Wai (requestHeaders)
13import Network.Wai (requestHeaders)
@@ -42,7 +38,7 @@ jwtAuthCheck jwtSettings = do
42-- token expires.
38-- token expires.
43makeJWT :: ToJWT a
39makeJWT :: ToJWT a
44 => a -> JWTSettings -> Maybe UTCTime -> IO (Either Jose.Error BSL.ByteString)
40 => a -> JWTSettings -> Maybe UTCTime -> IO (Either Jose.Error BSL.ByteString)
45−makeJWT v cfg expiry = runExceptT $ do
41+makeJWT v cfg expiry = Jose.runJOSE $ do
46 bestAlg <- Jose.bestJWSAlg $ signingKey cfg
42 bestAlg <- Jose.bestJWSAlg $ signingKey cfg
47 let alg = fromMaybe bestAlg $ jwtAlg cfg
43 let alg = fromMaybe bestAlg $ jwtAlg cfg
48 ejwt <- Jose.signClaims (signingKey cfg)
44 ejwt <- Jose.signClaims (signingKey cfg)
@@ -59,7 +55,7 @@ makeJWT v cfg expiry = runExceptT $ do
59verifyJWT :: FromJWT a => JWTSettings -> BS.ByteString -> IO (Maybe a)
55verifyJWT :: FromJWT a => JWTSettings -> BS.ByteString -> IO (Maybe a)
60verifyJWT jwtCfg input = do
56verifyJWT jwtCfg input = do
61 keys <- validationKeys jwtCfg
57 keys <- validationKeys jwtCfg
62− verifiedJWT <- runExceptT $ do
58+ verifiedJWT <- Jose.runJOSE $ do
63 unverifiedJWT <- Jose.decodeCompact (BSL.fromStrict input)
59 unverifiedJWT <- Jose.decodeCompact (BSL.fromStrict input)
64 Jose.verifyClaims
60 Jose.verifyClaims
65 (jwtSettingsToJwtValidationSettings jwtCfg)
61 (jwtSettingsToJwtValidationSettings jwtCfg)