From 47a84a7cdd3c257c56947e27c0584f5d91c2a43a Mon Sep 17 00:00:00 2001
From: Eva Bardou <ebardou@teklia.com>
Date: Thu, 27 Aug 2020 07:11:29 +0000
Subject: [PATCH] Add git_clone_url attribute on Repository serializer

---
 arkindex/dataimport/serializers/git.py  | 10 ++++++----
 arkindex/dataimport/tests/test_repos.py | 10 +++++-----
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/arkindex/dataimport/serializers/git.py b/arkindex/dataimport/serializers/git.py
index e7124282bc..e1334af085 100644
--- a/arkindex/dataimport/serializers/git.py
+++ b/arkindex/dataimport/serializers/git.py
@@ -3,6 +3,7 @@ from arkindex.project.serializer_fields import EnumField
 from arkindex.documents.models import Corpus
 from arkindex.dataimport.models import DataImport, Repository, Revision, GitRef, GitRefType, WorkerVersionState
 import gitlab.v4.objects
+import urllib
 
 
 class GitRefSerializer(serializers.ModelSerializer):
@@ -68,11 +69,12 @@ class RepositorySerializer(serializers.ModelSerializer):
     Serialize a repository
     """
     enabled = serializers.BooleanField(read_only=True)
-    gitlab_token = serializers.SerializerMethodField()
+    git_clone_url = serializers.SerializerMethodField()
 
-    def get_gitlab_token(self, repository):
+    def get_git_clone_url(self, repository):
         if self.context['request'].user.is_internal and isinstance(self.instance, Repository) and self.instance.enabled:
-            return repository.credentials.token
+            url = urllib.parse.urlparse(self.instance.url)
+            return f"https://oauth2:{repository.credentials.token}@{url.netloc}{url.path}"
         return None
 
     class Meta:
@@ -82,7 +84,7 @@ class RepositorySerializer(serializers.ModelSerializer):
             'url',
             'enabled',
             'corpus',
-            'gitlab_token',
+            'git_clone_url',
         )
         extra_kwargs = {
             'id': {'read_only': True},
diff --git a/arkindex/dataimport/tests/test_repos.py b/arkindex/dataimport/tests/test_repos.py
index eb5d048d62..931926eba8 100644
--- a/arkindex/dataimport/tests/test_repos.py
+++ b/arkindex/dataimport/tests/test_repos.py
@@ -77,7 +77,7 @@ class TestRepositories(FixtureTestCase):
             'id': str(self.repo.id),
             'corpus': str(self.repo.corpus.id),
             'enabled': True,
-            'gitlab_token': None,
+            'git_clone_url': None,
             'url': self.repo.url,
         })
 
@@ -91,7 +91,7 @@ class TestRepositories(FixtureTestCase):
             'id': str(self.repo.id),
             'corpus': str(self.repo.corpus.id),
             'enabled': True,
-            'gitlab_token': None,
+            'git_clone_url': None,
             'url': self.repo.url,
         })
 
@@ -121,7 +121,7 @@ class TestRepositories(FixtureTestCase):
             'id': str(self.repo.id),
             'corpus': str(self.repo.corpus.id),
             'enabled': True,
-            'gitlab_token': None,
+            'git_clone_url': None,
             'url': self.repo.url,
         })
 
@@ -136,7 +136,7 @@ class TestRepositories(FixtureTestCase):
             'id': str(self.repo.id),
             'corpus': str(self.repo.corpus.id),
             'enabled': True,
-            'gitlab_token': 'oauth-token',
+            'git_clone_url': 'https://oauth2:oauth-token@gitlab/repo',
             'url': self.repo.url,
         })
 
@@ -157,7 +157,7 @@ class TestRepositories(FixtureTestCase):
             'id': str(self.repo.id),
             'corpus': str(self.repo.corpus.id),
             'enabled': False,
-            'gitlab_token': None,
+            'git_clone_url': None,
             'url': self.repo.url,
         })
 
-- 
GitLab