From a97eefed044a0558a901a705f188de37aee00b85 Mon Sep 17 00:00:00 2001
From: James Graham <J.Graham@software.ac.uk>
Date: Thu, 28 Feb 2019 12:12:16 +0000
Subject: [PATCH] Add UUID to application proxy usernames - fixes #67

---
 applications/models.py                         |  5 ++++-
 .../datasources/datasource/manage_access.html  | 18 ++++++++++++++++--
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/applications/models.py b/applications/models.py
index 33fc2ec..fa32ec2 100644
--- a/applications/models.py
+++ b/applications/models.py
@@ -1,3 +1,5 @@
+from uuid import uuid4
+
 from django.contrib.auth import get_user_model
 from django.contrib.auth.models import Group
 from django.conf import settings
@@ -127,7 +129,8 @@ class Application(ProvAbleModel, ProvApplicationModel, BaseAppDataModel):
         if self.proxy_user:
             return self.proxy_user
 
-        proxy_username = 'application-proxy-' + slugify(self.name)
+        # Add random UUID to username to allow multiple applications with the same name
+        proxy_username = 'application-proxy-' + slugify(self.name) + str(uuid4())
         proxy_user = get_user_model().objects.create_user(proxy_username)
 
         # Create an API access token for the proxy user
diff --git a/datasources/templates/datasources/datasource/manage_access.html b/datasources/templates/datasources/datasource/manage_access.html
index 11ce9bd..014e495 100644
--- a/datasources/templates/datasources/datasource/manage_access.html
+++ b/datasources/templates/datasources/datasource/manage_access.html
@@ -47,7 +47,13 @@
                 <tr id="requested-user-{{ permission.user.pk }}">
                     <td>
                         <p>
-                            {{ permission.user.username }}
+                            {% if permission.user.application_proxy %}
+                                {{ permission.user.application_proxy.name }}
+                                <a href="{% url 'applications:application.detail' pk=permission.user.application_proxy.pk %}"
+                                   role="button" class="badge badge-info">App</a>
+                            {% else %}
+                                {{ permission.user.username }}
+                            {% endif %}
                         </p>
                         {% if permission.reason %}
                             <div class="alert alert-secondary" role="note">
@@ -105,7 +111,15 @@
         <tbody>
         {% for permission in permissions_granted %}
             <tr id="approved-user-{{ permission.user.pk }}">
-                <td>{{ permission.user.username }}</td>
+                <td>
+                    {% if permission.user.application_proxy %}
+                        {{ permission.user.application_proxy.name }}
+                        <a href="{% url 'applications:application.detail' pk=permission.user.application_proxy.pk %}"
+                           role="button" class="badge badge-info">App</a>
+                    {% else %}
+                        {{ permission.user.username }}
+                    {% endif %}
+                </td>
                 <td>{{ permission.get_requested_display }}</td>
                 <td>{{ permission.get_granted_display }}</td>
                 <td>
-- 
GitLab