From b12c2dda69d6e65f0dffff4eb4d7356600ece162 Mon Sep 17 00:00:00 2001 From: Tim Lorsbach Date: Tue, 8 Sep 2026 15:11:47 +0200 Subject: [PATCH] wip --- bayer/migrations/0004_package_shareable.py | 18 +++++++++ bayer/models.py | 1 + bayer/views.py | 4 +- epauth/views.py | 10 ++++- epdb/logic.py | 7 +++- templates/actions/objects/package.html | 4 +- templates/actions/objects/user.html | 2 + templates/index/index.html | 46 ++++++++++++++++++---- 8 files changed, 77 insertions(+), 15 deletions(-) create mode 100644 bayer/migrations/0004_package_shareable.py diff --git a/bayer/migrations/0004_package_shareable.py b/bayer/migrations/0004_package_shareable.py new file mode 100644 index 00000000..f2837c09 --- /dev/null +++ b/bayer/migrations/0004_package_shareable.py @@ -0,0 +1,18 @@ +# Generated by Django 6.0.3 on 2026-09-08 08:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('bayer', '0003_pescompound_pesstructure_package_data_pool'), + ] + + operations = [ + migrations.AddField( + model_name='package', + name='shareable', + field=models.BooleanField(default=True, verbose_name='Shareable'), + ), + ] diff --git a/bayer/models.py b/bayer/models.py index afa61f2e..0e0d5b48 100644 --- a/bayer/models.py +++ b/bayer/models.py @@ -23,6 +23,7 @@ class Package(EnviPathModel): license = models.ForeignKey( "epdb.License", on_delete=models.SET_NULL, blank=True, null=True, verbose_name="License" ) + shareable = models.BooleanField(verbose_name="Shareable", default=True) class Classification(models.IntegerChoices): INTERNAL = 0, "Internal" diff --git a/bayer/views.py b/bayer/views.py index d99ff8d1..bcb9790c 100644 --- a/bayer/views.py +++ b/bayer/views.py @@ -119,8 +119,8 @@ def create_pes_node(request, package_uuid, pathway_uuid): except ValueError as e: return error( request, - "Could not fetch PES", - f"Could not fetch PES data for {pes_link}" + "Failed to fetch this PES", + "Either the PES-ID is incorrect, or you're missing sufficient permissions to access this (potentially secret) item. In case you're missing permissions you can request the entitlement cs.u.enviPath_secret_data_user_group on go/idnow to gain access." ) classification = pes_data.get("classificationLevel", "") diff --git a/epauth/views.py b/epauth/views.py index feede8ee..ded983d4 100644 --- a/epauth/views.py +++ b/epauth/views.py @@ -77,7 +77,7 @@ def entra_callback(request): return error( request, "Login Failed", - "The user is not authenticated. A reason for this might be a missing assignment to the respective enviPath group.", + "Request access to role 1230/MON/APPS/Envipath/Envipath_Prod on go/idnow", 403, ) @@ -139,10 +139,16 @@ def entra_callback(request): auth_log.info(f"Login Group Sync: Adding {u.username} to Group {g.name} ({ uuid })") else: g = Group.objects.get(uuid=uuid) - if g.user_member.contains(u): + # Do not remove users from All enviPath Users + if g.user_member.contains(u) and g.name != 'All enviPath Users': g.user_member.remove(u) auth_log.info(f"Login Group Sync: Removing {u.username} from Group {g.name} ({ uuid })") + # Ensure people are part of All enviPath Users -> they have to as, envipath_registered_user is granted + all_envipath_users = Group.objects.get(name="All enviPath Users") + if not all_envipath_users.user_member.contains(u): + all_envipath_users.user_member.add(u) + if registered: # #72 make package secret if user is part of a secret group for id, name in s.ENTRA_SECRET_GROUPS.items(): diff --git a/epdb/logic.py b/epdb/logic.py index 152cf705..2aeffdce 100644 --- a/epdb/logic.py +++ b/epdb/logic.py @@ -211,7 +211,7 @@ class UserManager(object): # Create package package_name = f"{u.username}{'’' if u.username[-1] in 'sxzß' else 's'} Package" package_description = "This package was generated during registration." - p = PackageManager.create_package(u, package_name, package_description) + p = PackageManager.create_package(u, package_name, package_description, shareable=False) u.default_package = p u.save() @@ -547,7 +547,7 @@ class PackageManager(object): @staticmethod @transaction.atomic - def create_package(current_user, name: str, description: str = None): + def create_package(current_user, name: str, description: str = None, *args, **kwargs): p = Package() # Clean for potential XSS @@ -556,6 +556,9 @@ class PackageManager(object): if description is not None and description.strip() != "": p.description = nh3.clean(description.strip(), tags=s.ALLOWED_HTML_TAGS).strip() + if "shareable" in kwargs: + p.shareable = kwargs["shareable"] + p.save() up = UserPackagePermission() diff --git a/templates/actions/objects/package.html b/templates/actions/objects/package.html index 2e3e560e..9cf8176b 100644 --- a/templates/actions/objects/package.html +++ b/templates/actions/objects/package.html @@ -7,6 +7,7 @@ Edit Package + {% if meta.current_package.shareable %}
  • Edit Permissions
  • + {% endif %} {% if meta.current_package.get_classification_level_display != "Secret" %}
  • {% endif %} -{% if not meta.can_edit %} +{% if not meta.can_edit and meta.current_package.shareable %}
  • Update
  • + {% if 1 == 0 %}
  • Update Password
  • + {% endif %}
  • Aspartame - Advanced + {% if meta.current_package %} +
    + Prediction will be stored in + {{ meta.current_package.name|safe }} + {% if meta.user.default_setting %} + using setting + {{ meta.user.default_setting.name|safe }} + {% endif %} +
    + To use a different setting click + here +
    + {% endif %}
    Predict! -
    - Advanced -
    + {% if meta.current_package %} +
    + Prediction will be stored in + {{ meta.current_package.name|safe }} + {% if meta.user.default_setting %} + using setting + {{ meta.user.default_setting.name|safe }} + {% endif %} +
    + To use a different setting click + here +
    + {% endif %}