import os import warnings # When Swagger performs OAuth2 in the browser, it will set # the request host + relative path as the redirect uri, causing a # uri mismatch if the oauth_redirect_uri is just the relative path # is set in the c.JupyterHub.services entry (as per default). # Therefore need to know the request host ahead of time. if "PUBLIC_HOST" not in os.environ: msg = ( "env PUBLIC_HOST is not set, defaulting to http://127.0.0.1:8000. " "This can cause problems with OAuth. " "Set PUBLIC_HOST to your public (browser accessible) host." ) warnings.warn(msg) public_host = "http://127.0.0.1:8000" else: public_host = os.environ["PUBLIC_HOST"].rstrip('/') service_name = "fastapi" oauth_redirect_uri = f"{public_host}/services/{service_name}/oauth_callback" c.JupyterHub.services = [ { "name": service_name, "url": "http://127.0.0.1:10202", "command": ["uvicorn", "app:app", "--port", "10202"], "admin": True, "oauth_redirect_uri": oauth_redirect_uri, "environment": {"PUBLIC_HOST": public_host}, } ]