Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/5-internal/WPB-5577
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
`Reply-Nonce` is added to `Access-Control-Expose-Headers`
2 changes: 1 addition & 1 deletion charts/nginz/templates/conf/_nginx.conf.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ http {

more_set_headers 'Access-Control-Allow-Origin: $cors_header';

more_set_headers 'Access-Control-Expose-Headers: Request-Id, Location';
more_set_headers 'Access-Control-Expose-Headers: Request-Id, Location, Replay-Nonce';
more_set_headers 'Request-Id: $request_id';
more_set_headers 'Strict-Transport-Security: max-age=31536000; preload';
}
Expand Down
6 changes: 4 additions & 2 deletions services/brig/test/integration/API/User/Client.hs
Original file line number Diff line number Diff line change
Expand Up @@ -1378,7 +1378,7 @@ testNewNonce :: Brig -> Http ()
testNewNonce brig = do
n1 <- check Util.getNonce 204
n2 <- check Util.headNonce 200
lift $ assertBool "nonces are should not be equal" (n1 /= n2)
lift $ assertBool "nonces should not be equal" (n1 /= n2)
where
check f status = do
uid <- userId <$> randomUser brig
Expand Down Expand Up @@ -1435,7 +1435,7 @@ testCreateAccessToken opts n brig = do
<!! const 200 === statusCode
let t = decodeToken rs
cid <- createClientForUser brig uid
nonceResponse <- Util.headNonce brig uid cid <!! const 200 === statusCode
nonceResponse <- Util.headNonceNginz n t cid <!! const 200 === statusCode
let nonceBs = cs $ fromMaybe (error "invalid nonce") $ getHeader "Replay-Nonce" nonceResponse
now <- liftIO $ posixSecondsToUTCTime . fromInteger <$> (floor <$> getPOSIXTime)
let clientIdentity = cs $ "im:wireapp=" <> cs (toText uidB64) <> "/" <> toByteString' cid <> "@" <> toByteString' localDomain
Expand All @@ -1453,6 +1453,8 @@ testCreateAccessToken opts n brig = do
case signedOrError of
Left err -> liftIO $ assertFailure $ "failed to sign claims: " <> show err
Right signed -> do
let accessControlExposeHeaders = maybe "" cs $ getHeader "Access-Control-Expose-Headers" nonceResponse
liftIO $ assertBool "Access-Control-Expose-Headers should contain Replay-Nonce" $ "Replay-Nonce" `isInfixOf` accessControlExposeHeaders
let proof = Just $ Proof (cs signed)
response <- Util.createAccessTokenNginz n t cid proof
let accessToken = fromRight (error $ "failed to create token: " <> show response) $ responseJsonEither response
Expand Down
13 changes: 13 additions & 0 deletions services/brig/test/integration/API/User/Util.hs
Original file line number Diff line number Diff line change
Expand Up @@ -584,6 +584,19 @@ nonce m brig uid cid =
. zUser uid
)

headNonceNginz ::
MonadHttp m =>
Nginz ->
ZAuth.Token ZAuth.Access ->
ClientId ->
m ResponseLBS
headNonceNginz nginz t cid =
Bilge.head
( nginz
. paths ["clients", toByteString' cid, "nonce"]
. header "Authorization" ("Bearer " <> toByteString' t)
)

createAccessToken :: (MonadHttp m, HasCallStack) => Brig -> UserId -> Text -> ClientId -> Maybe Proof -> m ResponseLBS
createAccessToken brig uid h cid mProof =
post $
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
more_set_headers 'Access-Control-Allow-Credentials: true';
# NOTE: This allows all origins, you may want to tune this value
more_set_headers 'Access-Control-Allow-Origin: $http_origin';
more_set_headers 'Access-Control-Expose-Headers: Request-Id, Location';
more_set_headers 'Access-Control-Expose-Headers: Request-Id, Location, Replay-Nonce';
more_set_headers 'Request-Id: $request_id';
more_set_headers 'Strict-Transport-Security: max-age=31536000; preload';

Expand All @@ -31,7 +31,7 @@
return 204;
}


proxy_http_version 1.1;

# NOTE: You may want to tune this
Expand Down