diff --git a/app/models/clusters/applications/jupyter.rb b/app/models/clusters/applications/jupyter.rb index 36c51522089bac12dc34d1494a4aa5917435f0a5..bd9c453e2a4cfe408a38eb43ec5b7b44dd2ae7bb 100644 --- a/app/models/clusters/applications/jupyter.rb +++ b/app/models/clusters/applications/jupyter.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'securerandom' + module Clusters module Applications class Jupyter < ApplicationRecord @@ -80,6 +82,9 @@ def specification "secretToken" => secret_token }, "auth" => { + "state" => { + "cryptoKey" => crypto_key + }, "gitlab" => { "clientId" => oauth_application.uid, "clientSecret" => oauth_application.secret, @@ -95,6 +100,10 @@ def specification } end + def crypto_key + @crypto_key ||= SecureRandom.hex(32) + end + def project_id cluster&.project&.id end diff --git a/changelogs/unreleased/jupyter_pre_spawn_hook_v2.yml b/changelogs/unreleased/jupyter_pre_spawn_hook_v2.yml new file mode 100644 index 0000000000000000000000000000000000000000..c5918df8193d1c5db676b542ab7729f406865674 --- /dev/null +++ b/changelogs/unreleased/jupyter_pre_spawn_hook_v2.yml @@ -0,0 +1,5 @@ +--- +title: Pass user's identity and token from JupyterHub to user's Jupyter environment +merge_request: 27314 +author: Amit Rathi +type: added diff --git a/vendor/jupyter/values.yaml b/vendor/jupyter/values.yaml index 781d6e3042fba1bfb651aa05e0d16f1b575e216d..a5e13fdc104a29af033402f8858b8184f7a14e38 100644 --- a/vendor/jupyter/values.yaml +++ b/vendor/jupyter/values.yaml @@ -8,8 +8,28 @@ hub: extraConfig: | c.KubeSpawner.cmd = ['jupyter-labhub'] + async def add_auth_env(spawner): + ''' + We set user's id, login and access token on single user image to + enable repository integration for JupyterHub. + See: https://gitlab.com/gitlab-org/gitlab-ce/issues/47138#note_154294790 + ''' + auth_state = await spawner.user.get_auth_state() + + if not auth_state: + spawner.log.warning("No auth state for %s", spawner.user) + return + + spawner.environment['GITLAB_ACCESS_TOKEN'] = auth_state['access_token'] + spawner.environment['GITLAB_USER_LOGIN'] = auth_state['gitlab_user']['username'] + spawner.environment['GITLAB_USER_ID'] = str(auth_state['gitlab_user']['id']) + + c.KubeSpawner.pre_spawn_hook = add_auth_env + auth: type: gitlab + state: + enabled: true singleuser: defaultUrl: "/lab"