Skip to content

Commit fb8e82a

Browse files
committed
feat: use internal tokens for git-clone
1 parent 71f031d commit fb8e82a

3 files changed

Lines changed: 30 additions & 15 deletions

File tree

components/renku_data_services/notebooks/api/amalthea_patches/git_proxy.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ async def main_container(
2727
internal_token_mint: RenkuSelfTokenMint,
2828
) -> client.V1Container | None:
2929
"""The patch that adds the git proxy container to a session statefulset."""
30-
if not user.is_authenticated or not repositories or user.access_token is None or user.refresh_token is None:
30+
if not user.is_authenticated or not repositories or user.access_token is None:
3131
return None
3232

3333
etc_cert_volume_mount = get_certificates_volume_mounts(

components/renku_data_services/notebooks/api/amalthea_patches/init_containers.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from kubernetes import client
1212

13+
from renku_data_services.authn.renku import RenkuSelfTokenMint
1314
from renku_data_services.base_models.core import AnonymousAPIUser, AuthenticatedAPIUser
1415
from renku_data_services.notebooks.api.amalthea_patches.utils import (
1516
get_certificates_volume_mounts,
@@ -30,8 +31,10 @@
3031

3132

3233
async def git_clone_container_v2(
34+
server_name: str,
3335
user: AuthenticatedAPIUser | AnonymousAPIUser,
3436
config: NotebooksConfig,
37+
internal_token_mint: RenkuSelfTokenMint,
3538
repositories: list[Repository],
3639
git_providers: list[GitProvider],
3740
workspace_mount_path: PurePosixPath,
@@ -52,6 +55,9 @@ async def git_clone_container_v2(
5255
read_only_etc_certs=True,
5356
)
5457

58+
internal_token_scope = f"session:{server_name}"
59+
internal_access_token = internal_token_mint.create_access_token(user=user, scope=internal_token_scope)
60+
5561
prefix = "GIT_CLONE_"
5662
env = [
5763
{
@@ -68,7 +74,8 @@ async def git_clone_container_v2(
6874
},
6975
{
7076
"name": f"{prefix}USER__RENKU_TOKEN",
71-
"value": str(user.access_token),
77+
# "value": str(user.access_token),
78+
"value": internal_access_token,
7279
},
7380
{"name": f"{prefix}IS_GIT_PROXY_ENABLED", "value": "0" if user.is_anonymous else "1"},
7481
{

components/renku_data_services/notebooks/core_sessions.py

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,9 @@
113113

114114
async def get_extra_init_containers(
115115
nb_config: NotebooksConfig,
116+
server_name: str,
116117
user: AnonymousAPIUser | AuthenticatedAPIUser,
118+
internal_token_mint: RenkuSelfTokenMint,
117119
repositories: list[Repository],
118120
git_providers: list[GitProvider],
119121
storage_mount: PurePosixPath,
@@ -127,8 +129,10 @@ async def get_extra_init_containers(
127129
session_init_containers = [InitContainer.model_validate(sanitizer(cert_init))]
128130
extra_volumes = [ExtraVolume.model_validate(sanitizer(volume)) for volume in cert_vols]
129131
git_clone = await init_containers.git_clone_container_v2(
132+
server_name=server_name,
130133
user=user,
131134
config=nb_config,
135+
internal_token_mint=internal_token_mint,
132136
repositories=repositories,
133137
git_providers=git_providers,
134138
workspace_mount_path=storage_mount,
@@ -692,7 +696,7 @@ def get_remote_secret(
692696
internal_token_mint: RenkuSelfTokenMint,
693697
) -> ExtraSecret | None:
694698
"""Returns the secret containing the configuration for the remote session controller."""
695-
if not user.is_authenticated or user.access_token is None or user.refresh_token is None:
699+
if not user.is_authenticated or user.access_token is None:
696700
return None
697701
remote_provider = next(filter(lambda p: p.id == remote_provider_id, git_providers), None)
698702
if not remote_provider:
@@ -841,12 +845,14 @@ async def start_session(
841845
# More init containers
842846
session_extras = session_extras.concat(
843847
await get_extra_init_containers(
844-
nb_config,
845-
user,
846-
repositories,
847-
git_providers,
848-
storage_mount,
849-
work_dir,
848+
nb_config=nb_config,
849+
server_name=server_name,
850+
user=user,
851+
internal_token_mint=internal_token_mint,
852+
repositories=repositories,
853+
git_providers=git_providers,
854+
storage_mount=storage_mount,
855+
work_dir=work_dir,
850856
uid=environment.uid,
851857
gid=environment.gid,
852858
)
@@ -1197,12 +1203,14 @@ async def patch_session(
11971203
# More init containers
11981204
session_extras = session_extras.concat(
11991205
await get_extra_init_containers(
1200-
nb_config,
1201-
user,
1202-
repositories,
1203-
git_providers,
1204-
storage_mount,
1205-
work_dir,
1206+
nb_config=nb_config,
1207+
server_name=server_name,
1208+
user=user,
1209+
internal_token_mint=internal_token_mint,
1210+
repositories=repositories,
1211+
git_providers=git_providers,
1212+
storage_mount=storage_mount,
1213+
work_dir=work_dir,
12061214
uid=environment.uid,
12071215
gid=environment.gid,
12081216
)

0 commit comments

Comments
 (0)