mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-18 07:23:00 +00:00
Fix setting cookie for services
and exercise it in tests
This commit is contained in:
@@ -241,7 +241,10 @@ class BaseHandler(RequestHandler):
|
||||
|
||||
def set_service_cookie(self, user):
|
||||
"""set the login cookie for services"""
|
||||
self._set_user_cookie(user, self.service_server)
|
||||
self._set_user_cookie(user, orm.Server(
|
||||
cookie_name='jupyterhub-services',
|
||||
base_url=url_path_join(self.base_url, 'services')
|
||||
))
|
||||
|
||||
def set_server_cookie(self, user):
|
||||
"""set the login cookie for the single-user server"""
|
||||
@@ -262,7 +265,7 @@ class BaseHandler(RequestHandler):
|
||||
self.set_server_cookie(user)
|
||||
|
||||
# set single cookie for services
|
||||
if self.db.query(orm.Service).first():
|
||||
if self.db.query(orm.Service).filter(orm.Service.server != None).first():
|
||||
self.set_service_cookie(user)
|
||||
|
||||
# create and set a new cookie token for the hub
|
||||
|
@@ -13,6 +13,7 @@ from urllib.parse import urlparse
|
||||
import requests
|
||||
from tornado import web, httpserver, ioloop
|
||||
|
||||
from jupyterhub.services.auth import HubAuthenticated
|
||||
|
||||
class EchoHandler(web.RequestHandler):
|
||||
def get(self):
|
||||
@@ -36,6 +37,12 @@ class APIHandler(web.RequestHandler):
|
||||
self.set_header('Content-Type', 'application/json')
|
||||
self.write(r.text)
|
||||
|
||||
class WhoAmIHandler(HubAuthenticated, web.RequestHandler):
|
||||
|
||||
@web.authenticated
|
||||
def get(self):
|
||||
self.write(self.get_current_user())
|
||||
|
||||
|
||||
def main():
|
||||
if os.environ['JUPYTERHUB_SERVICE_URL']:
|
||||
@@ -43,6 +50,7 @@ def main():
|
||||
app = web.Application([
|
||||
(r'.*/env', EnvHandler),
|
||||
(r'.*/api/(.*)', APIHandler),
|
||||
(r'.*/whoami/?', WhoAmIHandler),
|
||||
(r'.*', EchoHandler),
|
||||
])
|
||||
|
||||
|
@@ -15,6 +15,7 @@ from tornado.web import RequestHandler, Application, authenticated, HTTPError
|
||||
|
||||
from ..services.auth import _ExpiringDict, HubAuth, HubAuthenticated
|
||||
from ..utils import url_path_join
|
||||
from .mocking import public_url
|
||||
|
||||
# mock for sending monotonic counter way into the future
|
||||
monotonic_future = mock.patch('time.monotonic', lambda : sys.maxsize)
|
||||
@@ -194,3 +195,15 @@ def test_hub_authenticated(request):
|
||||
assert auth.login_url in r.headers['Location']
|
||||
|
||||
|
||||
def test_service_cookie_auth(app, mockservice_url):
|
||||
cookies = app.login_user('badger')
|
||||
r = requests.get(public_url(app, mockservice_url) + '/whoami/', cookies=cookies)
|
||||
r.raise_for_status()
|
||||
print(r.text)
|
||||
reply = r.json()
|
||||
sub_reply = { key: reply.get(key, 'missing') for key in ['name', 'admin']}
|
||||
assert sub_reply == {
|
||||
'name': 'badger',
|
||||
'admin': False,
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user