]> git.ipfire.org Git - pbs.git/commitdiff
repositories: Generate a new own key
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 6 Oct 2022 17:31:38 +0000 (17:31 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 6 Oct 2022 17:31:38 +0000 (17:31 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/keys.py
src/buildservice/repository.py

index 0e5e92de2a052675f08a66b8e7f30d0d1a665711..e38de654ef8d4d30969d280949fd6cbe77b6e43f 100644 (file)
@@ -45,9 +45,13 @@ class Keys(base.Object):
                """
                return await asyncio.to_thread(self._generate, *args, **kwargs)
 
-       def _generate(self, uid, algorithm=None):
+       def _generate(self, uid, email=None, algorithm=None):
                log.debug("Generating key for %s (%s)" % (uid, algorithm))
 
+               # Append email if we have any
+               if email:
+                       uid = "%s <%s>" % (uid, email)
+
                # Launch a new Pakfire instance
                p = self.backend.pakfire()
 
index dbbcaa6d835352b122e72cdc5d7c5187e3b26196..d6b0a417c29c7220f6da825484225db1481e4979 100644 (file)
@@ -61,13 +61,7 @@ class Repositories(base.Object):
                slug = self._make_slug(name, owner=owner)
 
                # Create a key for this repository
-               if owner:
-                       key = await owner.key.generate_subkey(name)
-
-               # If this is not a personal repository,
-               # we generate a subkey for the distribution key
-               else:
-                       key = await distro.key.generate_subkey(name)
+               key = await self._make_key(distro, name, owner=owner)
 
                repo = self._get_repository("""
                        INSERT INTO
@@ -107,6 +101,23 @@ class Repositories(base.Object):
                        if not exists:
                                return slug
 
+       async def _make_key(self, distro, name, owner=None):
+               """
+                       Generates a new key for the repository
+               """
+               # Generate the UID
+               uid = "%s - %s" % (distro, name)
+
+               # For personal repositories, we will prepend the owner
+               if owner:
+                       uid = "%s - %s" % (owner, uid)
+
+               # Fetch an email address
+               email = owner.email if owner else distro.contact
+
+               # Generate the key
+               return await self.backend.keys.generate(uid, email=email)
+
        def get_by_id(self, repo_id):
                return self._get_repository("SELECT * FROM repositories \
                        WHERE id = %s", repo_id)