diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..599610780 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,24 @@ +# Akkoma Code of Conduct + +The Akkoma project aims to be **enjoyable** for anyone to participate in, regardless of their identity or level of expertise. To achieve this, the community must create an environment which is **safe** and **equitable**; the following guidelines have been created with these goals in mind. + +1. **Treat individuals with respect.** Differing experiences and viewpoints deserve to be respected, and bigotry and harassment are not tolerated under any circumstances. + - Individuals should at all times be treated as equals, regardless of their age, gender, sexuality, race, ethnicity, _or any other characteristic_, intrinsic or otherwise. + - Behaviour that is harmful in nature should be addressed and corrected *regardless of intent*. + - Respect personal boundaries and ask for clarification whenever they are unclear. + - (Obviously, hate does not count as merely a "differing viewpoint", because it is harmful in nature.) + +2. **Be understanding of differences in communication.** Not everyone is aware of unspoken social cues, and speech that is not intended to be offensive should not be treated as such simply due to an atypical manner of communication. + - Somebody who speaks bluntly is not necessarily rude, and somebody who swears a lot is not necessarily volatile. + - Try to confirm your interpretation of their intent rather than assuming bad faith. + - Someone may not communicate as, or come across as a picture of "professionalism", but this should not be seen as a reason to dismiss them. This is a **casual** space, and communication styles can reflect that. + +3. **"Uncomfortable" does not mean "unsafe".** In an ideal world, the community would be safe, equitable, enjoyable, *and* comfortable for all members at all times. Unfortunately, this is not always possible in reality. + - Safety and equity will be prioritized over comfort whenever it is necessary to do so. + - Weaponizing one's own discomfort to deflect accountability or censor an individual (e.g. "white fragility") is a form of discriminatory conduct. + +4. **Let people grow from their mistakes.** Nobody is perfect; even the most well-meaning individual can do something hurtful. Everyone should be given a fair opportunity to explain themselves and correct their behaviour. Portraying someone as inherently malicious prevents improvement and shifts focus away from the *action* that was problematic. + - Avoid bringing up past events that do not accurately reflect an individual's current actions or beliefs. (This is, of course, different from providing evidence of a recurring pattern of behaviour.) + +--- +This document was adapted from one created by ~keith as part of punks default repository template, and is licensed under CC-BY-SA 4.0. The original template is here: diff --git a/docs/docs/installation/generic_dependencies.include b/docs/docs/installation/generic_dependencies.include index 2dbd93e42..68c61129a 100644 --- a/docs/docs/installation/generic_dependencies.include +++ b/docs/docs/installation/generic_dependencies.include @@ -1,7 +1,7 @@ ## Required dependencies * PostgreSQL 9.6+ -* Elixir 1.9+ +* Elixir 1.12+ (1.13+ recommended) * Erlang OTP 22.2+ * git * file / libmagic diff --git a/lib/pleroma/config/release_runtime_provider.ex b/lib/pleroma/config/release_runtime_provider.ex index 1e4bddc59..e5f2d6339 100644 --- a/lib/pleroma/config/release_runtime_provider.ex +++ b/lib/pleroma/config/release_runtime_provider.ex @@ -14,10 +14,10 @@ def load(config, opts) do config_path = cond do opts[:config_path] -> opts[:config_path] - System.get_env("PLEROMA_CONFIG_PATH") -> System.get_env("PLEROMA_CONFIG_PATH") System.get_env("AKKOMA_CONFIG_PATH") -> System.get_env("AKKOMA_CONFIG_PATH") - File.exists?("/etc/akkoma/config.exs") -> "/etc/akkoma/config.exs" - true -> "/etc/pleroma/config.exs" + System.get_env("PLEROMA_CONFIG_PATH") -> System.get_env("PLEROMA_CONFIG_PATH") + File.exists?("/etc/pleroma/config.exs") -> "/etc/pleroma/config.exs" + true -> "/etc/akkoma/config.exs" end with_runtime_config = @@ -31,7 +31,7 @@ def load(config, opts) do warning = [ IO.ANSI.red(), IO.ANSI.bright(), - "!!! Config path is not declared! Please ensure it exists and that PLEROMA_CONFIG_PATH is unset or points to an existing file", + "!!! Config path is not declared! Please ensure it exists and that AKKOMA_CONFIG_PATH and/or PLEROMA_CONFIG_PATH is unset or points to an existing file", IO.ANSI.reset() ] diff --git a/lib/pleroma/http.ex b/lib/pleroma/http.ex index f3bdccaee..d8028651c 100644 --- a/lib/pleroma/http.ex +++ b/lib/pleroma/http.ex @@ -83,13 +83,4 @@ defp build_request(method, headers, options, url, body, params) do |> Builder.add_param(:query, :query, params) |> Builder.convert_to_keyword() end - - defp adapter_middlewares(_) do - if Pleroma.Config.get(:env) == :test do - # Emulate redirects in test env, which are handled by adapters in other environments - [Tesla.Middleware.FollowRedirects] - else - [] - end - end end diff --git a/lib/pleroma/user/backup.ex b/lib/pleroma/user/backup.ex index cba94248f..2c6378265 100644 --- a/lib/pleroma/user/backup.ex +++ b/lib/pleroma/user/backup.ex @@ -32,9 +32,7 @@ defmodule Pleroma.User.Backup do end def create(user, admin_id \\ nil) do - with :ok <- validate_email_enabled(), - :ok <- validate_user_email(user), - :ok <- validate_limit(user, admin_id), + with :ok <- validate_limit(user, admin_id), {:ok, backup} <- user |> new() |> Repo.insert() do BackupWorker.process(backup, admin_id) end @@ -86,20 +84,6 @@ defp validate_limit(user, nil) do end end - defp validate_email_enabled do - if Pleroma.Config.get([Pleroma.Emails.Mailer, :enabled]) do - :ok - else - {:error, dgettext("errors", "Backups require enabled email")} - end - end - - defp validate_user_email(%User{email: nil}) do - {:error, dgettext("errors", "Email is required")} - end - - defp validate_user_email(%User{email: email}) when is_binary(email), do: :ok - def get_last(user_id) do __MODULE__ |> where(user_id: ^user_id) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 604fc6310..d2077967c 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -474,7 +474,16 @@ def handle_incoming( |> fix_in_reply_to(fetch_options) |> fix_quote_url(fetch_options) - data = Map.put(data, "object", object) + # Only change the Create's context if the object's context has been modified. + data = + if data["object"]["context"] != object["context"] do + data + |> Map.put("object", object) + |> Map.put("context", object["context"]) + else + Map.put(data, "object", object) + end + options = Keyword.put(options, :local, false) with {:ok, %User{}} <- ObjectValidator.fetch_actor(data), diff --git a/lib/pleroma/workers/backup_worker.ex b/lib/pleroma/workers/backup_worker.ex index 9b763b04b..66c5c3591 100644 --- a/lib/pleroma/workers/backup_worker.ex +++ b/lib/pleroma/workers/backup_worker.ex @@ -37,10 +37,7 @@ def perform(%Job{ backup_id |> Backup.get() |> Backup.process(), {:ok, _job} <- schedule_deletion(backup), :ok <- Backup.remove_outdated(backup), - {:ok, _} <- - backup - |> Pleroma.Emails.UserEmail.backup_is_ready_email(admin_user_id) - |> Pleroma.Emails.Mailer.deliver() do + :ok <- maybe_deliver_email(backup, admin_user_id) do {:ok, backup} end end @@ -51,4 +48,23 @@ def perform(%Job{args: %{"op" => "delete", "backup_id" => backup_id}}) do nil -> :ok end end + + defp has_email?(user) do + not is_nil(user.email) and user.email != "" + end + + defp maybe_deliver_email(backup, admin_user_id) do + has_mailer = Pleroma.Config.get([Pleroma.Emails.Mailer, :enabled]) + backup = backup |> Pleroma.Repo.preload(:user) + + if has_email?(backup.user) and has_mailer do + backup + |> Pleroma.Emails.UserEmail.backup_is_ready_email(admin_user_id) + |> Pleroma.Emails.Mailer.deliver() + + :ok + else + :ok + end + end end diff --git a/priv/gettext/ca/LC_MESSAGES/config_descriptions.po b/priv/gettext/ca/LC_MESSAGES/config_descriptions.po index bdb997f1a..789ff54d0 100644 --- a/priv/gettext/ca/LC_MESSAGES/config_descriptions.po +++ b/priv/gettext/ca/LC_MESSAGES/config_descriptions.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-07-28 09:35+0000\n" -"PO-Revision-Date: 2022-07-28 09:36+0000\n" -"Last-Translator: Anonymous \n" +"PO-Revision-Date: 2022-07-30 21:58+0000\n" +"Last-Translator: sola \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -33,16 +33,16 @@ msgstr "" "m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, elixir-autogen, elixir-format msgctxt "config description at :logger" msgid "Logger-related settings" -msgstr "Logger-related settings" +msgstr "Configuració relacionada amb el registrador(Log)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, elixir-autogen, elixir-format msgctxt "config description at :mime" msgid "Mime Types settings" -msgstr "Mime Types settings" +msgstr "Configuració de tipus Mime" #: lib/pleroma/docs/translator.ex:5 #, elixir-autogen, elixir-format, fuzzy @@ -55,16 +55,16 @@ msgstr "" "Auth or OAuth-based authentication if possible)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma" msgid "Authenticator" -msgstr "Authenticator" +msgstr "Autenticador" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, elixir-autogen, elixir-format msgctxt "config description at :quack" msgid "Quack-related settings" -msgstr "Quack-related settings" +msgstr "Configuració relacionada amb Quack" #: lib/pleroma/docs/translator.ex:5 #, elixir-autogen, elixir-format, fuzzy diff --git a/priv/gettext/ca/LC_MESSAGES/errors.po b/priv/gettext/ca/LC_MESSAGES/errors.po index 0fde4784e..f45f21e31 100644 --- a/priv/gettext/ca/LC_MESSAGES/errors.po +++ b/priv/gettext/ca/LC_MESSAGES/errors.po @@ -12,232 +12,204 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Translate Toolkit 3.7.1\n" -## This file is a PO Template file. -## -## `msgid`s here are often extracted from source code. -## Add new translations manually only if they're dynamic -## translations that can't be statically extracted. -## -## Run `mix gettext.extract` to bring this file up to -## date. Leave `msgstr`s empty as changing them here as no -## effect: edit them in PO (`.po`) files instead. -## From Ecto.Changeset.cast/4 +# # This file is a PO Template file. +# # +# # `msgid`s here are often extracted from source code. +# # Add new translations manually only if they're dynamic +# # translations that can't be statically extracted. +# # +# # Run `mix gettext.extract` to bring this file up to +# # date. Leave `msgstr`s empty as changing them here as no +# # effect: edit them in PO (`.po`) files instead. +# # From Ecto.Changeset.cast/4 msgid "can't be blank" -msgstr "" +msgstr "No pot estar en blanc" -## From Ecto.Changeset.unique_constraint/3 +# # From Ecto.Changeset.unique_constraint/3 msgid "has already been taken" -msgstr "" +msgstr "ja s'ha agafat" -## From Ecto.Changeset.put_change/3 +# # From Ecto.Changeset.put_change/3 msgid "is invalid" -msgstr "" +msgstr "és invàlid" -## From Ecto.Changeset.validate_format/3 +# # From Ecto.Changeset.validate_format/3 msgid "has invalid format" -msgstr "" +msgstr "té format invàlid" -## From Ecto.Changeset.validate_subset/3 +# # From Ecto.Changeset.validate_subset/3 msgid "has an invalid entry" -msgstr "" +msgstr "té una entrada no vàlida" -## From Ecto.Changeset.validate_exclusion/3 +# # From Ecto.Changeset.validate_exclusion/3 msgid "is reserved" -msgstr "" +msgstr "està reservat" -## From Ecto.Changeset.validate_confirmation/3 +# # From Ecto.Changeset.validate_confirmation/3 msgid "does not match confirmation" -msgstr "" +msgstr "no coincideix amb la confirmació" -## From Ecto.Changeset.no_assoc_constraint/3 +# # From Ecto.Changeset.no_assoc_constraint/3 msgid "is still associated with this entry" -msgstr "" +msgstr "està encara associat amb aquesta entrada" msgid "are still associated with this entry" -msgstr "" +msgstr "estan encara associats amb aquesta entrada" -## From Ecto.Changeset.validate_length/3 +# # From Ecto.Changeset.validate_length/3 msgid "should be %{count} character(s)" msgid_plural "should be %{count} character(s)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "hauria de ser %{count} caràcter" +msgstr[1] "hauria de ser %{count} caràcters" msgid "should have %{count} item(s)" msgid_plural "should have %{count} item(s)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "hauria de tenir %{count} article" +msgstr[1] "hauria de tenir %{count} articles" msgid "should be at least %{count} character(s)" msgid_plural "should be at least %{count} character(s)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "hauria de ser al menys %{count} caràcter" +msgstr[1] "hauria de ser al menys %{count} caràcters" msgid "should have at least %{count} item(s)" msgid_plural "should have at least %{count} item(s)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "hauria de tenir al menys %{count} article" +msgstr[1] "hauria de tenir al menys %{count} articles" msgid "should be at most %{count} character(s)" msgid_plural "should be at most %{count} character(s)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "hauria de ser com a molt %{count} caràcter" +msgstr[1] "hauria de ser com a molt %{count} caràcters" msgid "should have at most %{count} item(s)" msgid_plural "should have at most %{count} item(s)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "com a molt hauria de ser %{count} article" +msgstr[1] "com a molt haurien de ser %{count} articles" -## From Ecto.Changeset.validate_number/3 +# # From Ecto.Changeset.validate_number/3 msgid "must be less than %{number}" -msgstr "" +msgstr "ha de ser menor que %{number}" msgid "must be greater than %{number}" -msgstr "" +msgstr "ha de ser major que %{number}" msgid "must be less than or equal to %{number}" -msgstr "" +msgstr "ha de ser menor o igual a %{number}" msgid "must be greater than or equal to %{number}" -msgstr "" +msgstr "ha de ser més gran o igual a %{number}" msgid "must be equal to %{number}" -msgstr "" +msgstr "ha de ser igual a %{number}" #: lib/pleroma/web/common_api.ex:523 -#, elixir-autogen, elixir-format msgid "Account not found" -msgstr "" +msgstr "Compte no trobat" #: lib/pleroma/web/common_api.ex:316 -#, elixir-autogen, elixir-format msgid "Already voted" -msgstr "" +msgstr "Ja votada" #: lib/pleroma/web/o_auth/o_auth_controller.ex:402 -#, elixir-autogen, elixir-format msgid "Bad request" -msgstr "" +msgstr "Mala Sol·licitud" #: lib/pleroma/web/controller_helper.ex:97 #: lib/pleroma/web/controller_helper.ex:103 -#, elixir-autogen, elixir-format msgid "Can't display this activity" -msgstr "" +msgstr "No es pot mostrar aquesta activitat" #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:325 -#, elixir-autogen, elixir-format msgid "Can't find user" -msgstr "" +msgstr "No es pot trobar l'usuari" #: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:80 -#, elixir-autogen, elixir-format msgid "Can't get favorites" -msgstr "" +msgstr "No es poden obtenir els favorits" #: lib/pleroma/web/common_api/utils.ex:482 -#, elixir-autogen, elixir-format msgid "Cannot post an empty status without attachments" -msgstr "" +msgstr "No es pot publicar un apunt buit sense adjunts" #: lib/pleroma/web/common_api/utils.ex:441 -#, elixir-autogen, elixir-format msgid "Comment must be up to %{max_size} characters" -msgstr "" +msgstr "El comentari ha de ser fins a %{max_size} caràcters" #: lib/pleroma/config_db.ex:200 -#, elixir-autogen, elixir-format msgid "Config with params %{params} not found" -msgstr "" +msgstr "Configuració amb paràmetres %{params} no trobada" -#: lib/pleroma/web/common_api.ex:167 -#: lib/pleroma/web/common_api.ex:171 -#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:167 lib/pleroma/web/common_api.ex:171 msgid "Could not delete" -msgstr "" +msgstr "No es pot esborrar" #: lib/pleroma/web/common_api.ex:217 -#, elixir-autogen, elixir-format msgid "Could not favorite" -msgstr "" +msgstr "No es pot afavorir" #: lib/pleroma/web/common_api.ex:254 -#, elixir-autogen, elixir-format msgid "Could not unfavorite" -msgstr "" +msgstr "No es pot desfer el favorit" #: lib/pleroma/web/common_api.ex:202 -#, elixir-autogen, elixir-format msgid "Could not unrepeat" -msgstr "" +msgstr "No es pot desfer la repetició" -#: lib/pleroma/web/common_api.ex:530 -#: lib/pleroma/web/common_api.ex:539 -#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:530 lib/pleroma/web/common_api.ex:539 msgid "Could not update state" -msgstr "" +msgstr "No es pot actualitzar l'apunt" #: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:205 -#, elixir-autogen, elixir-format msgid "Error." -msgstr "" +msgstr "Error." #: lib/pleroma/web/twitter_api/twitter_api.ex:105 -#, elixir-autogen, elixir-format msgid "Invalid CAPTCHA" -msgstr "" +msgstr "CAPTCHA invàlid" #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:144 #: lib/pleroma/web/o_auth/o_auth_controller.ex:631 -#, elixir-autogen, elixir-format msgid "Invalid credentials" -msgstr "" +msgstr "Credencials invàlides" #: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:42 -#, elixir-autogen, elixir-format msgid "Invalid credentials." -msgstr "" +msgstr "Credencials invàlides." #: lib/pleroma/web/common_api.ex:337 -#, elixir-autogen, elixir-format msgid "Invalid indices" -msgstr "" +msgstr "Index invàlids" #: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:29 -#, elixir-autogen, elixir-format msgid "Invalid parameters" -msgstr "" +msgstr "Paràmetres invàlids" #: lib/pleroma/web/common_api/utils.ex:349 -#, elixir-autogen, elixir-format msgid "Invalid password." -msgstr "" +msgstr "Contrasenya invàlida." #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:255 -#, elixir-autogen, elixir-format msgid "Invalid request" -msgstr "" +msgstr "Sol·licitud invàlida" #: lib/pleroma/web/twitter_api/twitter_api.ex:108 -#, elixir-autogen, elixir-format msgid "Kocaptcha service unavailable" -msgstr "" +msgstr "Servei Kocaptcha no disponible" #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:140 -#, elixir-autogen, elixir-format msgid "Missing parameters" -msgstr "" +msgstr "Falten paràmetres" #: lib/pleroma/web/common_api/utils.ex:477 -#, elixir-autogen, elixir-format msgid "No such conversation" -msgstr "" +msgstr "No hi ha tal conversa" #: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:171 #: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:197 #: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:239 -#, elixir-autogen, elixir-format msgid "No such permission_group" -msgstr "" +msgstr "No existeix permission_group" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:515 #: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:11 @@ -245,14 +217,12 @@ msgstr "" #: lib/pleroma/web/feed/user_controller.ex:69 #: lib/pleroma/web/o_status/o_status_controller.ex:132 #: lib/pleroma/web/plugs/uploaded_media.ex:84 -#, elixir-autogen, elixir-format msgid "Not found" -msgstr "" +msgstr "No trobat" #: lib/pleroma/web/common_api.ex:308 -#, elixir-autogen, elixir-format msgid "Poll's author can't vote" -msgstr "" +msgstr "L'autor de l'enquesta no pot votar-hi" #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:20 #: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:39 @@ -260,212 +230,174 @@ msgstr "" #: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:52 #: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:326 #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:71 -#, elixir-autogen, elixir-format msgid "Record not found" -msgstr "" +msgstr "Registre no trobat" #: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:35 #: lib/pleroma/web/feed/user_controller.ex:78 #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:42 #: lib/pleroma/web/o_status/o_status_controller.ex:138 -#, elixir-autogen, elixir-format msgid "Something went wrong" -msgstr "" +msgstr "Alguna cosa ha anat malament" #: lib/pleroma/web/common_api/activity_draft.ex:143 -#, elixir-autogen, elixir-format msgid "The message visibility must be direct" -msgstr "" +msgstr "La visibilitat del missatge ha de ser directe" #: lib/pleroma/web/common_api/utils.ex:492 -#, elixir-autogen, elixir-format msgid "The status is over the character limit" -msgstr "" +msgstr "L'apunt està per sobre del limit de caràcters" #: lib/pleroma/web/plugs/ensure_public_or_authenticated_plug.ex:36 -#, elixir-autogen, elixir-format msgid "This resource requires authentication." -msgstr "" +msgstr "Aquest recurs requereix autenticació." #: lib/pleroma/web/plugs/rate_limiter.ex:208 -#, elixir-autogen, elixir-format msgid "Throttled" -msgstr "" +msgstr "Estrangulat" #: lib/pleroma/web/common_api.ex:338 -#, elixir-autogen, elixir-format msgid "Too many choices" -msgstr "" +msgstr "Massa opcions" #: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:268 -#, elixir-autogen, elixir-format msgid "You can't revoke your own admin status." -msgstr "" +msgstr "No pots revocar el teu propi estat d'administrador." #: lib/pleroma/web/o_auth/o_auth_controller.ex:243 #: lib/pleroma/web/o_auth/o_auth_controller.ex:333 -#, elixir-autogen, elixir-format msgid "Your account is currently disabled" -msgstr "" +msgstr "El teu compte està actualment desactivat" #: lib/pleroma/web/o_auth/o_auth_controller.ex:205 #: lib/pleroma/web/o_auth/o_auth_controller.ex:356 -#, elixir-autogen, elixir-format msgid "Your login is missing a confirmed e-mail address" -msgstr "" +msgstr "Al teu inici de sessió li falta una adreça de correu confirmada" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:403 -#, elixir-autogen, elixir-format msgid "can't read inbox of %{nickname} as %{as_nickname}" -msgstr "" +msgstr "no puc llegir la safata d'entrada de %{nickname} com a %{as_nickname}" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:502 -#, elixir-autogen, elixir-format msgid "can't update outbox of %{nickname} as %{as_nickname}" msgstr "" +"no es pot actualitzar la safata de sortida de %{nickname} com a " +"%{as_nickname}" #: lib/pleroma/web/common_api.ex:475 -#, elixir-autogen, elixir-format msgid "conversation is already muted" -msgstr "" +msgstr "la conversa ja està silenciada" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:521 -#, elixir-autogen, elixir-format msgid "error" -msgstr "" +msgstr "error" #: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:34 -#, elixir-autogen, elixir-format msgid "mascots can only be images" -msgstr "" +msgstr "les mascotes només poden ser imatges" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:63 -#, elixir-autogen, elixir-format msgid "not found" -msgstr "" +msgstr "no trobat" #: lib/pleroma/web/o_auth/o_auth_controller.ex:437 -#, elixir-autogen, elixir-format msgid "Bad OAuth request." -msgstr "" +msgstr "Sol·licitu OAuth dolenta." #: lib/pleroma/web/twitter_api/twitter_api.ex:114 -#, elixir-autogen, elixir-format msgid "CAPTCHA already used" -msgstr "" +msgstr "CAPTCHA ja usat" #: lib/pleroma/web/twitter_api/twitter_api.ex:111 -#, elixir-autogen, elixir-format msgid "CAPTCHA expired" -msgstr "" +msgstr "CAPTCHA expirat" #: lib/pleroma/web/plugs/uploaded_media.ex:57 -#, elixir-autogen, elixir-format msgid "Failed" -msgstr "" +msgstr "Fallat" #: lib/pleroma/web/o_auth/o_auth_controller.ex:453 -#, elixir-autogen, elixir-format msgid "Failed to authenticate: %{message}." -msgstr "" +msgstr "No s'ha pogut autenticar: %{message}." #: lib/pleroma/web/o_auth/o_auth_controller.ex:484 -#, elixir-autogen, elixir-format msgid "Failed to set up user account." -msgstr "" +msgstr "No s'ha pogut configurar el compte d'usuari." #: lib/pleroma/web/plugs/o_auth_scopes_plug.ex:37 -#, elixir-autogen, elixir-format msgid "Insufficient permissions: %{permissions}." -msgstr "" +msgstr "Permisos insuficients: %{permissions}." #: lib/pleroma/web/plugs/uploaded_media.ex:111 -#, elixir-autogen, elixir-format msgid "Internal Error" -msgstr "" +msgstr "Error intern" #: lib/pleroma/web/o_auth/fallback_controller.ex:22 #: lib/pleroma/web/o_auth/fallback_controller.ex:29 -#, elixir-autogen, elixir-format msgid "Invalid Username/Password" -msgstr "" +msgstr "Usuari/Contrasenya invàlids" #: lib/pleroma/web/twitter_api/twitter_api.ex:117 -#, elixir-autogen, elixir-format msgid "Invalid answer data" -msgstr "" +msgstr "dada de resposta invàlida" #: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:33 -#, elixir-autogen, elixir-format msgid "Nodeinfo schema version not handled" -msgstr "" +msgstr "Versió no controlada del Esquema Nodeinfo" #: lib/pleroma/web/o_auth/o_auth_controller.ex:194 -#, elixir-autogen, elixir-format msgid "This action is outside the authorized scopes" -msgstr "" +msgstr "Aquesta acció és fora dels àmbits autoritzats" #: lib/pleroma/web/o_auth/fallback_controller.ex:14 -#, elixir-autogen, elixir-format msgid "Unknown error, please check the details and try again." -msgstr "" +msgstr "Error desconegut, si us plau verifica els detalls i prova-ho de nou." #: lib/pleroma/web/o_auth/o_auth_controller.ex:136 #: lib/pleroma/web/o_auth/o_auth_controller.ex:180 -#, elixir-autogen, elixir-format msgid "Unlisted redirect_uri." -msgstr "" +msgstr "redirect_uri no llistada." #: lib/pleroma/web/o_auth/o_auth_controller.ex:433 -#, elixir-autogen, elixir-format msgid "Unsupported OAuth provider: %{provider}." -msgstr "" +msgstr "Proveïdor OAuth no compatible: %{provider}." #: lib/pleroma/uploaders/uploader.ex:74 -#, elixir-autogen, elixir-format msgid "Uploader callback timeout" -msgstr "" +msgstr "Temps d'espera esgotat del callback del carregador" #: lib/pleroma/web/uploader_controller.ex:23 -#, elixir-autogen, elixir-format msgid "bad request" -msgstr "" +msgstr "sol·licitud dolenta" #: lib/pleroma/web/twitter_api/twitter_api.ex:102 -#, elixir-autogen, elixir-format msgid "CAPTCHA Error" -msgstr "" +msgstr "Error CAPTCHA" #: lib/pleroma/web/common_api.ex:266 -#, elixir-autogen, elixir-format msgid "Could not add reaction emoji" -msgstr "" +msgstr "No es pot afegir la reacció emoji" #: lib/pleroma/web/common_api.ex:277 -#, elixir-autogen, elixir-format msgid "Could not remove reaction emoji" -msgstr "" +msgstr "No es pot treure la reacció emoji" #: lib/pleroma/web/twitter_api/twitter_api.ex:128 -#, elixir-autogen, elixir-format msgid "Invalid CAPTCHA (Missing parameter: %{name})" -msgstr "" +msgstr "CAPTCHA invàlid (Falta el paràmetre: %{name})" #: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:96 -#, elixir-autogen, elixir-format msgid "List not found" -msgstr "" +msgstr "Llista no trobada" #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:151 -#, elixir-autogen, elixir-format msgid "Missing parameter: %{name}" -msgstr "" +msgstr "Falta el paràmetre: %{name}" #: lib/pleroma/web/o_auth/o_auth_controller.ex:232 #: lib/pleroma/web/o_auth/o_auth_controller.ex:346 -#, elixir-autogen, elixir-format msgid "Password reset is required" -msgstr "" +msgstr "Es requereix restablir la contrasenya" #: lib/pleroma/tests/auth_test_controller.ex:9 #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 @@ -484,8 +416,7 @@ msgstr "" #: lib/pleroma/web/admin_api/controllers/report_controller.ex:6 #: lib/pleroma/web/admin_api/controllers/status_controller.ex:6 #: lib/pleroma/web/admin_api/controllers/user_controller.ex:6 -#: lib/pleroma/web/controller_helper.ex:6 -#: lib/pleroma/web/embed_controller.ex:6 +#: lib/pleroma/web/controller_helper.ex:6 lib/pleroma/web/embed_controller.ex:6 #: lib/pleroma/web/fallback/redirect_controller.ex:6 #: lib/pleroma/web/feed/tag_controller.ex:6 #: lib/pleroma/web/feed/user_controller.ex:6 @@ -545,80 +476,71 @@ msgstr "" #: lib/pleroma/web/twitter_api/controllers/util_controller.ex:6 #: lib/pleroma/web/uploader_controller.ex:6 #: lib/pleroma/web/web_finger/web_finger_controller.ex:6 -#, elixir-autogen, elixir-format -msgid "Security violation: OAuth scopes check was neither handled nor explicitly skipped." +msgid "" +"Security violation: OAuth scopes check was neither handled nor explicitly " +"skipped." msgstr "" +"Violació de seguretat: la verificació dels àmbits OAuth no ha estat ni " +"controlada ni explícitament omesa." #: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:32 -#, elixir-autogen, elixir-format msgid "Two-factor authentication enabled, you must use a access token." -msgstr "" +msgstr "Autenticació de dos factor activada, has d'usar un token d'accés." #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 -#, elixir-autogen, elixir-format msgid "Web push subscription is disabled on this Pleroma instance" -msgstr "" +msgstr "La subscripció Web push està desactivada en aquesta instància Akkoma" #: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:234 -#, elixir-autogen, elixir-format msgid "You can't revoke your own admin/moderator status." -msgstr "" +msgstr "No pots revocar els teu propi estat de admin/moderador." #: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:129 -#, elixir-autogen, elixir-format msgid "authorization required for timeline view" -msgstr "" +msgstr "es requereix autorització per a veure la línia de temps" #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:24 -#, elixir-autogen, elixir-format msgid "Access denied" -msgstr "" +msgstr "Accés denegat" #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:322 -#, elixir-autogen, elixir-format msgid "This API requires an authenticated user" -msgstr "" +msgstr "Aquesta API requereix un usuari autenticat" #: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:26 #: lib/pleroma/web/plugs/user_is_admin_plug.ex:21 -#, elixir-autogen, elixir-format msgid "User is not an admin." -msgstr "" +msgstr "L'usuari no és un admin." #: lib/pleroma/user/backup.ex:75 -#, elixir-format msgid "Last export was less than a day ago" msgid_plural "Last export was less than %{days} days ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "La darrera exportació va ser fa menys d'un dia" +msgstr[1] "La darrera exportació va ser fa menys de %{days} dies" #: lib/pleroma/user/backup.ex:93 -#, elixir-autogen, elixir-format msgid "Backups require enabled email" -msgstr "" +msgstr "Les copies de seguretat requereixen un correu activat" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:434 -#, elixir-autogen, elixir-format -msgid "Character limit (%{limit} characters) exceeded, contains %{length} characters" +msgid "" +"Character limit (%{limit} characters) exceeded, contains %{length} characters" msgstr "" +"Limit de caràcters (%{limit} characters) excedit, conté %{length} caràcters" #: lib/pleroma/user/backup.ex:98 -#, elixir-autogen, elixir-format msgid "Email is required" -msgstr "" +msgstr "Es requereix correu" #: lib/pleroma/web/common_api/utils.ex:507 -#, elixir-autogen, elixir-format msgid "Too many attachments" -msgstr "" +msgstr "Massa adjunts" #: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:33 #: lib/pleroma/web/plugs/user_is_staff_plug.ex:20 -#, elixir-autogen, elixir-format msgid "User is not a staff member." -msgstr "" +msgstr "L'usuari no és un membre del equip." #: lib/pleroma/web/o_auth/o_auth_controller.ex:366 -#, elixir-autogen, elixir-format msgid "Your account is awaiting approval." -msgstr "" +msgstr "El teu compte espera aprovació." diff --git a/priv/gettext/ca/LC_MESSAGES/static_pages.po b/priv/gettext/ca/LC_MESSAGES/static_pages.po index 6f37874ca..1d7c4e0a8 100644 --- a/priv/gettext/ca/LC_MESSAGES/static_pages.po +++ b/priv/gettext/ca/LC_MESSAGES/static_pages.po @@ -3,14 +3,16 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-07-28 09:15+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2022-07-30 21:58+0000\n" +"Last-Translator: sola \n" +"Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Translate Toolkit 3.7.1\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.13.1\n" ## This file is a PO Template file. ## @@ -21,150 +23,149 @@ msgstr "" ## Run "mix gettext.extract" to bring this file up to ## date. Leave "msgstr"s empty as changing them here as no ## effect: edit them in PO (.po) files instead. - #: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:9 #, elixir-autogen, elixir-format msgctxt "remote follow authorization button" msgid "Authorize" -msgstr "" +msgstr "Autoritza" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:2 #, elixir-autogen, elixir-format msgctxt "remote follow error" msgid "Error fetching user" -msgstr "" +msgstr "Error obtenint usuari" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:4 #, elixir-autogen, elixir-format msgctxt "remote follow header" msgid "Remote follow" -msgstr "" +msgstr "Seguiment remot" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:8 #, elixir-autogen, elixir-format msgctxt "placeholder text for auth code entry" msgid "Authentication code" -msgstr "" +msgstr "Codi d'autenticació" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:10 #, elixir-autogen, elixir-format msgctxt "placeholder text for password entry" msgid "Password" -msgstr "" +msgstr "Contrasenya" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:8 #, elixir-autogen, elixir-format msgctxt "placeholder text for username entry" msgid "Username" -msgstr "" +msgstr "Nom d'usuari" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:13 #, elixir-autogen, elixir-format msgctxt "remote follow authorization button for login" msgid "Authorize" -msgstr "" +msgstr "Autoritza" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:12 #, elixir-autogen, elixir-format msgctxt "remote follow authorization button for mfa" msgid "Authorize" -msgstr "" +msgstr "Autoritza" #: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:2 #, elixir-autogen, elixir-format msgctxt "remote follow error" msgid "Error following account" -msgstr "" +msgstr "Error seguint el compte" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:4 #, elixir-autogen, elixir-format msgctxt "remote follow header, need login" msgid "Log in to follow" -msgstr "" +msgstr "Inicia sessió per a seguir" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:4 #, elixir-autogen, elixir-format msgctxt "remote follow mfa header" msgid "Two-factor authentication" -msgstr "" +msgstr "Autenticació de dos factors" #: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:4 #, elixir-autogen, elixir-format msgctxt "remote follow success" msgid "Account followed!" -msgstr "" +msgstr "Compte seguit!" #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:7 #, elixir-autogen, elixir-format msgctxt "placeholder text for account id" msgid "Your account ID, e.g. lain@quitter.se" -msgstr "" +msgstr "L'ID del teu compte, p.e. maria@exemple.cat" #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:8 #, elixir-autogen, elixir-format msgctxt "remote follow authorization button for following with a remote account" msgid "Follow" -msgstr "" +msgstr "Segueix" #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:2 #, elixir-autogen, elixir-format msgctxt "remote follow error" msgid "Error: %{error}" -msgstr "" +msgstr "Error: %{error}" #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:4 #, elixir-autogen, elixir-format msgctxt "remote follow header" msgid "Remotely follow %{nickname}" -msgstr "" +msgstr "Seguir remotament %{nickname}" #: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:12 #, elixir-autogen, elixir-format msgctxt "password reset button" msgid "Reset" -msgstr "" +msgstr "Reiniciar" #: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:4 #, elixir-autogen, elixir-format msgctxt "password reset failed homepage link" msgid "Homepage" -msgstr "" +msgstr "Pàgina d'inici" #: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:1 #, elixir-autogen, elixir-format msgctxt "password reset failed message" msgid "Password reset failed" -msgstr "" +msgstr "Error al restablir la contrasenya" #: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:8 #, elixir-autogen, elixir-format msgctxt "password reset form confirm password prompt" msgid "Confirmation" -msgstr "" +msgstr "Confirmació" #: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:4 #, elixir-autogen, elixir-format msgctxt "password reset form password prompt" msgid "Password" -msgstr "" +msgstr "Contrasenya" #: lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex:1 #, elixir-autogen, elixir-format msgctxt "password reset invalid token message" msgid "Invalid Token" -msgstr "" +msgstr "Token Invàlid" #: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:2 #, elixir-autogen, elixir-format msgctxt "password reset successful homepage link" msgid "Homepage" -msgstr "" +msgstr "Pàgina d'inici" #: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:1 #, elixir-autogen, elixir-format msgctxt "password reset successful message" msgid "Password changed!" -msgstr "" +msgstr "Contrasenya canviada!" #: lib/pleroma/web/templates/feed/feed/tag.atom.eex:15 #: lib/pleroma/web/templates/feed/feed/tag.rss.eex:7 @@ -172,354 +173,395 @@ msgstr "" msgctxt "tag feed description" msgid "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse." msgstr "" +"Aquests son apunts públics etiquetats amb #%{tag}. Pots interactuar amb ells " +"si tens un compte en qualsevol lloc del fedivers." #: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:1 #, elixir-autogen, elixir-format msgctxt "oauth authorization exists page title" msgid "Authorization exists" -msgstr "" +msgstr "Existeix autorització" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:32 #, elixir-autogen, elixir-format msgctxt "oauth authorize approve button" msgid "Approve" -msgstr "" +msgstr "Aprova" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:30 #, elixir-autogen, elixir-format msgctxt "oauth authorize cancel button" msgid "Cancel" -msgstr "" +msgstr "Cancel·la" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:23 #, elixir-autogen, elixir-format msgctxt "oauth authorize message" msgid "Application %{client_name} is requesting access to your account." msgstr "" +"L'aplicació %{client_name} sol·licita accés al teu compte." #: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:1 #, elixir-autogen, elixir-format msgctxt "oauth authorized page title" msgid "Successfully authorized" -msgstr "" +msgstr "Autoritzat amb èxit" #: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:1 #, elixir-autogen, elixir-format msgctxt "oauth external provider page title" msgid "Sign in with external provider" -msgstr "" +msgstr "Inicia sessió amb proveïdor extern" #: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:13 #, elixir-autogen, elixir-format msgctxt "oauth external provider sign in button" msgid "Sign in with %{strategy}" -msgstr "" +msgstr "Inicia sessió amb %{strategy}" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:54 #, elixir-autogen, elixir-format msgctxt "oauth login button" msgid "Log In" -msgstr "" +msgstr "Inicia sessió" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:51 #, elixir-autogen, elixir-format msgctxt "oauth login password prompt" msgid "Password" -msgstr "" +msgstr "Contrasenya" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:47 #, elixir-autogen, elixir-format msgctxt "oauth login username prompt" msgid "Username" -msgstr "" +msgstr "Nom d'usuari" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:39 #, elixir-autogen, elixir-format msgctxt "oauth register nickname prompt" msgid "Pleroma Handle" -msgstr "" +msgstr "Sobrenom Akkoma" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37 #, elixir-autogen, elixir-format msgctxt "oauth register nickname unchangeable warning" msgid "Choose carefully! You won't be able to change this later. You will be able to change your display name, though." msgstr "" +"Tria amb cura! No podràs canviar-ho més tard. En canvi, podràs canviar el " +"teu nom a mostrar." #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:18 #, elixir-autogen, elixir-format msgctxt "oauth register page email prompt" msgid "Email" -msgstr "" +msgstr "Correu" #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:10 #, elixir-autogen, elixir-format msgctxt "oauth register page fill form prompt" msgid "If you'd like to register a new account, please provide the details below." msgstr "" +"Si desitges registrar un compte nou, si us plau proporciona els detalls a " +"continuació." #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:35 #, elixir-autogen, elixir-format msgctxt "oauth register page login button" msgid "Proceed as existing user" -msgstr "" +msgstr "Procedir com a usuari existent" #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:31 #, elixir-autogen, elixir-format msgctxt "oauth register page login password prompt" msgid "Password" -msgstr "" +msgstr "Contrasenya" #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:24 #, elixir-autogen, elixir-format msgctxt "oauth register page login prompt" msgid "Alternatively, sign in to connect to existing account." -msgstr "" +msgstr "Alternativament, inicia sessió per a connectar amb un compte existent." #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:27 #, elixir-autogen, elixir-format msgctxt "oauth register page login username prompt" msgid "Name or email" -msgstr "" +msgstr "Nom o correu" #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:14 #, elixir-autogen, elixir-format msgctxt "oauth register page nickname prompt" msgid "Nickname" -msgstr "" +msgstr "Sobrenom" #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:22 #, elixir-autogen, elixir-format msgctxt "oauth register page register button" msgid "Proceed as new user" -msgstr "" +msgstr "Procedir com a usuari nou" #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:8 #, elixir-autogen, elixir-format msgctxt "oauth register page title" msgid "Registration Details" -msgstr "" +msgstr "Detalls del registre" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:36 #, elixir-autogen, elixir-format msgctxt "oauth register page title" msgid "This is the first time you visit! Please enter your Pleroma handle." msgstr "" +"Aquesta és la primera vegada que ens visites! Si us plau introdueix el teu " +"sobrenom a Akkoma." #: lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex:2 #, elixir-autogen, elixir-format msgctxt "oauth scopes message" msgid "The following permissions will be granted" -msgstr "" +msgstr "Es concediran els següents permisos" #: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:2 #: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:2 #, elixir-autogen, elixir-format msgctxt "oauth token code message" msgid "Token code is
%{token}" -msgstr "" +msgstr "El codi del Token és
%{token}" #: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:12 #, elixir-autogen, elixir-format msgctxt "mfa auth code prompt" msgid "Authentication code" -msgstr "" +msgstr "Codi d'autenticació" #: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:8 #, elixir-autogen, elixir-format msgctxt "mfa auth page title" msgid "Two-factor authentication" -msgstr "" +msgstr "Autenticació de dos factors" #: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:23 #, elixir-autogen, elixir-format msgctxt "mfa auth page use recovery code link" msgid "Enter a two-factor recovery code" -msgstr "" +msgstr "Entra el codi de recuperació de dos factors" #: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:20 #, elixir-autogen, elixir-format msgctxt "mfa auth verify code button" msgid "Verify" -msgstr "" +msgstr "Verifica" #: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:8 #, elixir-autogen, elixir-format msgctxt "mfa recover page title" msgid "Two-factor recovery" -msgstr "" +msgstr "Recuperació de dos factors" #: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:12 #, elixir-autogen, elixir-format msgctxt "mfa recover recovery code prompt" msgid "Recovery code" -msgstr "" +msgstr "Codi de recuperació" #: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:23 #, elixir-autogen, elixir-format msgctxt "mfa recover use 2fa code link" msgid "Enter a two-factor code" -msgstr "" +msgstr "Entra el codi de dos factors" #: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:20 #, elixir-autogen, elixir-format msgctxt "mfa recover verify recovery code button" msgid "Verify" -msgstr "" +msgstr "Verifica" #: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:8 #, elixir-autogen, elixir-format msgctxt "static fe profile page remote follow button" msgid "Remote follow" -msgstr "" +msgstr "Seguiment remot" #: lib/pleroma/web/templates/email/digest.html.eex:163 #, elixir-autogen, elixir-format msgctxt "digest email header line" msgid "Hey %{nickname}, here is what you've missed!" -msgstr "" +msgstr "Hola %{nickname}, aquí està el que t'has perdut!" #: lib/pleroma/web/templates/email/digest.html.eex:544 #, elixir-autogen, elixir-format msgctxt "digest email receiver address" msgid "The email address you are subscribed as is %{email}. " msgstr "" +"L'adreça de correu a la que estàs subscrit és %{email}. " #: lib/pleroma/web/templates/email/digest.html.eex:538 #, elixir-autogen, elixir-format msgctxt "digest email sending reason" msgid "You have received this email because you have signed up to receive digest emails from %{instance} Pleroma instance." msgstr "" +"Has rebut aquest correu perquè t'has registrat per a rebre correus resum des " +"de l'instància Akkoma %{instance}2." #: lib/pleroma/web/templates/email/digest.html.eex:547 #, elixir-autogen, elixir-format msgctxt "digest email unsubscribe action" msgid "To unsubscribe, please go %{here}." -msgstr "" +msgstr "Per a donar-te de baixa, si us plau ves a %{here}." #: lib/pleroma/web/templates/email/digest.html.eex:547 #, elixir-autogen, elixir-format msgctxt "digest email unsubscribe action link text" msgid "here" -msgstr "" +msgstr "aquí" #: lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex:1 #, elixir-autogen, elixir-format msgctxt "mailer unsubscribe failed message" msgid "UNSUBSCRIBE FAILURE" -msgstr "" +msgstr "ERROR DE CANCEL·LACIÓ DE LA SUBSCRIPCIÓ" #: lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex:1 #, elixir-autogen, elixir-format msgctxt "mailer unsubscribe successful message" msgid "UNSUBSCRIBE SUCCESSFUL" -msgstr "" +msgstr "SUBSCRIPCIÓ CANCEL·LADA AMB ÈXIT" #: lib/pleroma/web/templates/email/digest.html.eex:385 #, elixir-format msgctxt "new followers count header" msgid "%{count} New Follower" msgid_plural "%{count} New Followers" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%{count} Nou Seguidor" +msgstr[1] "%{count} Nous Seguidors" #: lib/pleroma/emails/user_email.ex:356 #, elixir-autogen, elixir-format msgctxt "account archive email body - self-requested" msgid "

You requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" msgstr "" +"

Has sol·licitat una copia de seguretat completa del teu compte Akkoma. " +"Està llest per a descarrega:

\n" +"

%{download_url}

\n" #: lib/pleroma/emails/user_email.ex:384 #, elixir-autogen, elixir-format msgctxt "account archive email subject" msgid "Your account archive is ready" -msgstr "" +msgstr "L'arxiu del teu compte està preparat" #: lib/pleroma/emails/user_email.ex:188 #, elixir-autogen, elixir-format msgctxt "approval pending email body" msgid "

Awaiting Approval

\n

Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.

\n" msgstr "" +"

Esperant aprovació

\n" +"

El teu compte a %{instance_name} està sent revisat per l'equip. Rebràs un " +"altre correu quan el teu compte estigui aprovat.

\n" #: lib/pleroma/emails/user_email.ex:202 #, elixir-autogen, elixir-format msgctxt "approval pending email subject" msgid "Your account is awaiting approval" -msgstr "" +msgstr "El teu compte està esperant aprovació" #: lib/pleroma/emails/user_email.ex:158 #, elixir-autogen, elixir-format msgctxt "confirmation email body" msgid "

Thank you for registering on %{instance_name}

\n

Email confirmation is required to activate the account.

\n

Please click the following link to activate your account.

\n" msgstr "" +"

Gràcies per registrar-te a %{instance_name}

\n" +"

Es requereix correu de confirmació per a activar el reu compte.

\n" +"

Si us plau clica en l'enllaç següent per a activar el teu compte.

\n" #: lib/pleroma/emails/user_email.ex:174 #, elixir-autogen, elixir-format msgctxt "confirmation email subject" msgid "%{instance_name} account confirmation" -msgstr "" +msgstr "confirmació del compte a %{instance_name}" #: lib/pleroma/emails/user_email.ex:310 #, elixir-autogen, elixir-format msgctxt "digest email subject" msgid "Your digest from %{instance_name}" -msgstr "" +msgstr "El teu resum des de %{instance_name}" #: lib/pleroma/emails/user_email.ex:81 #, elixir-autogen, elixir-format msgctxt "password reset email body" msgid "

Reset your password at %{instance_name}

\n

Someone has requested password change for your account at %{instance_name}.

\n

If it was you, visit the following link to proceed: reset password.

\n

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

\n" msgstr "" +"

Restableix la teva contrasenya a %{instance_name}

\n" +"

Algú ha sol·licitat un canvi de contrasenya per el teu compte a " +"%{instance_name}.

\n" +"

Si has estat tu, visita el següent enllaç per a procedir: restablir contrasenya.

\n" +"

Si ha estat algú altre, no et preocupis: les teves dades estan segures i " +"la teva contrasenya no s'ha canviat.

\n" #: lib/pleroma/emails/user_email.ex:98 #, elixir-autogen, elixir-format msgctxt "password reset email subject" msgid "Password reset" -msgstr "" +msgstr "Restablir contrasenya" #: lib/pleroma/emails/user_email.ex:215 #, elixir-autogen, elixir-format msgctxt "successful registration email body" msgid "

Hello @%{nickname},

\n

Your account at %{instance_name} has been registered successfully.

\n

No further action is required to activate your account.

\n" msgstr "" +"

Hola @%{nickname},

\n" +"

El teu compte a %{instance_name} ha estat registrar amb èxit.

\n" +"

No es requereix cap altre acció per a activar el teu compte.

\n" #: lib/pleroma/emails/user_email.ex:231 #, elixir-autogen, elixir-format msgctxt "successful registration email subject" msgid "Account registered on %{instance_name}" -msgstr "" +msgstr "Compte registrat a %{instance_name}" #: lib/pleroma/emails/user_email.ex:119 #, elixir-autogen, elixir-format msgctxt "user invitation email body" msgid "

You are invited to %{instance_name}

\n

%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.

\n

Click the following link to register: accept invitation.

\n" msgstr "" +"

Has estat invitat a %{instance_name}

\n" +"

%{inviter_name} t'invita a unir-te a %{instance_name}, una instància de " +"la plataforma de xarxa social federada Akkoma.

\n" +"

Clica el següent enllaç per a registrar-te: accepta invitació.

\n" #: lib/pleroma/emails/user_email.ex:136 #, elixir-autogen, elixir-format msgctxt "user invitation email subject" msgid "Invitation to %{instance_name}" -msgstr "" +msgstr "Invitació per %{instance_name}" #: lib/pleroma/emails/user_email.ex:53 #, elixir-autogen, elixir-format msgctxt "welcome email html body" msgid "Welcome to %{instance_name}!" -msgstr "" +msgstr "Benvingut a %{instance_name}!" #: lib/pleroma/emails/user_email.ex:41 #, elixir-autogen, elixir-format msgctxt "welcome email subject" msgid "Welcome to %{instance_name}!" -msgstr "" +msgstr "Benvingut a %{instance_name}!" #: lib/pleroma/emails/user_email.ex:65 #, elixir-autogen, elixir-format msgctxt "welcome email text body" msgid "Welcome to %{instance_name}!" -msgstr "" +msgstr "Benvingut a %{instance_name}!" #: lib/pleroma/emails/user_email.ex:368 #, elixir-autogen, elixir-format msgctxt "account archive email body - admin requested" msgid "

Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" msgstr "" +"

L'Administrador @%{admin_nickname} ha sol·licitat una copia de seguretat " +"completa del teu compte Akkoma. Està preparat per a descarrega:

\n" +"

%{download_url}

\n" diff --git a/test/fixtures/create-pleroma-reply-to-misskey-thread.json b/test/fixtures/create-pleroma-reply-to-misskey-thread.json new file mode 100644 index 000000000..0c31efa76 --- /dev/null +++ b/test/fixtures/create-pleroma-reply-to-misskey-thread.json @@ -0,0 +1,61 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://p.helene.moe/schemas/litepub-0.1.jsonld", + { + "@language": "und" + } + ], + "actor": "https://p.helene.moe/users/helene", + "attachment": [], + "attributedTo": "https://p.helene.moe/users/helene", + "cc": [ + "https://p.helene.moe/users/helene/followers" + ], + "context": "https://p.helene.moe/contexts/cc324643-5583-4c3f-91d2-c6ed37db159d", + "conversation": "https://p.helene.moe/contexts/cc324643-5583-4c3f-91d2-c6ed37db159d", + "directMessage": false, + "id": "https://p.helene.moe/activities/5f80db86-a9bb-4883-9845-fbdbd1478f3a", + "object": { + "actor": "https://p.helene.moe/users/helene", + "attachment": [], + "attributedTo": "https://p.helene.moe/users/helene", + "cc": [ + "https://p.helene.moe/users/helene/followers" + ], + "content": "@mametsuko meow", + "context": "https://p.helene.moe/contexts/cc324643-5583-4c3f-91d2-c6ed37db159d", + "conversation": "https://p.helene.moe/contexts/cc324643-5583-4c3f-91d2-c6ed37db159d", + "id": "https://p.helene.moe/objects/fd5910ac-d9dc-412e-8d1d-914b203296c4", + "inReplyTo": "https://mk.absturztau.be/notes/93e7nm8wqg", + "published": "2022-08-02T13:46:58.403996Z", + "sensitive": null, + "source": "@mametsuko@mk.absturztau.be meow", + "summary": "", + "tag": [ + { + "href": "https://mk.absturztau.be/users/8ozbzjs3o8", + "name": "@mametsuko@mk.absturztau.be", + "type": "Mention" + } + ], + "to": [ + "https://mk.absturztau.be/users/8ozbzjs3o8", + "https://www.w3.org/ns/activitystreams#Public" + ], + "type": "Note" + }, + "published": "2022-08-02T13:46:58.403883Z", + "tag": [ + { + "href": "https://mk.absturztau.be/users/8ozbzjs3o8", + "name": "@mametsuko@mk.absturztau.be", + "type": "Mention" + } + ], + "to": [ + "https://mk.absturztau.be/users/8ozbzjs3o8", + "https://www.w3.org/ns/activitystreams#Public" + ], + "type": "Create" +} \ No newline at end of file diff --git a/test/fixtures/tesla_mock/helene@p.helene.moe.json b/test/fixtures/tesla_mock/helene@p.helene.moe.json new file mode 100644 index 000000000..d7444817f --- /dev/null +++ b/test/fixtures/tesla_mock/helene@p.helene.moe.json @@ -0,0 +1,50 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://p.helene.moe/schemas/litepub-0.1.jsonld", + { + "@language": "und" + } + ], + "alsoKnownAs": [], + "attachment": [ + { + "name": "Timezone", + "type": "PropertyValue", + "value": "UTC+2 (Paris/Berlin)" + } + ], + "capabilities": { + "acceptsChatMessages": true + }, + "discoverable": true, + "endpoints": { + "oauthAuthorizationEndpoint": "https://p.helene.moe/oauth/authorize", + "oauthRegistrationEndpoint": "https://p.helene.moe/api/v1/apps", + "oauthTokenEndpoint": "https://p.helene.moe/oauth/token", + "sharedInbox": "https://p.helene.moe/inbox", + "uploadMedia": "https://p.helene.moe/api/ap/upload_media" + }, + "featured": "https://p.helene.moe/users/helene/collections/featured", + "followers": "https://p.helene.moe/users/helene/followers", + "following": "https://p.helene.moe/users/helene/following", + "icon": { + "type": "Image", + "url": "https://p.helene.moe/media/9a39209daa5a66b7ebb0547b08bf8360aa9d8d65a4ffba2603c6ffbe6aecb432.jpg" + }, + "id": "https://p.helene.moe/users/helene", + "inbox": "https://p.helene.moe/users/helene/inbox", + "manuallyApprovesFollowers": false, + "name": "Hélène", + "outbox": "https://p.helene.moe/users/helene/outbox", + "preferredUsername": "helene", + "publicKey": { + "id": "https://p.helene.moe/users/helene#main-key", + "owner": "https://p.helene.moe/users/helene", + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtoSBPU/VS2Kx3f6ap3zv\nZVacJsgUfaoFb3c2ii/FRh9RmRVlarq8sJXcjsQt1e0oxWaWJaIDDwyKZPt6hXae\nrY/AiGGeNu+NA+BtY7l7+9Yu67HUyT62+1qAwYHKBXX3fLOPs/YmQI0Tt0c4wKAG\nKEkiYsRizghgpzUC6jqdKV71DJkUZ8yhckCGb2fLko1ajbWEssdaP51aLsyRMyC2\nuzeWrxtD4O/HG0ea4S6y5X6hnsAHIK4Y3nnyIQ6pn4tOsl3HgqkjXE9MmZSvMCFx\nBq89TfZrVXNa2gSZdZLdbbJstzEScQWNt1p6tA6rM+e4JXYGr+rMdF3G+jV7afI2\nFQIDAQAB\n-----END PUBLIC KEY-----\n\n" + }, + "summary": "I can speak: Français, English, Deutsch (nicht sehr gut), 日本語 (not very well)", + "tag": [], + "type": "Person", + "url": "https://p.helene.moe/users/helene" +} \ No newline at end of file diff --git a/test/fixtures/tesla_mock/mametsuko@mk.absturztau.be.json b/test/fixtures/tesla_mock/mametsuko@mk.absturztau.be.json new file mode 100644 index 000000000..d8c13f775 --- /dev/null +++ b/test/fixtures/tesla_mock/mametsuko@mk.absturztau.be.json @@ -0,0 +1,65 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "sensitive": "as:sensitive", + "Hashtag": "as:Hashtag", + "quoteUrl": "as:quoteUrl", + "toot": "http://joinmastodon.org/ns#", + "Emoji": "toot:Emoji", + "featured": "toot:featured", + "discoverable": "toot:discoverable", + "schema": "http://schema.org#", + "PropertyValue": "schema:PropertyValue", + "value": "schema:value", + "misskey": "https://misskey-hub.net/ns#", + "_misskey_content": "misskey:_misskey_content", + "_misskey_quote": "misskey:_misskey_quote", + "_misskey_reaction": "misskey:_misskey_reaction", + "_misskey_votes": "misskey:_misskey_votes", + "_misskey_talk": "misskey:_misskey_talk", + "isCat": "misskey:isCat", + "vcard": "http://www.w3.org/2006/vcard/ns#" + } + ], + "type": "Person", + "id": "https://mk.absturztau.be/users/8ozbzjs3o8", + "inbox": "https://mk.absturztau.be/users/8ozbzjs3o8/inbox", + "outbox": "https://mk.absturztau.be/users/8ozbzjs3o8/outbox", + "followers": "https://mk.absturztau.be/users/8ozbzjs3o8/followers", + "following": "https://mk.absturztau.be/users/8ozbzjs3o8/following", + "featured": "https://mk.absturztau.be/users/8ozbzjs3o8/collections/featured", + "sharedInbox": "https://mk.absturztau.be/inbox", + "endpoints": { + "sharedInbox": "https://mk.absturztau.be/inbox" + }, + "url": "https://mk.absturztau.be/@mametsuko", + "preferredUsername": "mametsuko", + "name": "mametschko", + "summary": "

nya, ich bin eine Brotperson

", + "icon": { + "type": "Image", + "url": "https://mk.absturztau.be/files/webpublic-3b5594f4-fa52-4548-b4e3-c379ae2143ed", + "sensitive": false, + "name": null + }, + "image": { + "type": "Image", + "url": "https://mk.absturztau.be/files/webpublic-0d03b03d-b14b-4916-ac3d-8a137118ec84", + "sensitive": false, + "name": null + }, + "tag": [], + "manuallyApprovesFollowers": true, + "discoverable": false, + "publicKey": { + "id": "https://mk.absturztau.be/users/8ozbzjs3o8#main-key", + "type": "Key", + "owner": "https://mk.absturztau.be/users/8ozbzjs3o8", + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuN/S1spBGmh8FXI1Bt16\nXB7Cc0QutBp7UPgmDNHjOfsq0zrF4g3L1UBxvrpU0XX77XPMCd9yPvGwAYURH2mv\ntIcYuE+R90VLDmBu5MTVthcG2D874eCZ2rD2YsEYmN5AjTX7QBIqCck+qDhVWkkM\nEZ6S5Ht6IJ5Of74eKffXElQI/C6QB+9uEDOmPk0jCzgI5gw7xvJqFj/DIF4kUUAu\nA89JqaFZzZlkrSrj4cr48bLN/YOmpdaHu0BKHaDSHct4+MqlixqovgdB6RboCEDw\ne4Aeav7+Q0Y9oGIvuggg0Q+nCubnVNnaPyzd817tpPVzyZmTts+DKyDuv90SX3nR\nsPaNa5Ty60eqplUk4b7X1gSvuzBJUFBxTVV84WnjwoeoydaS6rSyjCDPGLBjaByc\nFyWMMEb/zlQyhLZfBlvT7k96wRSsMszh2hDALWmgYIhq/jNwINvALJ1GKLNHHKZ4\nyz2LnxVpRm2rWrZzbvtcnSQOt3LaPSZn8Wgwv4buyHF02iuVuIamZVtKexsE1Ixl\nIi9qa3AKEc5gOzYXhRhvHaruzoCehUbb/UHC5c8Tto8L5G1xYzjLP3qj3PT9w/wM\n+k1Ra/4JhuAnVFROOoOmx9rIELLHH7juY2nhM7plGhyt1M5gysgqEloij8QzyQU2\nZK1YlAERG2XFO6br8omhcmECAwEAAQ==\n-----END PUBLIC KEY-----\n" + }, + "isCat": true, + "vcard:Address": "Vienna, Austria" +} \ No newline at end of file diff --git a/test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg.json b/test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg.json new file mode 100644 index 000000000..1b931a9a4 --- /dev/null +++ b/test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg.json @@ -0,0 +1,44 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "sensitive": "as:sensitive", + "Hashtag": "as:Hashtag", + "quoteUrl": "as:quoteUrl", + "toot": "http://joinmastodon.org/ns#", + "Emoji": "toot:Emoji", + "featured": "toot:featured", + "discoverable": "toot:discoverable", + "schema": "http://schema.org#", + "PropertyValue": "schema:PropertyValue", + "value": "schema:value", + "misskey": "https://misskey-hub.net/ns#", + "_misskey_content": "misskey:_misskey_content", + "_misskey_quote": "misskey:_misskey_quote", + "_misskey_reaction": "misskey:_misskey_reaction", + "_misskey_votes": "misskey:_misskey_votes", + "_misskey_talk": "misskey:_misskey_talk", + "isCat": "misskey:isCat", + "vcard": "http://www.w3.org/2006/vcard/ns#" + } + ], + "id": "https://mk.absturztau.be/notes/93e7nm8wqg", + "type": "Note", + "attributedTo": "https://mk.absturztau.be/users/8ozbzjs3o8", + "summary": null, + "content": "

meow

", + "_misskey_content": "meow", + "published": "2022-08-01T11:06:49.568Z", + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "cc": [ + "https://mk.absturztau.be/users/8ozbzjs3o8/followers" + ], + "inReplyTo": null, + "attachment": [], + "sensitive": false, + "tag": [] +} \ No newline at end of file diff --git a/test/fixtures/tesla_mock/p.helene.moe-AM7S6vZQmL6pI9TgPY.json b/test/fixtures/tesla_mock/p.helene.moe-AM7S6vZQmL6pI9TgPY.json new file mode 100644 index 000000000..a1ef5e20b --- /dev/null +++ b/test/fixtures/tesla_mock/p.helene.moe-AM7S6vZQmL6pI9TgPY.json @@ -0,0 +1,36 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://p.helene.moe/schemas/litepub-0.1.jsonld", + { + "@language": "und" + } + ], + "actor": "https://p.helene.moe/users/helene", + "attachment": [], + "attributedTo": "https://p.helene.moe/users/helene", + "cc": [ + "https://p.helene.moe/users/helene/followers" + ], + "content": "@mametsuko meow", + "context": "https://p.helene.moe/contexts/cc324643-5583-4c3f-91d2-c6ed37db159d", + "conversation": "https://p.helene.moe/contexts/cc324643-5583-4c3f-91d2-c6ed37db159d", + "id": "https://p.helene.moe/objects/fd5910ac-d9dc-412e-8d1d-914b203296c4", + "inReplyTo": "https://mk.absturztau.be/notes/93e7nm8wqg", + "published": "2022-08-02T13:46:58.403996Z", + "sensitive": null, + "source": "@mametsuko@mk.absturztau.be meow", + "summary": "", + "tag": [ + { + "href": "https://mk.absturztau.be/users/8ozbzjs3o8", + "name": "@mametsuko@mk.absturztau.be", + "type": "Mention" + } + ], + "to": [ + "https://mk.absturztau.be/users/8ozbzjs3o8", + "https://www.w3.org/ns/activitystreams#Public" + ], + "type": "Note" +} \ No newline at end of file diff --git a/test/pleroma/user/backup_test.exs b/test/pleroma/user/backup_test.exs index b16152876..029bbbf56 100644 --- a/test/pleroma/user/backup_test.exs +++ b/test/pleroma/user/backup_test.exs @@ -22,15 +22,15 @@ defmodule Pleroma.User.BackupTest do clear_config([Pleroma.Emails.Mailer, :enabled], true) end - test "it requries enabled email" do + test "it does not requrie enabled email" do clear_config([Pleroma.Emails.Mailer, :enabled], false) user = insert(:user) - assert {:error, "Backups require enabled email"} == Backup.create(user) + assert {:ok, _} = Backup.create(user) end - test "it requries user's email" do + test "it does not require user's email" do user = insert(:user, %{email: nil}) - assert {:error, "Email is required"} == Backup.create(user) + assert {:ok, _} = Backup.create(user) end test "it creates a backup record and an Oban job" do @@ -75,6 +75,43 @@ test "it process a backup record" do ) end + test "it does not send an email if the user does not have an email" do + clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) + %{id: user_id} = user = insert(:user, %{email: nil}) + + assert {:ok, %Oban.Job{args: %{"backup_id" => backup_id} = args}} = Backup.create(user) + assert {:ok, backup} = perform_job(BackupWorker, args) + assert backup.file_size > 0 + assert %Backup{id: ^backup_id, processed: true, user_id: ^user_id} = backup + + assert_no_email_sent() + end + + test "it does not send an email if mailer is not on" do + clear_config([Pleroma.Emails.Mailer, :enabled], false) + clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) + %{id: user_id} = user = insert(:user) + + assert {:ok, %Oban.Job{args: %{"backup_id" => backup_id} = args}} = Backup.create(user) + assert {:ok, backup} = perform_job(BackupWorker, args) + assert backup.file_size > 0 + assert %Backup{id: ^backup_id, processed: true, user_id: ^user_id} = backup + + assert_no_email_sent() + end + + test "it does not send an email if the user has an empty email" do + clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) + %{id: user_id} = user = insert(:user, %{email: ""}) + + assert {:ok, %Oban.Job{args: %{"backup_id" => backup_id} = args}} = Backup.create(user) + assert {:ok, backup} = perform_job(BackupWorker, args) + assert backup.file_size > 0 + assert %Backup{id: ^backup_id, processed: true, user_id: ^user_id} = backup + + assert_no_email_sent() + end + test "it removes outdated backups after creating a fresh one" do clear_config([Backup, :limit_days], -1) clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) diff --git a/test/pleroma/web/activity_pub/publisher_test.exs b/test/pleroma/web/activity_pub/publisher_test.exs index 0f1d621b1..93bf5c345 100644 --- a/test/pleroma/web/activity_pub/publisher_test.exs +++ b/test/pleroma/web/activity_pub/publisher_test.exs @@ -344,7 +344,7 @@ test "publish to url with with different ports" do assert not called( Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ - inbox: "https://rejected.com/users/nick1/inbox", + inbox: "https://rejected.com/users/nick2/inbox", actor_id: actor.id, id: public_note_activity.data["id"] }) diff --git a/test/pleroma/web/activity_pub/transmogrifier_test.exs b/test/pleroma/web/activity_pub/transmogrifier_test.exs index 3756fdee0..6941f69aa 100644 --- a/test/pleroma/web/activity_pub/transmogrifier_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier_test.exs @@ -107,6 +107,22 @@ test "it accepts Move activities" do assert activity.data["target"] == new_user.ap_id assert activity.data["type"] == "Move" end + + test "it fixes both the Create and object contexts in a reply" do + insert(:user, ap_id: "https://mk.absturztau.be/users/8ozbzjs3o8") + insert(:user, ap_id: "https://p.helene.moe/users/helene") + + create_activity = + "test/fixtures/create-pleroma-reply-to-misskey-thread.json" + |> File.read!() + |> Jason.decode!() + + assert {:ok, %Activity{} = activity} = Transmogrifier.handle_incoming(create_activity) + + object = Object.normalize(activity, fetch: false) + + assert activity.data["context"] == object.data["context"] + end end describe "prepare outgoing" do diff --git a/test/pleroma/web/pleroma_api/controllers/backup_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/backup_controller_test.exs index 3ee660a05..ba17636da 100644 --- a/test/pleroma/web/pleroma_api/controllers/backup_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/backup_controller_test.exs @@ -82,4 +82,24 @@ test "POST /api/v1/pleroma/backups", %{user: _user, conn: conn} do |> post("/api/v1/pleroma/backups") |> json_response_and_validate_schema(400) end + + test "Backup without email address" do + user = Pleroma.Factory.insert(:user, email: nil) + %{conn: conn} = oauth_access(["read:accounts"], user: user) + + assert is_nil(user.email) + + assert [ + %{ + "content_type" => "application/zip", + "url" => _url, + "file_size" => 0, + "processed" => false, + "inserted_at" => _ + } + ] = + conn + |> post("/api/v1/pleroma/backups") + |> json_response_and_validate_schema(:ok) + end end diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index 42dcb2bc3..476e0ce04 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -1363,6 +1363,42 @@ def get("https://patch.cx/objects/a399c28e-c821-4820-bc3e-4afeb044c16f", _, _, _ }} end + def get("https://mk.absturztau.be/users/8ozbzjs3o8", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/mametsuko@mk.absturztau.be.json"), + headers: activitypub_object_headers() + }} + end + + def get("https://p.helene.moe/users/helene", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/helene@p.helene.moe.json"), + headers: activitypub_object_headers() + }} + end + + def get("https://mk.absturztau.be/notes/93e7nm8wqg", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg.json"), + headers: activitypub_object_headers() + }} + end + + def get("https://p.helene.moe/objects/fd5910ac-d9dc-412e-8d1d-914b203296c4", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/p.helene.moe-AM7S6vZQmL6pI9TgPY.json"), + headers: activitypub_object_headers() + }} + end + def get(url, query, body, headers) do {:error, "Mock response not implemented for GET #{inspect(url)}, #{query}, #{inspect(body)}, #{inspect(headers)}"}