@@ -147,7 +147,7 @@ spec:
147147
148148 # enable authentication state
149149 c.GenericOAuthenticator.enable_auth_state = True
150- # Here inden
150+
151151 zenodo-oauth : |
152152 import os, json, time, pathlib, secrets, requests
153153 from urllib.parse import urlencode
@@ -162,6 +162,12 @@ spec:
162162 TOKENS_DIR = os.environ.get('ZENODO_TOKENS_DIR', '/srv/jupyterhub/zenodo-tokens')
163163
164164 class ZenodoLoginHandler(BaseHandler):
165+ def _callback_url(self):
166+ # Build absolute URL (scheme + host + path) to match Zenodo's registered redirect URI exactly
167+ proto = getattr(self.request, 'protocol', 'https')
168+ host = self.request.host
169+ return f"{proto}://{host}{url_path_join(self.base_url, 'zenodo', 'callback')}"
170+
165171 async def get(self):
166172 user = self.current_user
167173 if not user:
@@ -178,10 +184,6 @@ spec:
178184 }
179185 self.redirect(f"{ZENODO_AUTHORIZE_URL}?{urlencode(params)}")
180186
181- def _callback_url(self):
182- # base_url already ends with /hub/
183- return url_path_join(self.base_url, 'zenodo-auth', 'callback')
184-
185187 class ZenodoCallbackHandler(BaseHandler):
186188 async def get(self):
187189 user = self.current_user
@@ -192,7 +194,7 @@ spec:
192194 if not state_cookie or state_cookie.decode() != state_param:
193195 raise web.HTTPError(400, 'Invalid state')
194196 code = self.get_argument('code', '')
195- callback_url = ZenodoLoginHandler._callback_url(self) # reuse logic
197+ callback_url = ZenodoLoginHandler._callback_url(self)
196198 data = {
197199 'grant_type': 'authorization_code',
198200 'code': code,
@@ -216,10 +218,10 @@ spec:
216218 self.clear_cookie('zen_state')
217219 self.redirect(url_path_join(self.base_url, 'home'))
218220
219- # Register handlers using (deprecated but functional) extra_handlers
221+ # Register handlers using extra_handlers (deprecated but fucntional)
220222 c.JupyterHub.extra_handlers = [
221- (r'/zenodo-auth /login', ZenodoLoginHandler),
222- (r'/zenodo-auth /callback', ZenodoCallbackHandler),
223+ (r'/zenodo/login', ZenodoLoginHandler),
224+ (r'/zenodo/callback', ZenodoCallbackHandler),
223225 ]
224226
225227 singleuser :
@@ -289,10 +291,10 @@ spec:
289291 description : " quay.io/jupyter/scipy-notebook:python-3.11 image"
290292 kubespawner_override :
291293 image : quay.io/jupyter/scipy-notebook:python-3.11.10
292- - display_name : " Zenodo Jupyterlab dev env"
294+ - display_name : " Zenodo Jupyterlab extension DEV env"
293295 description : " All in the tittle"
294296 kubespawner_override :
295- image : ghcr.io/vre-hub/zenodo-jupyterlab-extension:refactor_extension
297+ image : ghcr.io/vre-hub/zenodo-jupyterlab-extension:dev-oauth
296298 # - display_name: "VRE and rucio extension integration"
297299 # description: "python3.11 and Rucio extension integration "
298300 # kubespawner_override:
0 commit comments