I'd like to see if I can avoid using `cabal` and `stack` and build and deploy this application using `nix-shell` and `nix-build` only. Let's see how that goes.
66 lines
2.3 KiB
Haskell
66 lines
2.3 KiB
Haskell
--------------------------------------------------------------------------------
|
|
module Fixtures where
|
|
--------------------------------------------------------------------------------
|
|
import Web.JWT
|
|
import Utils
|
|
|
|
import qualified Data.Map as Map
|
|
import qualified GoogleSignIn
|
|
import qualified TestUtils
|
|
import qualified Data.Time.Clock.POSIX as POSIX
|
|
import qualified System.IO.Unsafe as Unsafe
|
|
--------------------------------------------------------------------------------
|
|
|
|
-- | These are the JWT fields that I'd like to overwrite in the `googleJWT`
|
|
-- function.
|
|
data JWTFields = JWTFields
|
|
{ overwriteSigner :: Signer
|
|
, overwriteAuds :: [StringOrURI]
|
|
, overwriteIss :: StringOrURI
|
|
, overwriteExp :: NumericDate
|
|
}
|
|
|
|
defaultJWTFields :: JWTFields
|
|
defaultJWTFields = do
|
|
let tenDaysFromToday = POSIX.getPOSIXTime
|
|
|> Unsafe.unsafePerformIO
|
|
|> (\x -> x * 60 * 60 * 25 * 10)
|
|
|> numericDate
|
|
|> TestUtils.unsafeJust
|
|
JWTFields
|
|
{ overwriteSigner = hmacSecret "secret"
|
|
, overwriteAuds = ["771151720060-buofllhed98fgt0j22locma05e7rpngl.apps.googleusercontent.com"]
|
|
|> fmap TestUtils.unsafeStringOrURI
|
|
, overwriteIss = TestUtils.unsafeStringOrURI "accounts.google.com"
|
|
, overwriteExp = tenDaysFromToday
|
|
}
|
|
|
|
googleJWT :: JWTFields -> GoogleSignIn.EncodedJWT
|
|
googleJWT JWTFields{..} =
|
|
encodeSigned signer jwtHeader claimSet
|
|
|> GoogleSignIn.EncodedJWT
|
|
where
|
|
signer :: Signer
|
|
signer = overwriteSigner
|
|
|
|
jwtHeader :: JOSEHeader
|
|
jwtHeader = JOSEHeader
|
|
{ typ = Just "JWT"
|
|
, cty = Nothing
|
|
, alg = Just RS256
|
|
, kid = Just "f05415b13acb9590f70df862765c655f5a7a019e"
|
|
}
|
|
|
|
claimSet :: JWTClaimsSet
|
|
claimSet = JWTClaimsSet
|
|
{ iss = Just overwriteIss
|
|
, sub = stringOrURI "114079822315085727057"
|
|
, aud = overwriteAuds |> Right |> Just
|
|
-- TODO: Replace date creation with a human-readable date constructor.
|
|
, Web.JWT.exp = Just overwriteExp
|
|
, nbf = Nothing
|
|
-- TODO: Replace date creation with a human-readable date constructor.
|
|
, iat = numericDate 1596752853
|
|
, unregisteredClaims = ClaimsMap (Map.fromList [])
|
|
, jti = stringOrURI "0d3d7fa1fe05bedec0a91c88294936b2b4d1b13c"
|
|
}
|