diff --git a/debexpo/base/locale/fr/LC_MESSAGES/django.po b/debexpo/base/locale/fr/LC_MESSAGES/django.po index 20d32427dd00865eaf69ef3512a720286ef1a777..961cf2eebeb16e27bfc3b244a6b327a68e565134 100644 --- a/debexpo/base/locale/fr/LC_MESSAGES/django.po +++ b/debexpo/base/locale/fr/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: debexpo 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-21 10:24+0000\n" -"PO-Revision-Date: 2020-11-21 11:24+0100\n" +"POT-Creation-Date: 2021-10-17 18:33+0000\n" +"PO-Revision-Date: 2021-10-17 20:49+0200\n" "Last-Translator: Baptiste Beauplat \n" "Language-Team: French <>\n" "Language: fr\n" @@ -17,81 +17,81 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 3.0\n" -#: templates/base.html:55 +#: base/templates/base.html:55 msgid "Start page" msgstr "Page d'accueil" -#: templates/base.html:61 +#: base/templates/base.html:61 msgid "Package list" msgstr "Liste des paquets" -#: templates/base.html:67 +#: base/templates/base.html:67 msgid "Maintainer" msgstr "Mainteneur" -#: templates/base.html:73 +#: base/templates/base.html:73 msgid "Reviews" msgstr "Revues" -#: templates/base.html:79 +#: base/templates/base.html:79 msgid "Sponsors" msgstr "Parrains" -#: templates/base.html:85 +#: base/templates/base.html:85 msgid "Q & A" msgstr "F.A.Q." -#: templates/base.html:91 templates/base.html:145 +#: base/templates/base.html:91 base/templates/base.html:148 msgid "Contact" msgstr "Contact" -#: templates/base.html:103 +#: base/templates/base.html:103 msgid "My account" msgstr "Mon compte" -#: templates/base.html:106 +#: base/templates/base.html:106 msgid "My packages" msgstr "Mes paquets" -#: templates/base.html:109 +#: base/templates/base.html:109 msgid "My subscriptions" msgstr "Mes abonnements" -#: templates/base.html:113 +#: base/templates/base.html:112 +msgid "Logout" +msgstr "Déconnexion" + +#: base/templates/base.html:116 msgid "Sign me up" msgstr "Inscription" -#: templates/base.html:116 +#: base/templates/base.html:119 msgid "Login" msgstr "Connexion" -#: templates/base.html:131 +#: base/templates/base.html:134 msgid "Hosting and hardware provided by" msgstr "Hébergement et matériel mis à disposition par" -#: templates/base.html:136 +#: base/templates/base.html:139 msgid "Source code and bugs" msgstr "Code source et bugs" -#: templates/base.html:139 +#: base/templates/base.html:142 msgid "Version" msgstr "Version" -#: templates/base.html:150 -msgid "Logout" -msgstr "Déconnexion" - -#: templates/base.html:155 +#: base/templates/base.html:152 msgid "RSS" msgstr "RSS" -#: templates/contact.html:5 +#: base/templates/contact.html:5 msgid "Site contact" msgstr "Contact du site" -#: templates/contact.html:8 +#: base/templates/contact.html:8 #, python-format msgid "" "You can get in direct contact with the debexpo team. In case of technical " @@ -111,11 +111,11 @@ msgstr "" "diffusion debian-mentors ou remplissez un bug RFS." -#: templates/contact.html:20 +#: base/templates/contact.html:20 msgid "Site email" msgstr "Courriel du site" -#: templates/contact.html:25 +#: base/templates/contact.html:25 msgid "" "Currently Baptiste Beauplat (lyknode), Mattia Rizzolo (mattia, IRC: mapreri) and Paul Wise (pabs) are maintaining " @@ -125,11 +125,11 @@ msgstr "" "(mattia, IRC: mapreri) and Paul Wise (pabs) " "maintiennent ce service." -#: templates/contact.html:32 +#: base/templates/contact.html:32 msgid "Development" msgstr "Développement" -#: templates/contact.html:35 +#: base/templates/contact.html:35 #, python-format msgid "" "We are always looking for new contributors. If you want to contribute or " @@ -141,12 +141,12 @@ msgstr "" "#debexpo sur irc.debian." "org pour discuter avec nous." -#: templates/index.html:6 +#: base/templates/index.html:6 #, python-format msgid "Welcome to %(name)s" msgstr "Bienvenue sur %(name)s" -#: templates/index.html:12 +#: base/templates/index.html:12 msgid "" "Only approved members of the Debian project (Debian Developers) are granted " "the permission to upload software packages into the Debian distribution. " @@ -169,7 +169,7 @@ msgstr "" "techniquement correct et aidera le mainteneur à améliorer le paquets si " "nécessaire. Ainsi, le parrain est aussi appelé un mentor." -#: templates/index.html:27 +#: base/templates/index.html:27 msgid "" "Note, not only Debian Developer are allowed to review packages. Everyone is " "encouraged to review packages! We appreciate your efforts as well." @@ -178,11 +178,11 @@ msgstr "" "les revue de paquets. Tout le monde est encouragé à le faire ! Nous " "apprécions également vos efforts." -#: templates/index.html:33 +#: base/templates/index.html:33 msgid "Getting your package into Debian" msgstr "Envoyez vos paquets dans Debian" -#: templates/index.html:36 +#: base/templates/index.html:36 #, python-format msgid "" "See our introductory page for " @@ -196,7 +196,7 @@ msgstr "" "\">notre page d'introduction sur le parrainage pour apprendre comment " "prendre contact avec un parrain." -#: templates/index.html:45 +#: base/templates/index.html:45 msgid "" "If you are curious about Debexpo, the software which is running " "this site, you can read more " @@ -206,16 +206,16 @@ msgstr "" "tourner ce site, vous pouvez en " "apprendre d'avantage sur Debexpo sur le Wiki Debian." -#: templates/index.html:52 +#: base/templates/index.html:52 msgid "Recently uploaded packages" msgstr "Paquets envoyés récemment" -#: templates/intro-maintainers.html:6 +#: base/templates/intro-maintainers.html:6 msgid "Introduction for maintainers: How will my package get into Debian?" msgstr "" "Introduction pour les mainteneurs : Comment mon paquet sera mis dans Debian?" -#: templates/intro-maintainers.html:12 +#: base/templates/intro-maintainers.html:12 msgid "" "We are glad that you found your way to our web site. Honestly, the whole web " "site is just there to get your work into Debian. Your contribution is highly " @@ -227,15 +227,15 @@ msgstr "" "Debian. Votre contribution est très apprécié. Continuez votre lecture pour " "voir comment nous vous aideront à trouver un parrain." -#: templates/intro-maintainers.html:20 +#: base/templates/intro-maintainers.html:20 msgid "1. Identify a package" msgstr "1. Trouver un paquet" -#: templates/intro-maintainers.html:22 +#: base/templates/intro-maintainers.html:22 msgid "Propose a package: File a WNPP bug" msgstr "Proposer un nouveau paquet : Remplissez un bug WNPP" -#: templates/intro-maintainers.html:25 +#: base/templates/intro-maintainers.html:25 msgid "" "If you want to package something not currently available in Debian, the very " "first step should be to file an \"Intent to package\" (ITP) bug on " @@ -247,7 +247,7 @@ msgstr "" "\" (ITP) sur Work-" "Needing and Prospective Packages." -#: templates/intro-maintainers.html:34 +#: base/templates/intro-maintainers.html:34 #, python-format msgid "" "Debian is a distribution, not a general purpose repository. Many of us do " @@ -274,11 +274,11 @@ msgstr "" "\"%(u_sponsor)s\">page sur les parrains pour en apprendre plus sur les " "centres d'intérêt des parrains." -#: templates/intro-maintainers.html:49 +#: base/templates/intro-maintainers.html:49 msgid "Find a package looking for maintainers" msgstr "Trouver un paquet ayant besoin de mainteneurs" -#: templates/intro-maintainers.html:52 +#: base/templates/intro-maintainers.html:52 msgid "" "If you want to contribute to Debian, but you do not know which packages to " "contribute to, take a look at \"Request for help\" (RFH), \"Request " @@ -290,7 +290,7 @@ msgstr "" "\"Request for adopter\" (RFA), \"Orphaned package\" (O) et " "\"Request for package\" (RFP). Voir WNPP, ci-dessous." -#: templates/intro-maintainers.html:61 +#: base/templates/intro-maintainers.html:61 msgid "" " Work-Needing and Prospective " "Packages (WNPP) is our system of announcing your intent to " @@ -311,11 +311,11 @@ msgstr "" "sid/reportbug\">reportbug pour réaliser cette tâche, en " "sélectionnant \"wnpp\" comme paquet auquel appartient le bug." -#: templates/intro-maintainers.html:76 +#: base/templates/intro-maintainers.html:76 msgid "2. Make the package" msgstr "2. Créer le paquet" -#: templates/intro-maintainers.html:79 +#: base/templates/intro-maintainers.html:79 msgid "" "Debian packages must comply to several normative requirements and " "guidelines. We can't give you exhaustive instructions on how to build " @@ -330,11 +330,11 @@ msgstr "" "minimum, la charte Debian (voir ci-dessous). Merci de consulter ces " "excellentes ressources :" -#: templates/intro-maintainers.html:91 templates/qa.html:26 +#: base/templates/intro-maintainers.html:91 base/templates/qa.html:26 msgid "The Debian Policy Manual" msgstr "La charte Debian" -#: templates/intro-maintainers.html:95 +#: base/templates/intro-maintainers.html:95 msgid "" "A must-read resource to learn about technical specification and technical " "requirements of Debian packages." @@ -342,29 +342,29 @@ msgstr "" "Une ressource incontournable pour apprendre les spécifications techniques et " "les pre-requis techniques des paquets Debian." -#: templates/intro-maintainers.html:102 templates/qa.html:37 +#: base/templates/intro-maintainers.html:102 base/templates/qa.html:37 msgid "New Maintainer's Guide" msgstr "Le Guide du Nouveau Mainteneur" -#: templates/intro-maintainers.html:106 +#: base/templates/intro-maintainers.html:106 msgid "A must-read resource to learn basics of Debian source packages" msgstr "" "Une ressource incontournable pour apprendre les bases des paquets sources " "Debian" -#: templates/intro-maintainers.html:112 templates/qa.html:47 +#: base/templates/intro-maintainers.html:112 base/templates/qa.html:47 msgid "Lucas Nussbaum's packaging tutorial" msgstr "Le tutoriel de création de paquets de Lucas Nussbaum" -#: templates/intro-maintainers.html:116 templates/qa.html:51 +#: base/templates/intro-maintainers.html:116 base/templates/qa.html:51 msgid "A quick introduction to Debian packaging" msgstr "Une introduction succinte à l'empaquetage Debian" -#: templates/intro-maintainers.html:122 templates/qa.html:55 +#: base/templates/intro-maintainers.html:122 base/templates/qa.html:55 msgid "Developer's Reference" msgstr "Référence du Développeur" -#: templates/intro-maintainers.html:126 templates/qa.html:59 +#: base/templates/intro-maintainers.html:126 base/templates/qa.html:59 msgid "" "A comprehensive manual describing typical workflows and best practices " "related to Debian packages" @@ -372,11 +372,11 @@ msgstr "" "Un manuel complet décrivant les processus abituels ainsi que les bonnes " "pratiques pour les paquets Debian" -#: templates/intro-maintainers.html:133 templates/qa.html:66 +#: base/templates/intro-maintainers.html:133 base/templates/qa.html:66 msgid "Debian Mentors FAQ" msgstr "F.A.Q. de Debian Mentors" -#: templates/intro-maintainers.html:137 templates/qa.html:70 +#: base/templates/intro-maintainers.html:137 base/templates/qa.html:70 msgid "" "Another valuable resource to learn about common terms and workflows related " "to Debian" @@ -384,11 +384,11 @@ msgstr "" "Une autre ressource importante pour apprendre le vocabulaire et les " "processus attachés à Debian" -#: templates/intro-maintainers.html:145 +#: base/templates/intro-maintainers.html:145 msgid "3. Publish your package" msgstr "3. Publier votre paquet" -#: templates/intro-maintainers.html:148 +#: base/templates/intro-maintainers.html:148 #, python-format msgid "" "This web site is a public package repository of source packages. You can " @@ -407,12 +407,12 @@ msgstr "" "href=\"%(u_sponsor)s\">Des parrains intéressés peuvent alors télécharger " "votre paquet et l'envoyer sur Debian." -#: templates/intro-maintainers.html:160 +#: base/templates/intro-maintainers.html:160 #, python-format msgid "Using %(title)s" msgstr "En utilisant %(title)s" -#: templates/intro-maintainers.html:167 +#: base/templates/intro-maintainers.html:167 #, python-format msgid "" "Sign up for an account. " @@ -425,7 +425,7 @@ msgstr "" "prendra juste un moment. L'inscription est nécessaire afin d'avoir une " "adresse de courriel valide où les parrains pourrons vous contacter." -#: templates/intro-maintainers.html:175 +#: base/templates/intro-maintainers.html:175 #, python-format msgid "" "Upload your package to %(name)s. You do not need " @@ -440,7 +440,7 @@ msgstr "" "un navigateur, soit l'outil 'dget' ou même grâce à un simple appel " "à apt-get source ..." -#: templates/intro-maintainers.html:184 +#: base/templates/intro-maintainers.html:184 #, python-format msgid "" "Have a look at your personal package page. Your " @@ -453,7 +453,7 @@ msgstr "" "partir de là, vous pouvez changer plusieurs paramètres ainsi que récupérer " "le modèle de RFS (request-for-sponsorship)" -#: templates/intro-maintainers.html:192 +#: base/templates/intro-maintainers.html:192 #, python-format msgid "" "Your package is on display on the main page of %(title)s (if you enable the " @@ -464,7 +464,7 @@ msgstr "" "activer l'option \"Besoin d'un parrain\") pour que les parrains " "intéressés puisse le voir et, avec de la chance, le tester." -#: templates/intro-maintainers.html:199 +#: base/templates/intro-maintainers.html:199 msgid "" "You will be shown a RFS (request-for-sponsorship) template " "that you should send out as a bug report filed against the sponsorship-" @@ -475,12 +475,12 @@ msgstr "" "paquet sponsorship-requests pour attirer l'attention sur votre " "paquet." -#: templates/intro-maintainers.html:209 +#: base/templates/intro-maintainers.html:209 #, python-format msgid "How to upload packages to %(name)s" msgstr "Comment envoyer des paquets sur %(name)s" -#: templates/intro-maintainers.html:215 +#: base/templates/intro-maintainers.html:215 msgid "" "You need to use dput to upload packages. We accept your uploads through HTTPS or " @@ -494,22 +494,22 @@ msgstr "" "(en utilisant debsign) avec la clef GnuPG configuré pour votre compte." -#: templates/intro-maintainers.html:226 +#: base/templates/intro-maintainers.html:226 msgid "HTTPS uploads" msgstr "Envois HTTPS" -#: templates/intro-maintainers.html:227 +#: base/templates/intro-maintainers.html:227 msgid "FTP uploads" msgstr "Envois FTP" -#: templates/intro-maintainers.html:232 +#: base/templates/intro-maintainers.html:232 msgid "" "To use HTTPS put the following content to your ~/.dput.cf file:" msgstr "" "Pour utiliser HTTPS, copiez le contenu ci-dessous dans votre fichier ~/." "dput.cf:" -#: templates/intro-maintainers.html:252 +#: base/templates/intro-maintainers.html:252 #, python-format msgid "" "You can use FTP to upload packages to %(title)s. If you prefer that " @@ -520,13 +520,13 @@ msgstr "" "Si vous préférer cette méthode, verifiez que vous avez signé vos envois avec " "votre clef GPG ! Le fichier ~/.dput.cf correspondant est :" -#: templates/intro-maintainers.html:276 +#: base/templates/intro-maintainers.html:276 msgid "Once you have it set up, you can run it from your shell like this:" msgstr "" "Une fois que vous l'avez configuré, vous pouvez le lancer dans un shell " "comme ceci :" -#: templates/intro-maintainers.html:286 +#: base/templates/intro-maintainers.html:286 msgid "" "If you did everything right, you will get a confirmation mail from our site " "and you can start seeking a sponsor for your package." @@ -535,11 +535,11 @@ msgstr "" "confirmation de la part de notre site et vous pourrez démarrer la recherche " "de parrain pour votre paquet." -#: templates/intro-maintainers.html:292 +#: base/templates/intro-maintainers.html:292 msgid "4. Find a sponsor" msgstr "4. Trouver un parrain" -#: templates/intro-maintainers.html:295 +#: base/templates/intro-maintainers.html:295 #, python-format msgid "" "Once your package is publicly available on any resource, including but not " @@ -559,7 +559,7 @@ msgstr "" "notre page des parrains pour en apprendre plus " "sur les parrains et comment en trouver un." -#: templates/intro-maintainers.html:308 +#: base/templates/intro-maintainers.html:308 #, python-format msgid "" "The main point of the sponsoring process is to review your package to make " @@ -575,11 +575,11 @@ msgstr "" "Merci de consulter notre page à propos des " "revues de paquets." -#: templates/intro-maintainers.html:317 +#: base/templates/intro-maintainers.html:317 msgid "The relation between you and your sponsor" msgstr "La relation entre votre parrain et vous" -#: templates/intro-maintainers.html:320 +#: base/templates/intro-maintainers.html:320 msgid "" "A sponsor is not technically responsible for your package. You will be listed as the official maintainer of the package in Debian. " @@ -596,11 +596,11 @@ msgstr "" "la communauté. Le projet Debian vous est reconnaissant du travail que vous " "faite." -#: templates/intro-maintainers.html:330 +#: base/templates/intro-maintainers.html:330 msgid "What can I do if I don't find a sponsor?" msgstr "Que puis-je faire si je ne trouve pas de parrain ?" -#: templates/intro-maintainers.html:333 +#: base/templates/intro-maintainers.html:333 msgid "" "Do not give up. Sponsoring can take a while. Nonetheless, here are a few " "hints:" @@ -608,7 +608,7 @@ msgstr "" "N'abandonnez pas. Le parrainage peut prendre du temps. Malgré tout, voici " "quelques indications :" -#: templates/intro-maintainers.html:341 +#: base/templates/intro-maintainers.html:341 msgid "" "File a follow-up request to your existing sponsorship-requests " "pseudo-package." @@ -616,7 +616,7 @@ msgstr "" "Envoyez une demande de suivi sur le bug existant du pseudo-paquet " "sponsorship-requests." -#: templates/intro-maintainers.html:347 +#: base/templates/intro-maintainers.html:347 #, python-format msgid "" "Offer your package directly to relevant teams and individual developers. We " @@ -632,11 +632,11 @@ msgstr "" "place, lisez les pré-requis individuels et choisissez le parrain qui " "correspond le mieux, à vous et à votre paquet." -#: templates/intro-maintainers.html:358 +#: base/templates/intro-maintainers.html:358 msgid "5. Getting an upload to Debian" msgstr "5. Faire un envoi dans Debian" -#: templates/intro-maintainers.html:361 +#: base/templates/intro-maintainers.html:361 msgid "" "Once you find a sponsor interested in your package, he or she will " "sponsor it. That means reviewing, building, and testing it and then " @@ -663,11 +663,11 @@ msgstr "" "social_contract#guidelines\">Principes du logiciel libre selon Debian. " "L’opinion des ftpmaster fait foi pour vous et votre parrain." -#: templates/intro-maintainers.html:377 +#: base/templates/intro-maintainers.html:377 msgid "6. Maintaining your package in Debian" msgstr "7. Maintenez vos paquets dans Debian" -#: templates/intro-maintainers.html:380 +#: base/templates/intro-maintainers.html:380 #, python-format msgid "" "Please see the corresponding chapter in the la procédure habituelle." -#: templates/intro-maintainers.html:392 +#: base/templates/intro-maintainers.html:392 msgid "" "If your package passes through the sponsoring process for a few " "successive uploads without any notable correction by your sponsor, you can " @@ -705,11 +705,11 @@ msgstr "" "\">devenir un Développeur Debian, vous donnant un accès complet en tant " "que membre du projet." -#: templates/qa.html:5 +#: base/templates/qa.html:5 msgid "Questions & Answers" msgstr "Foire aux Questions" -#: templates/qa.html:7 +#: base/templates/qa.html:7 #, python-format msgid "" "%(site_name)s is a rather complex service. Things can go wrong on your side " @@ -720,15 +720,15 @@ msgstr "" "passer de votre côté ou sur ce serveur. Avant de contacter le support, merci " "de vérifier si votre question n'a pas de réponse ici:" -#: templates/qa.html:13 +#: base/templates/qa.html:13 msgid "Getting started" msgstr "Bien commencer" -#: templates/qa.html:14 +#: base/templates/qa.html:14 msgid "How do I build a package?" msgstr "Comment puis-je construire un paquet ?" -#: templates/qa.html:17 +#: base/templates/qa.html:17 msgid "" "If you want to learn how to create a proper Debian package you can find some " "interesting documentation to start with:" @@ -736,7 +736,7 @@ msgstr "" "Si vous souhaitez apprendre à créer un vrai paquet Debian, vous pourrez " "trouver une documentation intéressante pour commencer:" -#: templates/qa.html:30 +#: base/templates/qa.html:30 msgid "" "A must read resource to learn about technical specification and technical " "requirements of Debian packages." @@ -744,21 +744,21 @@ msgstr "" "Une ressource incontournable pour apprendre les spécifications techniques et " "les pre-requis techniques des paquets Debian." -#: templates/qa.html:41 +#: base/templates/qa.html:41 msgid "A must read resource to learn basics of Debian source packages" msgstr "" "Une ressource incontournable pour apprendre les bases des paquets sources " "Debian" -#: templates/qa.html:67 +#: base/templates/qa.html:67 msgid "(Debian Wiki)" msgstr "(Wiki Debian)" -#: templates/qa.html:77 +#: base/templates/qa.html:77 msgid "What is the Debian policy?" msgstr "Qu'est-ce que la charte Debian ?" -#: templates/qa.html:80 +#: base/templates/qa.html:80 msgid "" "Every package must comply with the Debian policy before it can enter the " @@ -774,7 +774,7 @@ msgstr "" "d'architecture du système d'exploitation ainsi que les pré-requis techniques " "que chaque paquets soit satisfaire pour l'inclusion dans la distribution." -#: templates/qa.html:92 +#: base/templates/qa.html:92 msgid "" "The policy is not a tutorial. Its a technical manual which specifies " "normative requirements of packages. Read it to learn package specifications. " @@ -788,11 +788,11 @@ msgstr "" "Debian, merci de lire également le Guide du nouveau Mainteneur." -#: templates/qa.html:102 +#: base/templates/qa.html:102 msgid "Is my package technically okay?" msgstr "Est-ce que mon paquest est techniquement correct ?" -#: templates/qa.html:105 +#: base/templates/qa.html:105 #, python-format msgid "" "When you upload your package to %(site_name)s it will automatically be " @@ -813,11 +813,11 @@ msgstr "" "additionnelles. Ne soyez pas inquiet, si votre paquet est accepté par " "mentors.debian.net, alors laissez le parrain vous aider avec le reste." -#: templates/qa.html:117 +#: base/templates/qa.html:117 msgid "What is Lintian?" msgstr "Qu'est-ce que Lintian ?" -#: templates/qa.html:120 +#: base/templates/qa.html:120 msgid "" "Lintian is a Debian package checker (and available as Debian package so you can run it " @@ -830,7 +830,7 @@ msgstr "" "paquets binaires et sources sur leurs comformités avec la charte Debian and " "d'autres erreurs d'empaquetage." -#: templates/qa.html:129 +#: base/templates/qa.html:129 msgid "" "Packaging for Debian is rather complex because one has to consider hundreds " "of guidelines to make the package \"policy compliant\". Lintian tries to " @@ -845,15 +845,15 @@ msgstr "" "sur Lintian dans le Manuel de l'utilisateur Lintian." -#: templates/qa.html:139 +#: base/templates/qa.html:139 msgid "Your Account" msgstr "Votre compte" -#: templates/qa.html:141 +#: base/templates/qa.html:141 msgid "Why do I not receive a confirmation email?" msgstr "Pourquoi je n'ai pas reçu de courriel de confirmation ?" -#: templates/qa.html:144 +#: base/templates/qa.html:144 #, python-format msgid "" "First make sure that you signed the package with the proper PGP key. Next " @@ -870,11 +870,11 @@ msgstr "" "merci d'envoyer un mail à Courriel du site: %(email)s si vous avez besoin d'assitance." -#: templates/qa.html:154 +#: base/templates/qa.html:154 msgid "My binary packages do not show up" msgstr "Mon paquet binaire ne se trouve nul part" -#: templates/qa.html:157 +#: base/templates/qa.html:157 #, python-format msgid "" "The current policy on %(site_name)s is to deliberately throw away the binary " @@ -891,13 +891,13 @@ msgstr "" "entrainer beaucoup de question de support. Nous avons donc pris la décision " "de garder uniquement les paquets sources." -#: templates/qa.html:167 +#: base/templates/qa.html:167 msgid "How long will it take until my upload is available to sponsors?" msgstr "" "Combien de temps faut il avant que mon envoi ne soit disponible pour les " "parrains ?" -#: templates/qa.html:173 +#: base/templates/qa.html:173 #, python-format msgid "" "Regardless of the upload method you choose, the importer process runs every " @@ -909,7 +909,7 @@ msgstr "" "d'une minute pour traiter un paquet mais, il peut prendre plus longtemps sur " "les plus gros paquets." -#: templates/qa.html:181 +#: base/templates/qa.html:181 msgid "" "During the importing process, the server does quality assurance and other " "checks on your package. You will receive an email when it is ready." @@ -918,15 +918,15 @@ msgstr "" "autres vérifications sur votre paquet. Vous reçeverez un courriel quand " "celui ci sera prêt." -#: templates/qa.html:187 +#: base/templates/qa.html:187 msgid "Information for sponsors" msgstr "Information pour les parrains" -#: templates/qa.html:189 templates/sponsor-guidelines.html:9 +#: base/templates/qa.html:189 base/templates/sponsor-guidelines.html:9 msgid "What is a sponsor?" msgstr "Qu'est-ce qu'un parrain ?" -#: templates/qa.html:192 templates/sponsor-guidelines.html:12 +#: base/templates/qa.html:192 base/templates/sponsor-guidelines.html:12 msgid "" "Someone who uploads the package and is responsible for the package in the " "archive. The sponsor is responsible for the quality of the package and " @@ -936,11 +936,11 @@ msgstr "" "l'archive. Le parrain est responsable pour la qualité du paquet et vérifie " "le travail du mainteneur du paquet dans le but d'améliorer ces complétances." -#: templates/qa.html:199 +#: base/templates/qa.html:199 msgid "Why should I sponsor uploads" msgstr "Pourquoi devrais-je parrainer des envois" -#: templates/qa.html:202 +#: base/templates/qa.html:202 msgid "" "Thanks for your interest. There are a lot of sponsorees waiting for a " "Developer to help them with their packages, and if you want to help with the " @@ -951,11 +951,11 @@ msgstr "" "avec le processus de nouveau mainteneurs, c'est un bonne étape pour " "s'inverstir." -#: templates/qa.html:209 +#: base/templates/qa.html:209 msgid "What to do for sponsoring?" msgstr "Que faire pour parrainer ?" -#: templates/qa.html:212 templates/sponsor-guidelines.html:32 +#: base/templates/qa.html:212 base/templates/sponsor-guidelines.html:32 msgid "" "Look for packages that you would like to sponsor on this website. Once you " "have found some you should download, build and test them. Please notify your " @@ -975,11 +975,11 @@ msgstr "" "acquireront les complétences curiales pour les Développeur Debian plus " "facilement." -#: templates/reviewers.html:6 +#: base/templates/reviewers.html:6 msgid "Package reviews" msgstr "Revues de paquets" -#: templates/reviewers.html:9 +#: base/templates/reviewers.html:9 msgid "" "You can help to review packages. That is possible even if you are not a " "Debian developer (yet). No reason to be shy, it is ok if you do not " @@ -992,13 +992,13 @@ msgstr "" "suggestions sont correctes. Toute aide est appréciée. Intéressé(e) pour vous " "plonger dedans ? Rien de plus simple :" -#: templates/reviewers.html:17 +#: base/templates/reviewers.html:17 msgid "Why should I review packages? I can not upload them!" msgstr "" "Pourquoi devrai-je faire de la revue de paquets ? Je ne peux pas les " "envoyer !" -#: templates/reviewers.html:20 +#: base/templates/reviewers.html:20 msgid "" "Glad you ask! There are many reasons why you should review packages even if " "you can't actually upload them." @@ -1007,7 +1007,7 @@ msgstr "" "devriez faire de la revue de paquets même si, dans les faits, vous en pouvez " "pas les envoyer." -#: templates/reviewers.html:28 +#: base/templates/reviewers.html:28 msgid "" "The person you are reviewing will appreciate it. Chances are, you find " "problems in a package the person was not aware of yet. So they can learn " @@ -1017,7 +1017,7 @@ msgstr "" "bonne chance que vous trouviez des problèmes dans le paquets dont la " "personne n'avais pas connaissance. Elle pourra donc apprendre de vous." -#: templates/reviewers.html:35 +#: base/templates/reviewers.html:35 msgid "" "Eventually the package you are reviewing will be in a very good shape and " "you happen to learn something yourself. Moreover, you will also learn about " @@ -1031,7 +1031,7 @@ msgstr "" "Même dans le cas où le paquet ne satisfait pas les standards de qualité de " "Debian, vous pourrez apprendre comment ne pas faire les choses." -#: templates/reviewers.html:44 +#: base/templates/reviewers.html:44 msgid "" "People who can upload may decide based on your review whether the " "package in question is a suitable candidate or not." @@ -1040,11 +1040,11 @@ msgstr "" "décision sur votre revue, si le paquet en question est un candidat sérieux " "ou non." -#: templates/reviewers.html:51 +#: base/templates/reviewers.html:51 msgid "How can I review packages?" msgstr "Comment puis-je faire de la revue de paquets ?" -#: templates/reviewers.html:54 +#: base/templates/reviewers.html:54 msgid "" "Pick a source package and start. There is no single correct way to review " "packages, but chances are you may want to have a look on the following " @@ -1054,7 +1054,7 @@ msgstr "" "de faire de la revue de paquet, mais il y a des changes que vous voudrez " "regarder les points suivants :" -#: templates/reviewers.html:63 +#: base/templates/reviewers.html:63 msgid "" "Verify Lintian outputs: Did Lintian miss something, are fixes semantically " "correct?" @@ -1062,7 +1062,7 @@ msgstr "" "Vérification de la sortie de Lintian : Est-ce que Lintian à manquer quelque " "chose, les corrections sont elles sémantiquement correctes ?" -#: templates/reviewers.html:69 +#: base/templates/reviewers.html:69 msgid "" "Does the package satisfy Debian's best practicesles bonnes pratiques " "Debian pour les paquets ?" -#: templates/reviewers.html:76 +#: base/templates/reviewers.html:76 msgid "" "Does the package correctly declare dependencies as defined in the policy?" msgstr "" "Est-ce que le paquet déclare correctement ses dépendances, comme spécifié " "dans la charte ?" -#: templates/reviewers.html:82 +#: base/templates/reviewers.html:82 msgid "" "Does the package meet the DFSG? If yes, is the copyright file up to date and correct?" @@ -1088,7 +1088,7 @@ msgstr "" "social_contract\">DFSG ? Si oui, est-ce que le fichier copyright est " "correct et à jour ?" -#: templates/reviewers.html:89 +#: base/templates/reviewers.html:89 msgid "" "Do the maintainer scripts supplied with the package look robust, idempotent " "and useful?" @@ -1096,26 +1096,49 @@ msgstr "" "Est-ce que les scripts mainteneurs fourni avec le paquet semblent robustes, " "idempotents et utiles ?" -#: templates/reviewers.html:95 +#: base/templates/reviewers.html:95 msgid "Is there a watch file? If yes, does it work?" msgstr "Est-ce qu'il y a un fichier watch ? Si oui, est-il fonctionnel ?" -#: templates/reviewers.html:100 +#: base/templates/reviewers.html:100 msgid "Can you build the package in a clean build chroot?" msgstr "Pouvez-vous construire le paquet dans un chroot propre ?" -#: templates/reviewers.html:105 +#: base/templates/reviewers.html:105 msgid "" "Was the upstream tarball modified? If yes, is there a good reason to do so?" msgstr "" "La tarball upstream a-t-elle été modifié ? Si oui, y a t'il une bonne raison " "de le faire ?" -#: templates/reviewers.html:112 +#: base/templates/reviewers.html:113 +#, python-format +msgid "" +"You might also want to retrieve the maintainer GPG key to verify that all " +"subsequent uploads are signed using the same key. While the key should be " +"publicly available on servers such as keys.openpgp.org or " +"keyserver.ubuntu.com, %(name)s can also act as a basic keyserver. " +"Note that only key retrieval is implemented. Update or search are not " +"available." +msgstr "" +"Vous serez peut être également intéressé pour récupérer la clef GPG du " +"mainteneur afin de vérifier que les prochains envois sont signés en " +"utilisant la même clef. Alors que la clef devrait être disponible " +"publiquement auprès de serveurs tels que keys.openpgp.org ou " +"keyserver.ubuntu.com, %(name)s peut également servir de serveur de " +"clef basique. Notez que seule la récupération de clef est implémenté. La " +"mise à jour ou la recherche ne sont pas disponibles." + +#: base/templates/reviewers.html:124 +msgid "Given a key id, you can retrieve a key using:" +msgstr "" +"À partir d'un identifieur, vous pouvez récupérer la clef en utilisant :" + +#: base/templates/reviewers.html:133 msgid "Established sponsor guidelines" msgstr "Recommandation établies des parrainage" -#: templates/reviewers.html:115 +#: base/templates/reviewers.html:136 #, python-format msgid "" "Several Debian Developers published their personal sponsor guidelines. Those " @@ -1134,15 +1157,15 @@ msgstr "" "recommandations de la part de différentes personnes sur notre page des parrains" -#: templates/sponsor-guidelines.html:7 +#: base/templates/sponsor-guidelines.html:7 msgid "Introduction for sponsors" msgstr "Introduction pour les parrains" -#: templates/sponsor-guidelines.html:19 +#: base/templates/sponsor-guidelines.html:19 msgid "Motivation" msgstr "Motivation" -#: templates/sponsor-guidelines.html:22 +#: base/templates/sponsor-guidelines.html:22 msgid "" "Thanks for helping. There are a lot of sponsorees waiting for a Developer to " "help them with their packages, and if you want to help with the New " @@ -1153,31 +1176,31 @@ msgstr "" "avec le processus de nouveau mainteneurs, c'est un bonne étape pour " "s'inverstir." -#: templates/sponsor-guidelines.html:29 +#: base/templates/sponsor-guidelines.html:29 msgid "What to do for sponsoring" msgstr "Que faire pour parrainer" -#: templates/sponsor-menu.html:9 +#: base/templates/sponsor-menu.html:9 msgid "About Sponsoring" msgstr "À propos du parrainage" -#: templates/sponsor-menu.html:13 +#: base/templates/sponsor-menu.html:13 msgid "Overview" msgstr "Aperçu" -#: templates/sponsor-menu.html:14 +#: base/templates/sponsor-menu.html:14 msgid "Sponsoring Guidelines" msgstr "Recommandation pour le parrainage" -#: templates/sponsor-menu.html:15 +#: base/templates/sponsor-menu.html:15 msgid "Request for Sponsorship" msgstr "Demande de parrainage" -#: templates/sponsor-overview.html:7 +#: base/templates/sponsor-overview.html:7 msgid "The sponsoring process" msgstr "Le processus de parrainage" -#: templates/sponsor-overview.html:10 +#: base/templates/sponsor-overview.html:10 msgid "" "As sponsored maintainer you do not have upload permissions to the Debian " "repository. Therefore you have three possibilities to get your package into " @@ -1187,19 +1210,20 @@ msgstr "" "le dépôt Debian. En conséquence, vous avez trois possibilités pour mettre " "votre paquet dans Debian :" -#: templates/sponsor-overview.html:18 templates/sponsor-overview.html:34 +#: base/templates/sponsor-overview.html:18 +#: base/templates/sponsor-overview.html:34 msgid "Join a packaging team" msgstr "Joindre un équipe d'empaquetage" -#: templates/sponsor-overview.html:19 +#: base/templates/sponsor-overview.html:19 msgid "Ask the debian-mentors mailing list" msgstr "Demander à la liste de diffusion debian-mentors" -#: templates/sponsor-overview.html:21 +#: base/templates/sponsor-overview.html:21 msgid "Talk directly to people willing to sponsor your package" msgstr "Parler directement à des personnes souhaitant parrainer votre paquet" -#: templates/sponsor-overview.html:26 +#: base/templates/sponsor-overview.html:26 #, python-format msgid "" "A sponsor, regardless of how you found one will liste (incomplète) des équipes d'empaquetage " "dans Debian." -#: templates/sponsor-overview.html:48 +#: base/templates/sponsor-overview.html:48 msgid "" "Please note, each of those teams may have their own workflows and policies " "covering how to deal with package uploads. Contact their respective mailing " @@ -1240,11 +1264,11 @@ msgstr "" "stratégies sur comment traiter les envois de paquets. Contactez leur liste " "de diffusion respective et leurs pages d'accueil pour en apprendre plus." -#: templates/sponsor-overview.html:55 +#: base/templates/sponsor-overview.html:55 msgid "File a RFS bug against the sponsorship-requests pseudo-package" msgstr "Envoyez un bug RFS sur le pseudo-paquet sponsorship-requests" -#: templates/sponsor-overview.html:58 +#: base/templates/sponsor-overview.html:58 #, python-format msgid "" "If your package does not match the interests of any team or you are not sure " @@ -1265,13 +1289,13 @@ msgstr "" "sponsorship\"). Si vous envoyer votre paquet sur %(site_name)s, un " "modèle RFS peut être accédé sur la page de votre paquet." -#: templates/sponsor-overview.html:70 +#: base/templates/sponsor-overview.html:70 msgid "If you are unsure or in doubt, choose this alternative." msgstr "" "Si vous n'êtes pas sûr ou si vous avez un doute, choisisez cette " "alternative." -#: templates/sponsor-overview.html:76 +#: base/templates/sponsor-overview.html:76 msgid "" "Typically you will reach the greatest audience by filing a bug. Eventually " "also some non-uploading reviewer may have a look at your package. Please do " @@ -1289,11 +1313,11 @@ msgstr "" "message de suivi après quelques semaines ou essayez l'une des autres " "méthodes alternatives pour trouver un parrain." -#: templates/sponsor-overview.html:86 +#: base/templates/sponsor-overview.html:86 msgid "Finding a sponsor" msgstr "Trouver un parrain" -#: templates/sponsor-overview.html:89 +#: base/templates/sponsor-overview.html:89 msgid "" "If you want, you can contact sponsors willing to upload packages of other " "maintainers directly. Please do not send out mass emails! Instead " @@ -1314,7 +1338,7 @@ msgstr "" "développeurs de formuler leur propres profile de parrain. Merci de les lire " "attentivement et que comparer votre paquet à leurs exigences." -#: templates/sponsor-overview.html:102 +#: base/templates/sponsor-overview.html:102 msgid "" "Similarly, you can also try to get in touch with other package maintainers " "directly. This makes sense if you prepared a package which extends the " @@ -1338,11 +1362,11 @@ msgstr "" "en recherchant leurs nom sur db.debian." "org." -#: templates/sponsor-overview.html:115 +#: base/templates/sponsor-overview.html:115 msgid "Sponsor guidelines" msgstr "Recommandation pour le parrainage" -#: templates/sponsor-overview.html:118 +#: base/templates/sponsor-overview.html:118 msgid "" "To help you find a sponsor interested in your package, they can formulate " "sponsor traits for either social or technical aspects. Additionally a " @@ -1354,11 +1378,11 @@ msgstr "" "techniques. Additionnellement, un parrain n'est généralement pas intéressé " "par l'ensemble des paquets mais seulement par certaines catégories." -#: templates/sponsor-rfs.html:7 +#: base/templates/sponsor-rfs.html:7 msgid "The sponsorship process" msgstr "Le processus de parrainage" -#: templates/sponsor-rfs.html:10 +#: base/templates/sponsor-rfs.html:10 msgid "" "A RFS is a request for sponsorship. If you have a package " "to be uploaded to Debian, you should file a bug against the sponsorship-" @@ -1369,11 +1393,11 @@ msgstr "" "Debian, vous devez remplire un bug sur le pseudo-paquet sponsorship-" "requests contenant des informations sur votre paquet." -#: templates/sponsor-rfs.html:18 +#: base/templates/sponsor-rfs.html:18 msgid "Asking for Sponsorship" msgstr "Demander un parrainage" -#: templates/sponsor-rfs.html:21 +#: base/templates/sponsor-rfs.html:21 msgid "" "In general sponsor requests should be handled through the Debian Bug Tracking System. Please make sure both " @@ -1388,7 +1412,7 @@ msgstr "" "est automatiquement envoyé sur la liste de distribution debian-mentors par le système de suivi de bug." -#: templates/sponsor-rfs.html:32 +#: base/templates/sponsor-rfs.html:32 msgid "" "Once a source package has been prepared and made available (for example by " "uploading it to this site) file a new bug report against the sponsorship-requests en utilisant le modèle ci-dessous." -#: templates/sponsor-rfs.html:42 +#: base/templates/sponsor-rfs.html:42 msgid "" "You might not receive a reply to your request if you do not subscribe to the " "debian-mentors mailing list or to your sponsorship-requests bug. You can reportbug." -#: templates/sponsor-rfs.html:97 +#: base/templates/sponsor-rfs.html:97 msgid "" "Please indicate in the subject if the package fixes RC bugs, is a " "QA or NMU upload or a new package or a package you adopted:" @@ -1454,13 +1478,13 @@ msgstr "" "l'envoi est QA ou NMU ou si c'est un nouveau paquet ou un " "paquet que vous adoptez :" -#: templates/sponsor-rfs.html:119 +#: base/templates/sponsor-rfs.html:119 msgid "The meaning of this shortcuts is denoted below, in case you are unsure:" msgstr "" "Si vous n'êtes pas sûr, l'explication de ces raccourcis est explicité en " "dessous :" -#: templates/sponsor-rfs.html:127 +#: base/templates/sponsor-rfs.html:127 msgid "" "ITA stands for Intend to adopt. These are packages which " "were orphaned in the past and you intend to adopt." @@ -1468,7 +1492,7 @@ msgstr "" "ITA veut dire Intend to adopt. Ceux-ci sont des paquets " "qui ont été abandonnés dans le passé et que vous prévoyez d'adopter." -#: templates/sponsor-rfs.html:134 +#: base/templates/sponsor-rfs.html:134 msgid "" "ITP stands for Intend to package. These are packages which " "not exist in Debian yet. Such packages need to go through NEW. That " @@ -1485,7 +1509,7 @@ msgstr "" "déplacement de paquets entre zones, ainsi que les paquets sources qui " "construisent des nouveau paquets binaires." -#: templates/sponsor-rfs.html:147 +#: base/templates/sponsor-rfs.html:147 msgid "" "You upload is a QA upload. Please refer to the respective section " "in the référence du développeur." -#: templates/sponsor-rfs.html:156 +#: base/templates/sponsor-rfs.html:156 msgid "" "This is short for \"Non-Maintainer Upload\"; a version of a package that is " "not uploaded by the official Maintainer of a package, but rather by you. For " @@ -1511,7 +1535,7 @@ msgstr "" "org/doc/manuals/developers-reference/pkgs.html#nmu\">référence du " "développeur de nouveau." -#: templates/sponsor-rfs.html:166 +#: base/templates/sponsor-rfs.html:166 msgid "" "This is short for \"Release-Critical\". That is a class of bugs which are " "particularly important. Use this indication if your request fixes such " @@ -1521,7 +1545,7 @@ msgstr "" "est particulièrement importante. Utilisez cette indication si votre demande " "corrige ces bugs RC." -#: templates/sponsor-rfs.html:175 +#: base/templates/sponsor-rfs.html:175 msgid "" "Please keep track of the bug and respond to comments. If the bug was tagged " "moreinfo or wontfix and you think you have addressed the issues, please " @@ -1531,7 +1555,7 @@ msgstr "" "bug a été tagué moreinfo ou wontfix et que vous pensé avoir adressé le " "problème, merci de supprimer le tag respectif." -#: templates/sponsor-rfs.html:183 +#: base/templates/sponsor-rfs.html:183 msgid "" "If you changed the package to address concerns, please send a follow-up to " "the sponsoring request (To: nnn@bugs.debian.org) that includes the " @@ -1543,7 +1567,7 @@ msgstr "" "em>) qui inclut l'URL vers le paquet source et la dernière entrée du " "changelog, de manière similaire à la demande initiale." -#: templates/sponsor-rfs.html:192 +#: base/templates/sponsor-rfs.html:192 msgid "" "If there are issues with the upload after the bug was closed, for example " "when the package was rejected by the archive software, you can reopen the " @@ -1555,11 +1579,11 @@ msgstr "" "ré-ouvrir le bug (de nouveau, merci d'inclure les références vers le paquet " "source ou de demander de l'aide)." -#: templates/sponsor-rfs.html:200 +#: base/templates/sponsor-rfs.html:200 msgid "Reviewing Packages" msgstr "Faire la revue de paquets" -#: templates/sponsor-rfs.html:203 +#: base/templates/sponsor-rfs.html:203 #, python-format msgid "" "Anybody feeling competent enough is invited to review sponsoring requests. " @@ -1571,7 +1595,7 @@ msgstr "" "pour le faire. Nous avons rassemblé des conseils pour les revue de paquets " "sur une page dédié." -#: templates/sponsor-rfs.html:211 +#: base/templates/sponsor-rfs.html:211 msgid "" "Please send any comments to nnn@bugs.debian.org (please do not send " "carbon copies to reviewers or bug submitter - assume they are subscribed to " @@ -1585,7 +1609,7 @@ msgstr "" "en copies). Vous pouvez utiliser les tags suivants pour indiquer la " "progression :" -#: templates/sponsor-rfs.html:222 +#: base/templates/sponsor-rfs.html:222 msgid "" "open questions or changes are required before an upload. The package needs " "work before it can be uploaded." @@ -1593,7 +1617,7 @@ msgstr "" "des questions ouvertes ou des changements sont requis avant envoi. Le paquet " "à besoin d'être retravailler avant qu'il puisse être envoyer." -#: templates/sponsor-rfs.html:229 +#: base/templates/sponsor-rfs.html:229 msgid "" "somebody did a brief review the package and it looks sane. It can still have " "(smaller) issues that need to be fixed before an upload." @@ -1602,17 +1626,17 @@ msgstr "" "possible qu'il reste quelques (petit) problèmes qui doivent être corriger " "avant l'envoi." -#: templates/sponsor-rfs.html:236 +#: base/templates/sponsor-rfs.html:236 msgid "somebody is willing to look after the package until it is uploaded." msgstr "" "quelqu'un est volontaire pour prendre soit de votre paquet jusqu'à ce qu'il " "soit envoyé." -#: templates/sponsor-rfs.html:242 +#: base/templates/sponsor-rfs.html:242 msgid "large problems or cannot not be uploaded at all." msgstr "gros problèmes ou ne peux pas être envoyé du tout." -#: templates/sponsor-rfs.html:249 +#: base/templates/sponsor-rfs.html:249 msgid "" "If you intend to take care of the sponsoring request until the package is " "ready for upload, please consider setting yourself as the owner of the bug " @@ -1622,11 +1646,11 @@ msgstr "" "jusqu'à ce que le paquet soit prêt pour l'envoi, merci de considérer le fait " "de vous mettre propriétaire du bug et de tagué le bug pending :" -#: templates/sponsor-rfs.html:259 +#: base/templates/sponsor-rfs.html:259 msgid "Uploading Packages" msgstr "Envoyer des paquets" -#: templates/sponsor-rfs.html:262 +#: base/templates/sponsor-rfs.html:262 msgid "" "After you uploaded a package, please close the bug report by sending a mail " "to nnn-done@bugs.debian.org. Do not close RFS bugs in debian/" @@ -1638,11 +1662,11 @@ msgstr "" "RFS dans debian/changelog. C'est au parrain de résoudre ce problème, pas au " "mainteneur du paquet ou à quiconque associé avec le paquet." -#: templates/sponsor-rfs.html:270 +#: base/templates/sponsor-rfs.html:270 msgid "Notes" msgstr "Notes" -#: templates/sponsor-rfs.html:273 +#: base/templates/sponsor-rfs.html:273 msgid "" "People are advised to close inactive requests after a longer term of no " "activity (we consider two weeks for requests tagged wontfix, six weeks for " diff --git a/debexpo/base/templates/reviewers.html b/debexpo/base/templates/reviewers.html index 75c97375ef563bb779290dd292e2df8cbf786986..d06842cf511f5dffaad95df01a743ded4a96741b 100644 --- a/debexpo/base/templates/reviewers.html +++ b/debexpo/base/templates/reviewers.html @@ -109,6 +109,31 @@ +

+ {% blocktrans with name=settings.SITE_NAME trimmed %} + You might also want to retrieve the maintainer GPG key to verify that all + subsequent uploads are signed using the same key. While the key should be + publicly available on servers such as keys.openpgp.org or + keyserver.ubuntu.com, {{ name }} can also act as a basic keyserver. + Note that only key retrieval is implemented. Update or search are not + available. + {% endblocktrans %} +

+ +

+ {% blocktrans trimmed %} + Given a key id, you can retrieve a key using: + {% endblocktrans %} +

+ +
+{% if request.scheme == 'https' %}
+gpg --keyserver hkps://{{ request.get_host }} --recv-keys 0x123456789
+{% else %}
+gpg --keyserver hkp://{{ request.get_host }} --recv-keys 0x123456789
+{% endif %}
+
+

{% trans 'Established sponsor guidelines' %}

diff --git a/debexpo/keyring/views.py b/debexpo/keyring/views.py new file mode 100644 index 0000000000000000000000000000000000000000..a7fa39ab8fc9874702530169ac24f8c54be0ad15 --- /dev/null +++ b/debexpo/keyring/views.py @@ -0,0 +1,72 @@ +# views.py - keyring view classes +# +# This file is part of debexpo +# https://salsa.debian.org/mentors.debian.net-team/debexpo +# +# Copyright © 2021 Baptiste Beauplat +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, +# copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following +# conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. + +from django.views.generic import View +from django.views.generic.detail import BaseDetailView +from django.http import HttpResponseServerError, HttpResponse, \ + HttpResponseBadRequest +from django.shortcuts import get_object_or_404 + +from debexpo.keyring.models import Key + + +class HKPSearchView(BaseDetailView): + model = Key + + def get(self, request, *args, **kwargs): + if 'search' not in self.request.GET: + return HttpResponseBadRequest("Missing 'search' query string") + + try: + return super().get(request, *args, **kwargs) + except Key.MultipleObjectsReturned: + return HttpResponseServerError('Multiple matches found', status=500) + + def get_object(self, queryset=None): + key_id = self.request.GET['search'].replace('0x', '') + + try: + return Key.objects.get(fingerprint__endswith=key_id) + except Key.DoesNotExist: + pass + + return get_object_or_404(Key, subkey__fingerprint__endswith=key_id) + + def render_to_response(self, context, **response_kwargs): + return HttpResponse(self.object.key + '\n') + + +class HKPView(View): + def get(self, request, *args, **kwargs): + if 'op' not in self.request.GET: + return HttpResponseBadRequest("Missing 'op' query string") + + if self.request.GET['op'] == 'get': + return HKPSearchView.as_view()(request) + else: + return HttpResponseServerError('Not Implemented', status=501) diff --git a/debexpo/urls.py b/debexpo/urls.py index 5c39b24c2460983af5e9b1d6792d60cd60c7609a..5c9d075df05c172dbef018f8a314eb645f26eba6 100644 --- a/debexpo/urls.py +++ b/debexpo/urls.py @@ -41,6 +41,7 @@ from debexpo.base.views import index, contact, intro_reviewers, \ intro_maintainers, qa, sponsor_overview, sponsor_guidelines, sponsor_rfs from debexpo.accounts.views import register, profile, EmailChangeConfirmView from debexpo.accounts.forms import PasswordResetForm +from debexpo.keyring.views import HKPView from debexpo.packages.views import package, packages, packages_my, \ PackagesFeed, sponsor_package, delete_package, delete_upload, \ PackageViewSet, PackageUploadViewSet @@ -167,6 +168,9 @@ urlpatterns = [ url(r'^accounts/$', lambda request: HttpResponsePermanentRedirect( reverse('profile')), name='accounts'), + # HPK interface + url(r'^pks/lookup$', HKPView.as_view(), name='hkp'), + # Repository url(r'^debian/(?P.*)$', serve, { 'document_root': settings.REPOSITORY, diff --git a/tests/__init__.py b/tests/__init__.py index 551161d36c0f75c7256a810bfc7823441b1296c2..5c7dfeaa8b7079d0702089ca603bca1958263204 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -129,6 +129,8 @@ Xcgnuh6Rlywt6uiaFIGYnGefYPGXRAA= self._add_gpg_key(user, self._GPG_KEY, self._GPG_FINGERPRINT, self._GPG_TYPE, self._GPG_SIZE) + return user + def _remove_example_user(self): """Remove the example user. diff --git a/tests/functional/keyring/__init__.py b/tests/functional/keyring/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/functional/keyring/test_hkp.py b/tests/functional/keyring/test_hkp.py new file mode 100644 index 0000000000000000000000000000000000000000..8a60e3f7c4d4ec4d14e7bb1c41c1dce0d6569555 --- /dev/null +++ b/tests/functional/keyring/test_hkp.py @@ -0,0 +1,59 @@ +# test_hkp.py - Test HKP implementation +# +# This file is part of debexpo +# https://salsa.debian.org/mentors.debian.net-team/debexpo +# +# Copyright © 2021 Baptiste Beauplat +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, +# copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following +# conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. + +from django.test import LiveServerTestCase + +from debexpo.tools.gnupg import GnuPG + +from tests import TransactionTestController + + +class TestHKP(TransactionTestController, LiveServerTestCase): + def setUp(self): + self._setup_example_user(gpg=True) + + def test_gpg_recv_keys(self): + gpg = GnuPG() + + # On existing key + (output, status) = gpg._run(args=[ + '--keyserver', + 'hkp://' + self.live_server_url.split('/')[2], + '--recv-keys', + '0x' + self._GPG_FINGERPRINT[-16:]]) + self.assertIn('IMPORT_OK 1', output) + self.assertEquals(0, status) + + # On non-existing key + (output, status) = gpg._run(args=[ + '--keyserver', + 'hkp://' + self.live_server_url.split('/')[2], + '--recv-keys', + '0xCA11AB1E']) + self.assertIn('FAILURE recv-keys', output) + self.assertEquals(2, status) diff --git a/tests/unit/keyring/__init__.py b/tests/unit/keyring/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/unit/keyring/test_hkp.py b/tests/unit/keyring/test_hkp.py new file mode 100644 index 0000000000000000000000000000000000000000..dac1e109d925ccf849b23ddf29c66d5b08c20dd6 --- /dev/null +++ b/tests/unit/keyring/test_hkp.py @@ -0,0 +1,106 @@ +# test_hkp.py - Test HKP implementation +# +# This file is part of debexpo +# https://salsa.debian.org/mentors.debian.net-team/debexpo +# +# Copyright © 2021 Baptiste Beauplat +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, +# copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following +# conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. + +from django.urls import reverse + +from debexpo.keyring.models import SubKey + +from tests import TestController + +_GPGKEY = """-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEW9b91RYJKwYBBAHaRw8BAQdAHtUIQWAsmPilu0JDMnLbpPQfT1i3z2IVMoDH +rhlYkO+0JWRlYmV4cG8gdGVzdGluZyA8ZGViZXhwb0BleGFtcGxlLm9yZz6IkAQT +FggAOBYhBOF57qTrR+YF2YZjLihiGOfHT5wRBQJb1v3VAhsDBQsJCAcCBhUKCQgL +AgQWAgMBAh4BAheAAAoJEChiGOfHT5wRdQIBAJ8rciR0e1PaA+LhoTWHaPSgCwvc +lNFyRk71s75+hRkhAPwPnl6QqGsOa0DyJB5saVcqPCqYFbF1usUWIQnPPRsVC7g4 +BFvW/dUSCisGAQQBl1UBBQEBB0DzrYDCp+OaNFinqKkDWcqftqq/BAFS9lq4de5g +RNytNAMBCAeIeAQYFggAIBYhBOF57qTrR+YF2YZjLihiGOfHT5wRBQJb1v3VAhsM +AAoJEChiGOfHT5wRNK8A/115pc8+OwKDy1fGXGX3l0uq1wdfiJreG/9YZddx/JTI +AQD4ZLpyUg+z6kJ+8YAmHFiOD9Ixv3QVvrfpBwnBVtJZBg== +=N+9W +-----END PGP PUBLIC KEY BLOCK-----""" + + +class TestHKP(TestController): + def setUp(self): + self._setup_example_user(gpg=True) + another = self._setup_example_user(email='another@example.org') + self._add_gpg_key(another, _GPGKEY, + 'FINGERPRINT', '22', 256) + + def test_op(self): + # Missing op parameter: 400 + response = self.client.get(reverse('hkp')) + self.assertEquals(response.status_code, 400) + self.assertIn("Missing 'op'", str(response.content)) + + # Unknown op: 501 + response = self.client.get(reverse('hkp'), + {'op': 'not-implemented'}) + self.assertEquals(response.status_code, 501) + self.assertIn("Not Implemented", str(response.content)) + + def test_get(self): + # Missing search parameter: 400 + response = self.client.get(reverse('hkp'), + {'op': 'get'}) + self.assertEquals(response.status_code, 400) + self.assertIn("Missing 'search'", str(response.content)) + + # No match: 404 + response = self.client.get(reverse('hkp'), + {'op': 'get', + 'search': 'not-found'}) + self.assertEquals(response.status_code, 404) + self.assertIn('Not Found', str(response.content)) + + # Multiple matches: 500 + response = self.client.get(reverse('hkp'), + {'op': 'get', + 'search': ''}) + self.assertEquals(response.status_code, 500) + self.assertIn("Multiple matches found", str(response.content)) + + # Matches long id: 200 + response = self.client.get(reverse('hkp'), { + 'op': 'get', + 'search': '0x' + self._GPG_FINGERPRINT[-16:] + }) + self.assertEquals(response.status_code, 200) + self.assertIn(self._GPG_KEY, response.content.decode()) + + # Matches full fingerprint of a subkey: 200 + fingerprint = SubKey.objects.filter( + key__fingerprint=self._GPG_FINGERPRINT).first().fingerprint + response = self.client.get(reverse('hkp'), { + 'op': 'get', + 'search': fingerprint + }) + self.assertIn(self._GPG_KEY, response.content.decode()) + self.assertEquals(response.status_code, 200)