|
1 | 1 | module Feature.Auth.AsymmetricJwtSpec where |
2 | 2 |
|
3 | | -import Network.Wai (Application) |
4 | | - |
5 | 3 | import Network.HTTP.Types |
6 | 4 | import Test.Hspec |
7 | 5 | import Test.Hspec.Wai |
| 6 | +import Text.Heredoc |
| 7 | + |
| 8 | +import PostgREST.Config (AppConfig (..), parseSecret) |
8 | 9 |
|
9 | 10 | import Protolude |
10 | 11 | import SpecHelper |
11 | 12 |
|
12 | | -spec :: SpecWith ((), Application) |
13 | | -spec = describe "server started with asymmetric JWK" $ |
| 13 | +-- these tests will stop working 9999999999s after the UNIX EPOCH |
| 14 | +spec :: SpecWithConfig |
| 15 | +spec withConfig = |
| 16 | + let |
| 17 | + auth = authHeaderJWT "eyJhbGciOiJSUzI1NiJ9.eyJyb2xlIjogInBvc3RncmVzdF90ZXN0X2F1dGhvciJ9Cg.CBOYWDvqgAR0YYnZnyDGTQi6AJLc2Pds6_eV3YuBG6I36mj_h05eLhkEKNEDA5ZteMzCiY83P60rC_xtxVd7B6vo3BeF5uoanPS3rrbuHzKPwzsrgrD_CqvEuJ4n7Q9epkQiLsNkcexneENZDRqFjbwZx3DrXiCWwlK3Ytr5NAIGxmy0od-0xNpb2U1nXQyO_Q3mumWFViRt4tmFn_3goDHNKG3Ha_AzImfUNvHnWL78kAc4rbn15vLtWXD8PwtSnZaB4lY4V6RfsaW937srQsmRetvytM1i_bHBnjkjQLAqGbXPyItjtlXPs0uGNBadE8-wgkLtfmSCC4v2DjUthw" |
| 18 | + jwk = encodeUtf8 [str|{"alg":"RS256","e":"AQAB","key_ops":["verify"],"kty":"RSA","n":"0etQ2Tg187jb04MWfpuogYGV75IFrQQBxQaGH75eq_FpbkyoLcEpRUEWSbECP2eeFya2yZ9vIO5ScD-lPmovePk4Aa4SzZ8jdjhmAbNykleRPCxMg0481kz6PQhnHRUv3nF5WP479CnObJKqTVdEagVL66oxnX9VhZG9IZA7k0Th5PfKQwrKGyUeTGczpOjaPqbxlunP73j9AfnAt4XCS8epa-n3WGz1j-wfpr_ys57Aq-zBCfqP67UYzNpeI1AoXsJhD9xSDOzvJgFRvc3vm2wjAW4LEMwi48rCplamOpZToIHEPIaPzpveYQwDnB1HFTR1ove9bpKJsHmi-e2uzQ","use":"sig"}|] |
| 19 | + jwks = encodeUtf8 [str|{"keys": [{"alg":"RS256","e":"AQAB","key_ops":["verify"],"kty":"RSA","n":"0etQ2Tg187jb04MWfpuogYGV75IFrQQBxQaGH75eq_FpbkyoLcEpRUEWSbECP2eeFya2yZ9vIO5ScD-lPmovePk4Aa4SzZ8jdjhmAbNykleRPCxMg0481kz6PQhnHRUv3nF5WP479CnObJKqTVdEagVL66oxnX9VhZG9IZA7k0Th5PfKQwrKGyUeTGczpOjaPqbxlunP73j9AfnAt4XCS8epa-n3WGz1j-wfpr_ys57Aq-zBCfqP67UYzNpeI1AoXsJhD9xSDOzvJgFRvc3vm2wjAW4LEMwi48rCplamOpZToIHEPIaPzpveYQwDnB1HFTR1ove9bpKJsHmi-e2uzQ","use":"sig"}]}|] |
| 20 | + in |
| 21 | + describe "server started with asymmetric JWK" $ do |
| 22 | + |
| 23 | + context "secret provided as JWK" $ withConfig ( |
| 24 | + baseCfg { |
| 25 | + configJwtSecret = Just jwk |
| 26 | + , configJWKS = rightToMaybe $ parseSecret jwk |
| 27 | + } |
| 28 | + ) $ it "succeeds with jwt token signed with an asymmetric key" $ |
| 29 | + request methodGet "/authors_only" [auth] "" |
| 30 | + `shouldRespondWith` 200 |
14 | 31 |
|
15 | | - -- this test will stop working 9999999999s after the UNIX EPOCH |
16 | | - it "succeeds with jwt token signed with an asymmetric key" $ do |
17 | | - let auth = authHeaderJWT "eyJhbGciOiJSUzI1NiJ9.eyJyb2xlIjogInBvc3RncmVzdF90ZXN0X2F1dGhvciJ9Cg.CBOYWDvqgAR0YYnZnyDGTQi6AJLc2Pds6_eV3YuBG6I36mj_h05eLhkEKNEDA5ZteMzCiY83P60rC_xtxVd7B6vo3BeF5uoanPS3rrbuHzKPwzsrgrD_CqvEuJ4n7Q9epkQiLsNkcexneENZDRqFjbwZx3DrXiCWwlK3Ytr5NAIGxmy0od-0xNpb2U1nXQyO_Q3mumWFViRt4tmFn_3goDHNKG3Ha_AzImfUNvHnWL78kAc4rbn15vLtWXD8PwtSnZaB4lY4V6RfsaW937srQsmRetvytM1i_bHBnjkjQLAqGbXPyItjtlXPs0uGNBadE8-wgkLtfmSCC4v2DjUthw" |
18 | | - request methodGet "/authors_only" [auth] "" |
19 | | - `shouldRespondWith` 200 |
| 32 | + context "secret provided as JWKSet" $ withConfig ( |
| 33 | + baseCfg { |
| 34 | + configJwtSecret = Just jwks |
| 35 | + , configJWKS = rightToMaybe $ parseSecret jwks |
| 36 | + } |
| 37 | + ) $ it "succeeds with jwt token signed with an asymmetric key" $ |
| 38 | + request methodGet "/authors_only" [auth] "" |
| 39 | + `shouldRespondWith` 200 |
0 commit comments