From ded70d1c71febb72e7b6afb7f41dcdaaa9594100 Mon Sep 17 00:00:00 2001
From: DerGrumpf
Date: Mon, 15 Sep 2025 21:55:33 +0200
Subject: [PATCH] Fixed: CORS Error by providing user server with necessary
policies, also removed dead code
---
jupyterhub/jupyterhub_config.py | 86 +++++----------------------------
1 file changed, 11 insertions(+), 75 deletions(-)
diff --git a/jupyterhub/jupyterhub_config.py b/jupyterhub/jupyterhub_config.py
index 5396880..2252c8d 100644
--- a/jupyterhub/jupyterhub_config.py
+++ b/jupyterhub/jupyterhub_config.py
@@ -1,16 +1,9 @@
import os
-import sys
from dockerspawner import DockerSpawner
-from jupyterhub.utils import random_port
from nativeauthenticator import NativeAuthenticator
-import subprocess
-
-# from nbgrader.auth import JupyterHubAuthPlugin
-from traitlets import Unicode, Bool, Int, Float
import secrets
import string
-from datetime import datetime, timedelta
from typing import Optional
@@ -40,21 +33,6 @@ def generate_api_token(
return token
-def is_service_available_cmd(host, port):
- """Check service using system commands"""
- try:
- subprocess.run(
- ["nc", "-z", host, str(port)],
- check=True,
- timeout=3,
- stdout=subprocess.DEVNULL,
- stderr=subprocess.DEVNULL,
- )
- return True
- except (subprocess.TimeoutExpired, subprocess.CalledProcessError):
- return False
-
-
# Configuration file for JupyterHub
c = get_config()
@@ -139,60 +117,18 @@ c.Spawner.ip = "0.0.0.0"
c.DockerSpawner.mem_limit = os.environ.get("NOTEBOOK_MEMORY_LIMIT", "500M")
c.DockerSpawner.cpu_limit = float(os.environ.get("NOTEBOOK_CPU_LIMIT", "1.0"))
-
-"""
-# Services configuration for NBGrader
-c.JupyterHub.services = [
- {
- 'name': 'nbgrader-formgrader',
- 'url': 'http://127.0.0.1:9999',
- 'command': [
- 'jupyter-nbgrader',
- '--port=9999',
- '--no-browser',
- '--log-level=INFO'
- ],
- 'cwd': '/srv/jupyterhub/courses',
- 'user': 'root',
- 'environment': {
- 'PYTHONPATH': '/srv/nbgrader',
- 'NBGRADER_CONFIG_FILE': '/srv/jupyterhub/nbgrader/nbgrader_config.py'
- }
- }
+# Fixing CORS because Nginx
+# this isn't a security risk because the container is served behind nginx
+# this only affects the traffic within the docker network itself
+c.Spawner.args = [
+ "--ServerApp.allow_origin=*",
+ "--ServerApp.allow_credentials=True",
+ "--ServerApp.disable_check_xsrf=True",
+ "--NotebookApp.allow_origin=*",
+ "--NotebookApp.allow_credentials=True",
+ "--NotebookApp.disable_check_xsrf=True",
+ '--ServerApp.tornado_settings={"headers": {"Access-Control-Allow-Origin": "*"}}',
]
-"""
-"""
-# NBGrader configuration
-c.JupyterHub.load_groups = {
- 'nbgrader-instructors': ['instructor'],
- 'nbgrader-students': []
-}
-"""
-"""
-# NBGrader Config
-c.JupyterHub.services = [
- {
- 'name': 'nbgrader-formgrader',
- 'url': 'http://127.0.0.1:9999',
- 'api_token': generate_api_token(prefix='nbgrader'),
- 'command': [
- 'python', '-m', 'nbgrader', 'formgrader',
- #'--port=9999',
- #'--no-browser',
- '--log-level=INFO',
- #'--base_url=/jupyter/services/nbgrader-formgrader',
- '--debug'
- ],
- 'environment': {
- 'JUPYTERHUB_SERVICE_URL': 'http://127.0.0.1:8081/jupyter/hub/api',
- 'NBGRADER_CONFIG_FILE': '/srv/nbgrader/nbgrader_config.py',
- 'PYTHONPATH': '/srv/nbgrader'
- },
- 'cwd': '/srv/nbgrader/courses',
- 'user': 'root'
- }
-]
-"""
# Security settings
c.JupyterHub.cookie_secret_file = "/srv/jupyterhub/cookie_secret"