|
71 | 71 | renku_2_make_server_name, |
72 | 72 | ) |
73 | 73 | from renku_data_services.notebooks.utils import ( |
| 74 | + get_user_secret, |
74 | 75 | merge_node_affinities, |
75 | 76 | node_affinity_from_resource_class, |
76 | 77 | tolerations_from_resource_class, |
@@ -342,9 +343,26 @@ async def _handler( |
342 | 343 | secrets_to_create: list[V1Secret] = [] |
343 | 344 | # Generate the cloud starge secrets |
344 | 345 | data_sources: list[DataSource] = [] |
| 346 | + user_secret_key: str | None = None |
| 347 | + if isinstance(user, AuthenticatedAPIUser) and len(dcs_secrets) > 0: |
| 348 | + user_secret_key = await get_user_secret(self.nb_config.data_service_url, user) |
345 | 349 | for cs_id, cs in dcs.items(): |
346 | 350 | secret_name = f"{server_name}-ds-{cs_id.lower()}" |
347 | | - secrets_to_create.append(cs.secret(secret_name, self.nb_config.k8s_client.preferred_namespace)) |
| 351 | + secret_key_needed = len(dcs_secrets.get(cs_id, [])) > 0 |
| 352 | + if secret_key_needed and user_secret_key is None: |
| 353 | + raise errors.ProgrammingError( |
| 354 | + message=f"You have saved storage secrets for data connector {cs_id} " |
| 355 | + f"associated with your user ID {user.id} but no key to decrypt them, " |
| 356 | + "therefore we cannot mount the requested data connector. " |
| 357 | + "Please report this to the renku administrators." |
| 358 | + ) |
| 359 | + secrets_to_create.append( |
| 360 | + cs.secret( |
| 361 | + secret_name, |
| 362 | + self.nb_config.k8s_client.preferred_namespace, |
| 363 | + user_secret_key=user_secret_key if secret_key_needed else None, |
| 364 | + ) |
| 365 | + ) |
348 | 366 | data_sources.append( |
349 | 367 | DataSource( |
350 | 368 | mountPath=cs.mount_folder, |
|
0 commit comments