Skip to content

Commit 00bd830

Browse files
authored
Merge pull request #1317 from minrk/exercise-origin
exercise the host/origin field in build tokens
2 parents 34f60a2 + ec7671f commit 00bd830

File tree

1 file changed

+44
-1
lines changed

1 file changed

+44
-1
lines changed

binderhub/tests/test_main.py

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
"""Test main handlers"""
22

3+
import time
4+
from urllib.parse import quote
35
from urllib.parse import urlparse
46

5-
from bs4 import BeautifulSoup
7+
import jwt
68
import pytest
9+
from bs4 import BeautifulSoup
710

811
from binderhub import __version__ as binder_version
912

@@ -123,3 +126,43 @@ async def test_loading_page(app, provider_prefix, repo, ref, path, path_type, st
123126
nbviewer_url = soup.find(id='nbviewer-preview').find('iframe').attrs['src']
124127
r = await async_requests.get(nbviewer_url)
125128
assert r.status_code == 200, f"{r.status_code} {nbviewer_url}"
129+
130+
131+
@pytest.mark.parametrize(
132+
"origin,host,expected_origin",
133+
[
134+
("https://my.host", "my.host", "my.host"),
135+
("https://my.origin", "my.host", "my.origin"),
136+
(None, "my.host", "my.host"),
137+
],
138+
)
139+
async def test_build_token_origin(app, origin, host, expected_origin):
140+
provider_spec = "git/{}/HEAD".format(
141+
quote(
142+
"https://github.com/binderhub-ci-repos/cached-minimal-dockerfile",
143+
safe="",
144+
)
145+
)
146+
uri = f"/v2/{provider_spec}"
147+
headers = {}
148+
if origin:
149+
headers["Origin"] = origin
150+
if host:
151+
headers["Host"] = host
152+
153+
r = await async_requests.get(app.url + uri, headers=headers)
154+
155+
soup = BeautifulSoup(r.text, "html5lib")
156+
assert soup.find(id="build-token")
157+
token_element = soup.find(id="build-token")
158+
assert token_element
159+
assert "data-token" in token_element.attrs
160+
build_token = token_element["data-token"]
161+
payload = jwt.decode(
162+
build_token,
163+
audience=provider_spec,
164+
options=dict(verify_signature=False),
165+
)
166+
assert payload["aud"] == provider_spec
167+
assert payload["origin"] == expected_origin
168+
assert time.time() < payload["exp"] < time.time() + 7200

0 commit comments

Comments
 (0)