48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
"""Tests for login redirects"""
|
|
|
|
import requests
|
|
from tornado.httputil import url_concat
|
|
|
|
from notebook.tests.launchnotebook import NotebookTestBase
|
|
|
|
|
|
class LoginTest(NotebookTestBase):
|
|
def login(self, next):
|
|
first = requests.get(self.base_url() + "login")
|
|
first.raise_for_status()
|
|
resp = requests.post(
|
|
url_concat(
|
|
self.base_url() + "login",
|
|
{'next': next},
|
|
),
|
|
allow_redirects=False,
|
|
data={
|
|
"password": self.token,
|
|
"_xsrf": first.cookies.get("_xsrf", ""),
|
|
},
|
|
cookies=first.cookies,
|
|
)
|
|
resp.raise_for_status()
|
|
return resp.headers['Location']
|
|
|
|
def test_next_bad(self):
|
|
for bad_next in (
|
|
"//some-host",
|
|
"//host" + self.url_prefix + "tree",
|
|
"https://google.com",
|
|
"/absolute/not/base_url",
|
|
):
|
|
url = self.login(next=bad_next)
|
|
self.assertEqual(url, self.url_prefix)
|
|
assert url
|
|
|
|
def test_next_ok(self):
|
|
for next_path in (
|
|
"tree/",
|
|
"//" + self.url_prefix + "tree",
|
|
"notebooks/notebook.ipynb",
|
|
"tree//something",
|
|
):
|
|
expected = self.url_prefix + next_path
|
|
actual = self.login(next=expected)
|
|
self.assertEqual(actual, expected)
|