1
0
Fork 0
mirror of https://github.com/YunoHost/apps.git synced 2024-09-03 20:06:07 +02:00

appstore: require to be level 1 to login ...

This commit is contained in:
Alexandre Aubin 2023-11-19 19:45:38 +01:00
parent 02b16214a8
commit c5a1d90235
4 changed files with 83 additions and 47 deletions

View file

@ -147,7 +147,7 @@ def star_app(app_id, action):
if app_id not in get_catalog()["apps"] and app_id not in get_wishlist(): if app_id not in get_catalog()["apps"] and app_id not in get_wishlist():
return _("App %(app_id) not found", app_id=app_id), 404 return _("App %(app_id) not found", app_id=app_id), 404
if not session.get("user", {}): if not session.get("user", {}):
return _("You must be logged in to be able to star an app"), 401 return _("You must be logged in to be able to star an app") + "<br/><br/>" + _("Note that, due to various abuses, we restricted login on the app store to 'trust level 1' users.<br/><br/>'Trust level 1' is obtained after interacting a minimum with the forum, and more specifically: entering at least 5 topics, reading at least 30 posts, and spending at least 10 minutes reading posts."), 401
app_star_folder = os.path.join(".stars", app_id) app_star_folder = os.path.join(".stars", app_id)
app_star_for_this_user = os.path.join( app_star_for_this_user = os.path.join(
@ -190,7 +190,7 @@ def add_to_wishlist():
if request.method == "POST": if request.method == "POST":
user = session.get("user", {}) user = session.get("user", {})
if not user: if not user:
errormsg = _("You must be logged in to submit an app to the wishlist") errormsg = _("You must be logged in to submit an app to the wishlist") + "<br/><br/>" + _("Note that, due to various abuses, we restricted login on the app store to 'trust level 1' users.<br/><br/>'Trust level 1' is obtained after interacting a minimum with the forum, and more specifically: entering at least 5 topics, reading at least 30 posts, and spending at least 10 minutes reading posts.")
return render_template( return render_template(
"wishlist_add.html", "wishlist_add.html",
locale=get_locale(), locale=get_locale(),
@ -414,6 +414,9 @@ def sso_login_callback():
uri_to_redirect_to_after_login = session.get("uri_to_redirect_to_after_login") uri_to_redirect_to_after_login = session.get("uri_to_redirect_to_after_login")
if "trust_level_100" not in user_data['groups'][0].split(','):
return _("Unfortunately, login was denied.") + "<br/><br/>" + _("Note that, due to various abuses, we restricted login on the app store to 'trust level 1' users.<br/><br/>'Trust level 1' is obtained after interacting a minimum with the forum, and more specifically: entering at least 5 topics, reading at least 30 posts, and spending at least 10 minutes reading posts."), 403
session.clear() session.clear()
session["user"] = { session["user"] = {
"id": user_data["external_id"][0], "id": user_data["external_id"][0],

View file

@ -27,6 +27,8 @@
<p class="mt-2 text-sm text-orange-700 font-bold"> <p class="mt-2 text-sm text-orange-700 font-bold">
<i class="fa fa-exclamation-triangle fa-fw" aria-hidden="true"></i> <i class="fa fa-exclamation-triangle fa-fw" aria-hidden="true"></i>
{{ _("You must first login to be allowed to submit an app to the wishlist") }} {{ _("You must first login to be allowed to submit an app to the wishlist") }}
<br/><br/>
{{ _("Note that, due to various abuses, we restricted login on the app store to 'trust level 1' users.<br/><br/>'Trust level 1' is obtained after interacting a minimum with the forum, and more specifically: entering at least 5 topics, reading at least 30 posts, and spending at least 10 minutes reading posts.") }}
</p> </p>
</div> </div>
{% endif %} {% endif %}

View file

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2023-09-19 17:04+0200\n" "POT-Creation-Date: 2023-11-19 19:39+0100\n"
"PO-Revision-Date: 2023-09-05 19:50+0200\n" "PO-Revision-Date: 2023-09-05 19:50+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: fr\n" "Language: fr\n"
@ -18,59 +18,73 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n" "Generated-By: Babel 2.12.1\n"
#: app.py:140 #: app.py:148
msgid "App %(app_id) not found" msgid "App %(app_id) not found"
msgstr "L'app %(app_id) n'a pas été trouvée" msgstr "L'app %(app_id) n'a pas été trouvée"
#: app.py:142 #: app.py:150
msgid "You must be logged in to be able to star an app" msgid "You must be logged in to be able to star an app"
msgstr "Vous devez être connecté·e pour mettre une app en favoris" msgstr "Vous devez être connecté·e pour mettre une app en favoris"
#: app.py:185 #: app.py:150 app.py:193 app.py:418 templates/wishlist_add.html:31
msgid ""
"Note that, due to various abuses, we restricted login on the app store to"
" 'trust level 1' users.<br/><br/>'Trust level 1' is obtained after "
"interacting a minimum with the forum, and more specifically: entering at "
"least 5 topics, reading at least 30 posts, and spending at least 10 "
"minutes reading posts."
msgstr ""
"Notez que, suite à divers abus, la connexion nécessite maintenant d'être"
" 'trust level 1' sur le forum.<br/><br/>Le 'trust level 1' est obtenu après"
" avoir intéragit un minimum avec le forum, et plus précisémment: ouvrir au"
" moins 5 fils de discussion, lire au moins 30 messages, et passer au moins"
" 10 minutes à lire des messages."
#: app.py:193
msgid "You must be logged in to submit an app to the wishlist" msgid "You must be logged in to submit an app to the wishlist"
msgstr "Vous devez être connecté·e pour proposer une app pour la liste de souhaits" msgstr "Vous devez être connecté·e pour proposer une app pour la liste de souhaits"
#: app.py:200 #: app.py:206
msgid "Invalid CSRF token, please refresh the form and try again" msgid "Invalid CSRF token, please refresh the form and try again"
msgstr "Jeton CSRF invalide, prière de rafraîchir la page et retenter" msgstr "Jeton CSRF invalide, prière de rafraîchir la page et retenter"
#: app.py:216 #: app.py:222
msgid "App name should be at least 3 characters" msgid "App name should be at least 3 characters"
msgstr "Le nom d'app devrait contenir au moins 3 caractères" msgstr "Le nom d'app devrait contenir au moins 3 caractères"
#: app.py:217 #: app.py:223
msgid "App name should be less than 30 characters" msgid "App name should be less than 30 characters"
msgstr "Le nom d'app devrait contenir moins de 30 caractères" msgstr "Le nom d'app devrait contenir moins de 30 caractères"
#: app.py:220 #: app.py:226
msgid "App description should be at least 5 characters" msgid "App description should be at least 5 characters"
msgstr "La description de l'app devrait contenir au moins 5 caractères" msgstr "La description de l'app devrait contenir au moins 5 caractères"
#: app.py:224 #: app.py:230
msgid "App description should be less than 100 characters" msgid "App description should be less than 100 characters"
msgstr "La description de l'app devrait contenir moins de 100 caractères" msgstr "La description de l'app devrait contenir moins de 100 caractères"
#: app.py:228 #: app.py:234
msgid "Upstream code repo URL should be at least 10 characters" msgid "Upstream code repo URL should be at least 10 characters"
msgstr "L'URL du dépôt de code devrait contenir au moins 10 caractères" msgstr "L'URL du dépôt de code devrait contenir au moins 10 caractères"
#: app.py:232 #: app.py:238
msgid "Upstream code repo URL should be less than 150 characters" msgid "Upstream code repo URL should be less than 150 characters"
msgstr "L'URL du dépôt de code devrait contenir moins de 150 caractères" msgstr "L'URL du dépôt de code devrait contenir moins de 150 caractères"
#: app.py:234 #: app.py:240
msgid "Website URL should be less than 150 characters" msgid "Website URL should be less than 150 characters"
msgstr "L'URL du site web devrait contenir moins de 150 caractères" msgstr "L'URL du site web devrait contenir moins de 150 caractères"
#: app.py:237 #: app.py:243
msgid "App name contains special characters" msgid "App name contains special characters"
msgstr "Le nom de l'app contiens des caractères spéciaux" msgstr "Le nom de l'app contiens des caractères spéciaux"
#: app.py:270 #: app.py:276
msgid "An entry with the name %(slug) already exists in the wishlist" msgid "An entry with the name %(slug) already exists in the wishlist"
msgstr "Une entrée nommée $(slug) existe déjà dans la liste de souhaits" msgstr "Une entrée nommée $(slug) existe déjà dans la liste de souhaits"
#: app.py:295 #: app.py:299
msgid "" msgid ""
"Failed to create the pull request to add the app to the wishlist ... " "Failed to create the pull request to add the app to the wishlist ... "
"please report the issue to the yunohost team" "please report the issue to the yunohost team"
@ -78,15 +92,19 @@ msgstr ""
"Échec de la création de la demande d'intégration de l'app dans la liste " "Échec de la création de la demande d'intégration de l'app dans la liste "
"de souhaits ... merci de rapport le problème à l'équipe YunoHost" "de souhaits ... merci de rapport le problème à l'équipe YunoHost"
#: app.py:340 #: app.py:348
#, python-format
msgid "" msgid ""
"Your proposed app has succesfully been submitted. It must now be " "Your proposed app has succesfully been submitted. It must now be "
"validated by the YunoHost team. You can track progress here: %(url)s" "validated by the YunoHost team. You can track progress here: <a "
"href='%(url)s'>%(url)s</a>"
msgstr "" msgstr ""
"Un demande d'intégration à la liste de souhaits a bien été créée pour " "Un demande d'intégration à la liste de souhaits a bien été créée pour "
"cette app. Elle doit maintenant être validée par l'équipe YunoHost. Vous " "cette app. Elle doit maintenant être validée par l'équipe YunoHost. Vous "
"pouvez suivre cette demande ici: %(url)s" "pouvez suivre cette demande ici: <a href='%(url)s'>%(url)s</a>"
#: app.py:418
msgid "Unfortunately, login was denied."
msgstr "Malheureusement, la connexion a été refusée."
#: templates/app.html:10 templates/catalog.html:23 #: templates/app.html:10 templates/catalog.html:23
#, python-format #, python-format
@ -116,7 +134,9 @@ msgstr ""
msgid "" msgid ""
"This app has been good quality according to our automatic tests over at " "This app has been good quality according to our automatic tests over at "
"least one year." "least one year."
msgstr "Cette app est de bonne qualité d'après nos tests automatisés depuis au moins un an." msgstr ""
"Cette app est de bonne qualité d'après nos tests automatisés depuis au "
"moins un an."
#: templates/app.html:81 #: templates/app.html:81
msgid "Try the demo" msgid "Try the demo"
@ -204,34 +224,45 @@ msgstr "Dépôt de code du paquet YunoHost"
msgid "YunoHost app store" msgid "YunoHost app store"
msgstr "Store d'apps de YunoHost" msgstr "Store d'apps de YunoHost"
#: templates/base.html:56 templates/base.html:149 templates/index.html:3 #: templates/base.html:18 templates/base.html:113 templates/index.html:3
msgid "Home" msgid "Home"
msgstr "Accueil" msgstr "Accueil"
#: templates/base.html:65 templates/base.html:158 #: templates/base.html:27 templates/base.html:122
msgid "Catalog" msgid "Catalog"
msgstr "Catalogue" msgstr "Catalogue"
#: templates/base.html:71 templates/base.html:167 #: templates/base.html:33 templates/base.html:131
msgid "Wishlist" msgid "Wishlist"
msgstr "Liste de souhaits" msgstr "Liste de souhaits"
#: templates/base.html:84 templates/base.html:177 #: templates/base.html:46 templates/base.html:141
msgid "YunoHost documentation" msgid "YunoHost documentation"
msgstr "Documentation YunoHost" msgstr "Documentation YunoHost"
#: templates/base.html:92 templates/base.html:187 #: templates/base.html:54 templates/base.html:151
msgid "Login using YunoHost's forum" msgid "Login using YunoHost's forum"
msgstr "Se connecter via le forum YunoHost" msgstr "Se connecter via le forum YunoHost"
#: templates/base.html:122 templates/base.html:213 #: templates/base.html:86 templates/base.html:179
msgid "Logout" msgid "Logout"
msgstr "Se déconnecter" msgstr "Se déconnecter"
#: templates/base.html:135 #: templates/base.html:99
msgid "Toggle menu" msgid "Toggle menu"
msgstr "Activer le menu" msgstr "Activer le menu"
#: templates/base.html:197
msgid ""
"Made with <i class='text-red-500 fa fa-heart-o' aria-label='love'></i> "
"using <a class='text-blue-800' "
"href='https://flask.palletsprojects.com'>Flask</a> and <a class='text-"
"blue-800' href='https://tailwindcss.com/'>TailwindCSS</a> - <a class"
"='text-blue-800' "
"href='https://github.com/YunoHost/apps/tree/master/store'><i class='fa "
"fa-code fa-fw' aria-hidden='true'></i> Source</a>"
msgstr ""
#: templates/catalog.html:75 templates/catalog.html:80 #: templates/catalog.html:75 templates/catalog.html:80
msgid "Application Catalog" msgid "Application Catalog"
msgstr "Catalogue d'applications" msgstr "Catalogue d'applications"
@ -253,17 +284,17 @@ msgid "Sort by"
msgstr "Trier par" msgstr "Trier par"
#: templates/catalog.html:123 templates/wishlist.html:45 #: templates/catalog.html:123 templates/wishlist.html:45
msgid "Alphabetical" #: templates/wishlist.html:78
msgstr "Alphabétique" msgid "Popularity"
msgstr "Popularité"
#: templates/catalog.html:124 #: templates/catalog.html:124
msgid "Newest" msgid "Newest"
msgstr "Nouveauté" msgstr "Nouveauté"
#: templates/catalog.html:125 templates/wishlist.html:46 #: templates/catalog.html:125 templates/wishlist.html:46
#: templates/wishlist.html:78 msgid "Alphabetical"
msgid "Popularity" msgstr "Alphabétique"
msgstr "Popularité"
#: templates/catalog.html:128 templates/wishlist.html:49 #: templates/catalog.html:128 templates/wishlist.html:49
msgid "Requires to be logged-in" msgid "Requires to be logged-in"
@ -274,7 +305,7 @@ msgstr "Nécessite d'être connecté·e"
msgid "Show only apps you starred" msgid "Show only apps you starred"
msgstr "Montrer uniquement mes favoris" msgstr "Montrer uniquement mes favoris"
#: templates/catalog.html:155 templates/wishlist.html:152 #: templates/catalog.html:155 templates/wishlist.html:154
msgid "No results found." msgid "No results found."
msgstr "Aucun résultat trouvé." msgstr "Aucun résultat trouvé."
@ -326,7 +357,7 @@ msgstr ""
msgid "Suggest an app" msgid "Suggest an app"
msgstr "Suggérer une app" msgstr "Suggérer une app"
#: templates/wishlist.html:71 templates/wishlist_add.html:57 #: templates/wishlist.html:71 templates/wishlist_add.html:59
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
@ -338,11 +369,11 @@ msgstr "Description"
msgid "Official website" msgid "Official website"
msgstr "Site officiel" msgstr "Site officiel"
#: templates/wishlist.html:114 templates/wishlist.html:115 #: templates/wishlist.html:115 templates/wishlist.html:116
msgid "Code repository" msgid "Code repository"
msgstr "Dépôt de code officiel" msgstr "Dépôt de code officiel"
#: templates/wishlist.html:127 templates/wishlist.html:128 #: templates/wishlist.html:129 templates/wishlist.html:130
msgid "Star this app" msgid "Star this app"
msgstr "Étoiler cette app" msgstr "Étoiler cette app"
@ -354,11 +385,11 @@ msgstr "Suggérer une application à ajouter dans le catalogue de YunoHost"
msgid "You must first login to be allowed to submit an app to the wishlist" msgid "You must first login to be allowed to submit an app to the wishlist"
msgstr "Vous devez être connecté·e pour proposer une app pour la liste de souhaits" msgstr "Vous devez être connecté·e pour proposer une app pour la liste de souhaits"
#: templates/wishlist_add.html:37 #: templates/wishlist_add.html:39
msgid "Please check the license of the app your are proposing" msgid "Please check the license of the app your are proposing"
msgstr "Merci de vérifier la licence de l'app que vous proposez" msgstr "Merci de vérifier la licence de l'app que vous proposez"
#: templates/wishlist_add.html:40 #: templates/wishlist_add.html:42
msgid "" msgid ""
"The YunoHost project will only package free/open-source software (with " "The YunoHost project will only package free/open-source software (with "
"possible case-by-case exceptions for apps which are not-totally-free)" "possible case-by-case exceptions for apps which are not-totally-free)"
@ -367,15 +398,15 @@ msgstr ""
"(avec quelques possibles exceptions au cas-par-cas pour des apps qui ne " "(avec quelques possibles exceptions au cas-par-cas pour des apps qui ne "
"sont pas entièrement libres)" "sont pas entièrement libres)"
#: templates/wishlist_add.html:60 #: templates/wishlist_add.html:62
msgid "App's description" msgid "App's description"
msgstr "Description de l'app" msgstr "Description de l'app"
#: templates/wishlist_add.html:62 #: templates/wishlist_add.html:64
msgid "Please be concise and focus on what the app does." msgid "Please be concise and focus on what the app does."
msgstr "Prière de rester concis et de se concentrer sur ce que l'app fait." msgstr "Prière de rester concis et de se concentrer sur ce que l'app fait."
#: templates/wishlist_add.html:62 #: templates/wishlist_add.html:64
msgid "" msgid ""
"No need to repeat '[App] is ...'. No need to state that it is free/open-" "No need to repeat '[App] is ...'. No need to state that it is free/open-"
"source or self-hosted (otherwise it wouldn't be packaged for YunoHost). " "source or self-hosted (otherwise it wouldn't be packaged for YunoHost). "
@ -387,15 +418,15 @@ msgstr ""
"Évitez les formulations marketing type 'le meilleur', ou les propriétés " "Évitez les formulations marketing type 'le meilleur', ou les propriétés "
"vagues telles que 'facile', 'simple', 'léger'." "vagues telles que 'facile', 'simple', 'léger'."
#: templates/wishlist_add.html:64 #: templates/wishlist_add.html:66
msgid "Project code repository" msgid "Project code repository"
msgstr "Dépôt de code officiel" msgstr "Dépôt de code officiel"
#: templates/wishlist_add.html:67 #: templates/wishlist_add.html:69
msgid "Project website" msgid "Project website"
msgstr "Site officiel" msgstr "Site officiel"
#: templates/wishlist_add.html:69 #: templates/wishlist_add.html:71
msgid "" msgid ""
"Please *do not* just copy-paste the code repository URL. If the project " "Please *do not* just copy-paste the code repository URL. If the project "
"has no proper website, then leave the field empty." "has no proper website, then leave the field empty."
@ -403,7 +434,7 @@ msgstr ""
"Prière de *ne pas* juste copier-coller l'URL du dépôt de code. Si le " "Prière de *ne pas* juste copier-coller l'URL du dépôt de code. Si le "
"projet n'a pas de vrai site web, laissez le champ vide." "projet n'a pas de vrai site web, laissez le champ vide."
#: templates/wishlist_add.html:76 #: templates/wishlist_add.html:78
msgid "Submit" msgid "Submit"
msgstr "Envoyer" msgstr "Envoyer"