packages feed

cj-token 0.0.0 → 0.0.1

raw patch · 4 files changed

+31/−8 lines, 4 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- CJ.Auth.Token: UserBearerToken :: Text -> Text -> UserBearerToken
+ CJ.Auth.Token: UserBearerToken :: Maybe Text -> Text -> UserBearerToken

Files

cj-token.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack  name:           cj-token-version:        0.0.0+version:        0.0.1 synopsis:       A new Haskeleton package. description:    cj-token is a new Haskeleton package. category:       Other
library/CJ/Auth/Token.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE OverloadedStrings #-}+ module CJ.Auth.Token   ( UserBearerToken(..)   , JSONToken(..)@@ -35,13 +36,13 @@   fromClaims :: JWTClaimsSet -> Maybe a  data UserBearerToken = UserBearerToken-  { _bearerUserId :: T.Text+  { _bearerUserId :: Maybe T.Text   , _bearerAppId :: T.Text   } deriving (Eq, Show)  instance JSONToken UserBearerToken where-  toClaims UserBearerToken{ _bearerUserId = uid, _bearerAppId = aid } =-    def { unregisteredClaims = M.fromList [ ("userId", toJSON uid)+  toClaims UserBearerToken{ _bearerUserId = maybeUid, _bearerAppId = aid } =+    def { unregisteredClaims = M.fromList [ ("userId", toJSON maybeUid)                                           , ("appId",  toJSON aid) ] }    fromClaims JWTClaimsSet{ unregisteredClaims = clms } =@@ -49,7 +50,6 @@     where uid = fromValue =<< M.lookup "userId" clms           aid = fromValue =<< M.lookup "appId"  clms - fromValue :: FromJSON a => Value -> Maybe a fromValue = parseMaybe parseJSON @@ -64,6 +64,7 @@   where     verifyUtf8Base64 base64Str = rightToMaybe $ TE.decodeUtf8' (BS64.decodeLenient $ TE.encodeUtf8 base64Str) +-- move this out of interface? encodeToken :: (JSONToken a) => Secret -> a -> POSIXTime -> T.Text encodeToken secret token expTime = encodeJWT secret expiringClaims   where baseClaims = toClaims token
package.yaml view
@@ -1,5 +1,5 @@ name: cj-token-version: 0.0.0+version: 0.0.1 category: Other synopsis: A new Haskeleton package. description: cj-token is a new Haskeleton package.
test-suite/CJ/Auth/TokenSpec.hs view
@@ -10,6 +10,8 @@  import qualified Web.JWT as JWT import qualified Data.Text as T++import Data.Maybe (isNothing) import Data.String (fromString) import CJ.Auth.Token @@ -23,12 +25,33 @@       it "decode . encode = id" $         property $ \x y ->           let token = UserBearerToken{ _bearerUserId = x-                                 , _bearerAppId  = y }+                                     , _bearerAppId  = y }               secret = JWT.secret ""               encoded = encodeToken secret token 100               decoded = decodeToken secret encoded 0           in decoded == Just token +    describe "claims" $ do+      it "token contains user id if exists" $+        property $ \uid aid ->+          let token = UserBearerToken{ _bearerUserId = uid+                                     , _bearerAppId  = aid }+              secret = JWT.secret ""+              encoded = encodeToken secret token 100+              decoded = decodeToken secret encoded 0+              (Just UserBearerToken{ _bearerUserId = decodedUid }) = decoded+          in uid == decodedUid++      it "token does not contain user id if does not exist" $+        property $ \aid ->+          let token = UserBearerToken{ _bearerUserId = Nothing+                                     , _bearerAppId  = aid }+              secret = JWT.secret ""+              encoded = encodeToken secret token 100+              decoded = decodeToken secret encoded 0+              (Just UserBearerToken{ _bearerUserId = decodedUid }) = decoded+          in isNothing decodedUid+     describe "decodeToken" $       it "returns Nothing if the token is expired" $         property $ \x y ->@@ -38,7 +61,6 @@               encoded = encodeToken secret token time               decoded = decodeToken secret encoded 100 :: (Maybe UserBearerToken)           in decoded `shouldBe` Nothing-    describe "decodeToken" $     it "returns Nothing if token is garbage" $ do