diff options
| -rw-r--r-- | config/description.exs | 198 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/digest.ex | 7 | ||||
| -rw-r--r-- | lib/pleroma/config/config_db.ex | 11 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/operations/account_operation.ex | 54 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/operations/app_operation.ex | 6 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/operations/filter_operation.ex | 6 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/operations/marker_operation.ex | 6 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/operations/report_operation.ex | 3 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/operations/status_operation.ex | 26 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/operations/subscription_operation.ex | 54 | ||||
| -rw-r--r-- | lib/pleroma/web/common_api/common_api.ex | 13 | ||||
| -rw-r--r-- | priv/gettext/pl/LC_MESSAGES/errors.po | 587 | ||||
| -rw-r--r-- | priv/static/static/config.json | 31 | ||||
| -rw-r--r-- | test/config/config_db_test.exs | 8 | ||||
| -rw-r--r-- | test/web/admin_api/admin_api_controller_test.exs | 3 | ||||
| -rw-r--r-- | test/web/common_api/common_api_test.exs | 12 | 
17 files changed, 909 insertions, 118 deletions
diff --git a/config/description.exs b/config/description.exs index 36ec3d40a..a800d7823 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1105,38 +1105,40 @@ config :pleroma, :config_description, [          description: "Settings for Pleroma FE",          suggestions: [            %{ -            theme: "pleroma-dark", -            logo: "/static/logo.png", -            background: "/images/city.jpg", -            redirectRootNoLogin: "/main/all", -            redirectRootLogin: "/main/friends", -            showInstanceSpecificPanel: true, -            scopeOptionsEnabled: false, -            formattingOptionsEnabled: false, +            alwaysShowSubjectInput: true, +            background: "/static/aurora_borealis.jpg",              collapseMessageWithSubject: false, +            disableChat: false, +            greentext: false, +            hideFilteredStatuses: false, +            hideMutedPosts: false,              hidePostStats: false, +            hideSitename: false,              hideUserStats: false, +            loginMethod: "password", +            logo: "/static/logo.png", +            logoMargin: ".1em", +            logoMask: true, +            minimalScopesMode: false, +            noAttachmentLinks: false, +            nsfwCensorImage: "", +            postContentType: "text/plain", +            redirectRootLogin: "/main/friends", +            redirectRootNoLogin: "/main/all",              scopeCopy: true, +            showFeaturesPanel: true, +            showInstanceSpecificPanel: false,              subjectLineBehavior: "email", -            alwaysShowSubjectInput: true, -            logoMask: false, -            logoMargin: ".1em", -            stickers: false, -            enableEmojiPicker: false +            theme: "pleroma-dark", +            webPushNotifications: false            }          ],          children: [            %{ -            key: :theme, -            type: :string, -            description: "Which theme to use, they are defined in styles.json", -            suggestions: ["pleroma-dark"] -          }, -          %{ -            key: :logo, -            type: :string, -            description: "URL of the logo, defaults to Pleroma's logo", -            suggestions: ["/static/logo.png"] +            key: :alwaysShowSubjectInput, +            label: "Always show subject input", +            type: :boolean, +            description: "When disabled, auto-hide the subject field if it's empty"            },            %{              key: :background, @@ -1146,46 +1148,35 @@ config :pleroma, :config_description, [              suggestions: ["/images/city.jpg"]            },            %{ -            key: :redirectRootNoLogin, -            label: "Redirect root no login", -            type: :string, -            description: -              "Relative URL which indicates where to redirect when a user isn't logged in", -            suggestions: ["/main/all"] -          }, -          %{ -            key: :redirectRootLogin, -            label: "Redirect root login", -            type: :string, +            key: :collapseMessageWithSubject, +            label: "Collapse message with subject", +            type: :boolean,              description: -              "Relative URL which indicates where to redirect when a user is logged in", -            suggestions: ["/main/friends"] +              "When a message has a subject (aka Content Warning), collapse it by default"            },            %{ -            key: :showInstanceSpecificPanel, -            label: "Show instance specific panel", +            key: :disableChat, +            label: "PleromaFE Chat",              type: :boolean, -            description: "Whenether to show the instance's specific panel" +            description: "Disables PleromaFE Chat component"            },            %{ -            key: :scopeOptionsEnabled, -            label: "Scope options enabled", +            key: :greentext, +            label: "Greentext",              type: :boolean, -            description: "Enable setting a notice visibility and subject/CW when posting" +            description: "Enables green text on lines prefixed with the > character."            },            %{ -            key: :formattingOptionsEnabled, -            label: "Formatting options enabled", +            key: :hideFilteredStatuses, +            label: "Hide Filtered Statuses",              type: :boolean, -            description: -              "Enable setting a formatting different than plain-text (ie. HTML, Markdown) when posting, relates to `:instance`, `allowed_post_formats`" +            description: "Hides filtered statuses from timelines."            },            %{ -            key: :collapseMessageWithSubject, -            label: "Collapse message with subject", +            key: :hideMutedPosts, +            label: "Hide Muted Posts",              type: :boolean, -            description: -              "When a message has a subject (aka Content Warning), collapse it by default" +            description: "Hides muted statuses from timelines."            },            %{              key: :hidePostStats, @@ -1194,6 +1185,12 @@ config :pleroma, :config_description, [              description: "Hide notices statistics (repeats, favorites, ...)"            },            %{ +            key: :hideSitename, +            label: "Hide Sitename", +            type: :boolean, +            description: "Hides instance name from PleromaFE banner." +          }, +          %{              key: :hideUserStats,              label: "Hide user stats",              type: :boolean, @@ -1201,26 +1198,19 @@ config :pleroma, :config_description, [                "Hide profile statistics (posts, posts per day, followers, followings, ...)"            },            %{ -            key: :scopeCopy, -            label: "Scope copy", -            type: :boolean, -            description: "Copy the scope (private/unlisted/public) in replies to posts by default" -          }, -          %{ -            key: :subjectLineBehavior, -            label: "Subject line behavior", +            key: :logo,              type: :string, -            description: "Allows changing the default behaviour of subject lines in replies. -          `email`: copy and preprend re:, as in email, -          `masto`: copy verbatim, as in Mastodon, -          `noop`: don't copy the subject.", -            suggestions: ["email", "masto", "noop"] +            description: "URL of the logo, defaults to Pleroma's logo", +            suggestions: ["/static/logo.png"]            },            %{ -            key: :alwaysShowSubjectInput, -            label: "Always show subject input", -            type: :boolean, -            description: "When disabled, auto-hide the subject field if it's empty" +            key: :logoMargin, +            label: "Logo margin", +            type: :string, +            description: +              "Allows you to adjust vertical margins between logo boundary and navbar borders. " <> +                "The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout.", +            suggestions: [".1em"]            },            %{              key: :logoMask, @@ -1231,24 +1221,78 @@ config :pleroma, :config_description, [                  "If you want a colorful logo you must disable logoMask."            },            %{ -            key: :logoMargin, -            label: "Logo margin", +            key: :minimalScopesMode, +            label: "Minimal scopes mode", +            type: :boolean, +            description: +              "Limit scope selection to Direct, User default, and Scope of post replying to. " <> +                "Also prevents replying to a DM with a public post from PleromaFE." +          }, +          %{ +            key: :nsfwCensorImage, +            label: "NSFW Censor Image",              type: :string,              description: -              "Allows you to adjust vertical margins between logo boundary and navbar borders. " <> -                "The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout.", -            suggestions: [".1em"] +              "URL of the image to use for hiding NSFW media attachments in the timeline.", +            suggestions: ["/static/img/nsfw.png"] +          }, +          %{ +            key: :postContentType, +            label: "Post Content Type", +            type: {:dropdown, :atom}, +            description: "Default post formatting option.", +            suggestions: ["text/plain", "text/html", "text/markdown", "text/bbcode"] +          }, +          %{ +            key: :redirectRootNoLogin, +            label: "Redirect root no login", +            type: :string, +            description: +              "Relative URL which indicates where to redirect when a user isn't logged in", +            suggestions: ["/main/all"]            },            %{ -            key: :stickers, +            key: :redirectRootLogin, +            label: "Redirect root login", +            type: :string, +            description: +              "Relative URL which indicates where to redirect when a user is logged in", +            suggestions: ["/main/friends"] +          }, +          %{ +            key: :scopeCopy, +            label: "Scope copy", +            type: :boolean, +            description: "Copy the scope (private/unlisted/public) in replies to posts by default" +          }, +          %{ +            key: :showFeaturesPanel, +            label: "Show instance features panel",              type: :boolean, -            description: "Enables stickers." +            description: +              "Enables panel displaying functionality of the instance on the About page."            },            %{ -            key: :enableEmojiPicker, -            label: "Emoji picker", +            key: :showInstanceSpecificPanel, +            label: "Show instance specific panel",              type: :boolean, -            description: "Enables emoji picker." +            description: "Whether to show the instance's custom panel" +          }, +          %{ +            key: :subjectLineBehavior, +            label: "Subject line behavior", +            type: :string, +            description: "Allows changing the default behaviour of subject lines in replies. +          `email`: copy and preprend re:, as in email, +          `masto`: copy verbatim, as in Mastodon, +          `noop`: don't copy the subject.", +            suggestions: ["email", "masto", "noop"] +          }, +          %{ +            key: :theme, +            type: :string, +            description: "Which theme to use. Available themes are defined in styles.json", +            suggestions: ["pleroma-dark"]            }          ]        }, diff --git a/lib/mix/tasks/pleroma/digest.ex b/lib/mix/tasks/pleroma/digest.ex index 7d09e70c5..3595f912d 100644 --- a/lib/mix/tasks/pleroma/digest.ex +++ b/lib/mix/tasks/pleroma/digest.ex @@ -1,5 +1,6 @@  defmodule Mix.Tasks.Pleroma.Digest do    use Mix.Task +  import Mix.Pleroma    @shortdoc "Manages digest emails"    @moduledoc File.read!("docs/administration/CLI_tasks/digest.md") @@ -22,12 +23,10 @@ defmodule Mix.Tasks.Pleroma.Digest do      with %Swoosh.Email{} = email <- Pleroma.Emails.UserEmail.digest_email(patched_user) do        {:ok, _} = Pleroma.Emails.Mailer.deliver(email) -      Mix.shell().info("Digest email have been sent to #{nickname} (#{user.email})") +      shell_info("Digest email have been sent to #{nickname} (#{user.email})")      else        _ -> -        Mix.shell().info( -          "Cound't find any mentions for #{nickname} since #{last_digest_emailed_at}" -        ) +        shell_info("Cound't find any mentions for #{nickname} since #{last_digest_emailed_at}")      end    end  end diff --git a/lib/pleroma/config/config_db.ex b/lib/pleroma/config/config_db.ex index 4097ee5b7..2b43d4c36 100644 --- a/lib/pleroma/config/config_db.ex +++ b/lib/pleroma/config/config_db.ex @@ -278,6 +278,8 @@ defmodule Pleroma.ConfigDB do      }    end +  defp do_convert({:partial_chain, entity}), do: %{"tuple" => [":partial_chain", inspect(entity)]} +    defp do_convert(entity) when is_tuple(entity) do      value =        entity @@ -321,6 +323,15 @@ defmodule Pleroma.ConfigDB do      {:proxy_url, {do_transform_string(type), parse_host(host), port}}    end +  defp do_transform(%{"tuple" => [":partial_chain", entity]}) do +    {partial_chain, []} = +      entity +      |> String.replace(~r/[^\w|^{:,[|^,|^[|^\]^}|^\/|^\.|^"]^\s/, "") +      |> Code.eval_string() + +    {:partial_chain, partial_chain} +  end +    defp do_transform(%{"tuple" => entity}) do      Enum.reduce(entity, {}, fn val, acc -> Tuple.append(acc, do_transform(val)) end)    end diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 70069d6f9..988bab882 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -367,15 +367,18 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do        title: "AccountCreateRequest",        description: "POST body for creating an account",        type: :object, +      required: [:username, :password, :agreement],        properties: %{          reason: %Schema{            type: :string, +          nullable: true,            description:              "Text that will be reviewed by moderators if registrations require manual approval"          },          username: %Schema{type: :string, description: "The desired username for the account"},          email: %Schema{            type: :string, +          nullable: true,            description:              "The email address to be used for login. Required when `account_activation_required` is enabled.",            format: :email @@ -392,23 +395,33 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do          },          locale: %Schema{            type: :string, +          nullable: true,            description: "The language of the confirmation email that will be sent"          },          # Pleroma-specific properties: -        fullname: %Schema{type: :string, description: "Full name"}, -        bio: %Schema{type: :string, description: "Bio", default: ""}, +        fullname: %Schema{type: :string, nullable: true, description: "Full name"}, +        bio: %Schema{type: :string, description: "Bio", nullable: true, default: ""},          captcha_solution: %Schema{            type: :string, +          nullable: true,            description: "Provider-specific captcha solution"          }, -        captcha_token: %Schema{type: :string, description: "Provider-specific captcha token"}, -        captcha_answer_data: %Schema{type: :string, description: "Provider-specific captcha data"}, +        captcha_token: %Schema{ +          type: :string, +          nullable: true, +          description: "Provider-specific captcha token" +        }, +        captcha_answer_data: %Schema{ +          type: :string, +          nullable: true, +          description: "Provider-specific captcha data" +        },          token: %Schema{            type: :string, +          nullable: true,            description: "Invite token required when the registrations aren't public"          }        }, -      required: [:username, :password, :agreement],        example: %{          "username" => "cofe",          "email" => "cofe@example.com", @@ -447,28 +460,34 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do        properties: %{          bot: %Schema{            type: :boolean, +          nullable: true,            description: "Whether the account has a bot flag."          },          display_name: %Schema{            type: :string, +          nullable: true,            description: "The display name to use for the profile."          },          note: %Schema{type: :string, description: "The account bio."},          avatar: %Schema{            type: :string, +          nullable: true,            description: "Avatar image encoded using multipart/form-data",            format: :binary          },          header: %Schema{            type: :string, +          nullable: true,            description: "Header image encoded using multipart/form-data",            format: :binary          },          locked: %Schema{            type: :boolean, +          nullable: true,            description: "Whether manual approval of follow requests is required."          },          fields_attributes: %Schema{ +          nullable: true,            oneOf: [              %Schema{type: :array, items: attribute_field()},              %Schema{type: :object, additionalProperties: %Schema{type: attribute_field()}} @@ -488,47 +507,65 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do          # Pleroma-specific fields          no_rich_text: %Schema{            type: :boolean, +          nullable: true,            description: "html tags are stripped from all statuses requested from the API"          }, -        hide_followers: %Schema{type: :boolean, description: "user's followers will be hidden"}, -        hide_follows: %Schema{type: :boolean, description: "user's follows will be hidden"}, +        hide_followers: %Schema{ +          type: :boolean, +          nullable: true, +          description: "user's followers will be hidden" +        }, +        hide_follows: %Schema{ +          type: :boolean, +          nullable: true, +          description: "user's follows will be hidden" +        },          hide_followers_count: %Schema{            type: :boolean, +          nullable: true,            description: "user's follower count will be hidden"          },          hide_follows_count: %Schema{            type: :boolean, +          nullable: true,            description: "user's follow count will be hidden"          },          hide_favorites: %Schema{            type: :boolean, +          nullable: true,            description: "user's favorites timeline will be hidden"          },          show_role: %Schema{            type: :boolean, +          nullable: true,            description: "user's role (e.g admin, moderator) will be exposed to anyone in the          API"          },          default_scope: VisibilityScope,          pleroma_settings_store: %Schema{            type: :object, +          nullable: true,            description: "Opaque user settings to be saved on the backend."          },          skip_thread_containment: %Schema{            type: :boolean, +          nullable: true,            description: "Skip filtering out broken threads"          },          allow_following_move: %Schema{            type: :boolean, +          nullable: true,            description: "Allows automatically follow moved following accounts"          },          pleroma_background_image: %Schema{            type: :string, +          nullable: true,            description: "Sets the background image of the user.",            format: :binary          },          discoverable: %Schema{            type: :boolean, +          nullable: true,            description:              "Discovery of this account in search results and other services is allowed."          }, @@ -624,7 +661,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do        description: "POST body for muting an account",        type: :object,        properties: %{ -        uri: %Schema{type: :string, format: :uri} +        uri: %Schema{type: :string, nullable: true, format: :uri}        },        required: [:uri]      } @@ -638,6 +675,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do        properties: %{          notifications: %Schema{            type: :boolean, +          nullable: true,            description: "Mute notifications in addition to statuses? Defaults to true.",            default: true          } diff --git a/lib/pleroma/web/api_spec/operations/app_operation.ex b/lib/pleroma/web/api_spec/operations/app_operation.ex index f6ccd073f..ae01cbbec 100644 --- a/lib/pleroma/web/api_spec/operations/app_operation.ex +++ b/lib/pleroma/web/api_spec/operations/app_operation.ex @@ -105,7 +105,11 @@ defmodule Pleroma.Web.ApiSpec.AppOperation do            description: "Space separated list of scopes",            default: "read"          }, -        website: %Schema{type: :string, description: "A URL to the homepage of your app"} +        website: %Schema{ +          type: :string, +          nullable: true, +          description: "A URL to the homepage of your app" +        }        },        required: [:client_name, :redirect_uris],        example: %{ diff --git a/lib/pleroma/web/api_spec/operations/filter_operation.ex b/lib/pleroma/web/api_spec/operations/filter_operation.ex index 53e57b46b..7310c1c4d 100644 --- a/lib/pleroma/web/api_spec/operations/filter_operation.ex +++ b/lib/pleroma/web/api_spec/operations/filter_operation.ex @@ -199,12 +199,14 @@ defmodule Pleroma.Web.ApiSpec.FilterOperation do              "Array of enumerable strings `home`, `notifications`, `public`, `thread`. At least one context must be specified."          },          irreversible: %Schema{ -          type: :bolean, +          type: :boolean, +          nullable: true,            description:              "Should the server irreversibly drop matching entities from home and notifications?"          },          whole_word: %Schema{ -          type: :bolean, +          type: :boolean, +          nullable: true,            description: "Consider word boundaries?",            default: true          } diff --git a/lib/pleroma/web/api_spec/operations/marker_operation.ex b/lib/pleroma/web/api_spec/operations/marker_operation.ex index 06620492a..714ef1f99 100644 --- a/lib/pleroma/web/api_spec/operations/marker_operation.ex +++ b/lib/pleroma/web/api_spec/operations/marker_operation.ex @@ -110,14 +110,16 @@ defmodule Pleroma.Web.ApiSpec.MarkerOperation do        properties: %{          notifications: %Schema{            type: :object, +          nullable: true,            properties: %{ -            last_read_id: %Schema{type: :string} +            last_read_id: %Schema{nullable: true, type: :string}            }          },          home: %Schema{            type: :object, +          nullable: true,            properties: %{ -            last_read_id: %Schema{type: :string} +            last_read_id: %Schema{nullable: true, type: :string}            }          }        }, diff --git a/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex index 435991037..90922c064 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex @@ -143,6 +143,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaAccountOperation do        type: :object,        properties: %{          img: %Schema{ +          nullable: true,            type: :string,            format: :binary,            description: "Image encoded using `multipart/form-data` or an empty string to clear" @@ -158,6 +159,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaAccountOperation do        properties: %{          banner: %Schema{            type: :string, +          nullable: true,            format: :binary,            description: "Image encoded using `multipart/form-data` or an empty string to clear"          } diff --git a/lib/pleroma/web/api_spec/operations/report_operation.ex b/lib/pleroma/web/api_spec/operations/report_operation.ex index da4d50703..882177c96 100644 --- a/lib/pleroma/web/api_spec/operations/report_operation.ex +++ b/lib/pleroma/web/api_spec/operations/report_operation.ex @@ -37,15 +37,18 @@ defmodule Pleroma.Web.ApiSpec.ReportOperation do          account_id: %Schema{type: :string, description: "ID of the account to report"},          status_ids: %Schema{            type: :array, +          nullable: true,            items: %Schema{type: :string},            description: "Array of Statuses to attach to the report, for context"          },          comment: %Schema{            type: :string, +          nullable: true,            description: "Reason for the report"          },          forward: %Schema{            type: :boolean, +          nullable: true,            default: false,            description:              "If the account is remote, should the report be forwarded to the remote admin?" diff --git a/lib/pleroma/web/api_spec/operations/status_operation.ex b/lib/pleroma/web/api_spec/operations/status_operation.ex index 561db3bce..fc2909d8c 100644 --- a/lib/pleroma/web/api_spec/operations/status_operation.ex +++ b/lib/pleroma/web/api_spec/operations/status_operation.ex @@ -371,15 +371,18 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do        properties: %{          status: %Schema{            type: :string, +          nullable: true,            description:              "Text content of the status. If `media_ids` is provided, this becomes optional. Attaching a `poll` is optional while `status` is provided."          },          media_ids: %Schema{ +          nullable: true,            type: :array,            items: %Schema{type: :string},            description: "Array of Attachment ids to be attached as media."          },          poll: %Schema{ +          nullable: true,            type: :object,            required: [:options],            properties: %{ @@ -390,26 +393,35 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do              },              expires_in: %Schema{                type: :integer, +              nullable: true,                description:                  "Duration the poll should be open, in seconds. Must be provided with `poll[options]`"              }, -            multiple: %Schema{type: :boolean, description: "Allow multiple choices?"}, +            multiple: %Schema{ +              type: :boolean, +              nullable: true, +              description: "Allow multiple choices?" +            },              hide_totals: %Schema{                type: :boolean, +              nullable: true,                description: "Hide vote counts until the poll ends?"              }            }          },          in_reply_to_id: %Schema{ +          nullable: true,            allOf: [FlakeID],            description: "ID of the status being replied to, if status is a reply"          },          sensitive: %Schema{            type: :boolean, +          nullable: true,            description: "Mark status and attached media as sensitive?"          },          spoiler_text: %Schema{            type: :string, +          nullable: true,            description:              "Text to be shown as a warning or subject before the actual content. Statuses are generally collapsed behind this field."          }, @@ -420,25 +432,33 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do            description:              "ISO 8601 Datetime at which to schedule a status. Providing this paramter will cause ScheduledStatus to be returned instead of Status. Must be at least 5 minutes in the future."          }, -        language: %Schema{type: :string, description: "ISO 639 language code for this status."}, +        language: %Schema{ +          type: :string, +          nullable: true, +          description: "ISO 639 language code for this status." +        },          # Pleroma-specific properties:          preview: %Schema{            type: :boolean, +          nullable: true,            description:              "If set to `true` the post won't be actually posted, but the status entitiy would still be rendered back. This could be useful for previewing rich text/custom emoji, for example"          },          content_type: %Schema{            type: :string, +          nullable: true,            description:              "The MIME type of the status, it is transformed into HTML by the backend. You can get the list of the supported MIME types with the nodeinfo endpoint."          },          to: %Schema{            type: :array, +          nullable: true,            items: %Schema{type: :string},            description:              "A list of nicknames (like `lain@soykaf.club` or `lain` on the local server) that will be used to determine who is going to be addressed by this post. Using this will disable the implicit addressing by mentioned names in the `status` body, only the people in the `to` list will be addressed. The normal rules for for post visibility are not affected by this and will still apply"          },          visibility: %Schema{ +          nullable: true,            anyOf: [              VisibilityScope,              %Schema{type: :string, description: "`list:LIST_ID`", example: "LIST:123"} @@ -447,11 +467,13 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do              "Visibility of the posted status. Besides standard MastoAPI values (`direct`, `private`, `unlisted` or `public`) it can be used to address a List by setting it to `list:LIST_ID`"          },          expires_in: %Schema{ +          nullable: true,            type: :integer,            description:              "The number of seconds the posted activity should expire in. When a posted activity expires it will be deleted from the server, and a delete request for it will be federated. This needs to be longer than an hour."          },          in_reply_to_conversation_id: %Schema{ +          nullable: true,            type: :string,            description:              "Will reply to a given conversation, addressing only the people who are part of the recipient set of that conversation. Sets the visibility to `direct`." diff --git a/lib/pleroma/web/api_spec/operations/subscription_operation.ex b/lib/pleroma/web/api_spec/operations/subscription_operation.ex index 663b8fa11..cf6dcb068 100644 --- a/lib/pleroma/web/api_spec/operations/subscription_operation.ex +++ b/lib/pleroma/web/api_spec/operations/subscription_operation.ex @@ -109,19 +109,38 @@ defmodule Pleroma.Web.ApiSpec.SubscriptionOperation do            required: [:endpoint, :keys]          },          data: %Schema{ +          nullable: true,            type: :object,            properties: %{              alerts: %Schema{ +              nullable: true,                type: :object,                properties: %{ -                follow: %Schema{type: :boolean, description: "Receive follow notifications?"}, +                follow: %Schema{ +                  type: :boolean, +                  nullable: true, +                  description: "Receive follow notifications?" +                },                  favourite: %Schema{                    type: :boolean, +                  nullable: true,                    description: "Receive favourite notifications?"                  }, -                reblog: %Schema{type: :boolean, description: "Receive reblog notifications?"}, -                mention: %Schema{type: :boolean, description: "Receive mention notifications?"}, -                poll: %Schema{type: :boolean, description: "Receive poll notifications?"} +                reblog: %Schema{ +                  type: :boolean, +                  nullable: true, +                  description: "Receive reblog notifications?" +                }, +                mention: %Schema{ +                  type: :boolean, +                  nullable: true, +                  description: "Receive mention notifications?" +                }, +                poll: %Schema{ +                  type: :boolean, +                  nullable: true, +                  description: "Receive poll notifications?" +                }                }              }            } @@ -154,19 +173,38 @@ defmodule Pleroma.Web.ApiSpec.SubscriptionOperation do        type: :object,        properties: %{          data: %Schema{ +          nullable: true,            type: :object,            properties: %{              alerts: %Schema{ +              nullable: true,                type: :object,                properties: %{ -                follow: %Schema{type: :boolean, description: "Receive follow notifications?"}, +                follow: %Schema{ +                  type: :boolean, +                  nullable: true, +                  description: "Receive follow notifications?" +                },                  favourite: %Schema{                    type: :boolean, +                  nullable: true,                    description: "Receive favourite notifications?"                  }, -                reblog: %Schema{type: :boolean, description: "Receive reblog notifications?"}, -                mention: %Schema{type: :boolean, description: "Receive mention notifications?"}, -                poll: %Schema{type: :boolean, description: "Receive poll notifications?"} +                reblog: %Schema{ +                  type: :boolean, +                  nullable: true, +                  description: "Receive reblog notifications?" +                }, +                mention: %Schema{ +                  type: :boolean, +                  nullable: true, +                  description: "Receive mention notifications?" +                }, +                poll: %Schema{ +                  type: :boolean, +                  nullable: true, +                  description: "Receive poll notifications?" +                }                }              }            } diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 601caeb46..7c94f16b6 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -25,10 +25,21 @@ defmodule Pleroma.Web.CommonAPI do    require Logger    def unblock(blocker, blocked) do -    with %Activity{} = block <- Utils.fetch_latest_block(blocker, blocked), +    with {_, %Activity{} = block} <- {:fetch_block, Utils.fetch_latest_block(blocker, blocked)},           {:ok, unblock_data, _} <- Builder.undo(blocker, block),           {:ok, unblock, _} <- Pipeline.common_pipeline(unblock_data, local: true) do        {:ok, unblock} +    else +      {:fetch_block, nil} -> +        if User.blocks?(blocker, blocked) do +          User.unblock(blocker, blocked) +          {:ok, :no_activity} +        else +          {:error, :not_blocking} +        end + +      e -> +        e      end    end diff --git a/priv/gettext/pl/LC_MESSAGES/errors.po b/priv/gettext/pl/LC_MESSAGES/errors.po new file mode 100644 index 000000000..af9e214c6 --- /dev/null +++ b/priv/gettext/pl/LC_MESSAGES/errors.po @@ -0,0 +1,587 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-13 16:37+0000\n" +"PO-Revision-Date: 2020-05-14 14:37+0000\n" +"Last-Translator: Michał Sidor <pleromeme@meekchopp.es>\n" +"Language-Team: Polish <https://translate.pleroma.social/projects/pleroma/" +"pleroma/pl/>\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.0.4\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 +msgid "can't be blank" +msgstr "nie może być pusty" + +## From Ecto.Changeset.unique_constraint/3 +msgid "has already been taken" +msgstr "jest już zajęty" + +## From Ecto.Changeset.put_change/3 +msgid "is invalid" +msgstr "jest nieprawidłowy" + +## From Ecto.Changeset.validate_format/3 +msgid "has invalid format" +msgstr "ma niepoprawny format" + +## From Ecto.Changeset.validate_subset/3 +msgid "has an invalid entry" +msgstr "ma niepoprawny wpis" + +## From Ecto.Changeset.validate_exclusion/3 +msgid "is reserved" +msgstr "" + +## From Ecto.Changeset.validate_confirmation/3 +msgid "does not match confirmation" +msgstr "" + +## From Ecto.Changeset.no_assoc_constraint/3 +msgid "is still associated with this entry" +msgstr "" + +msgid "are still associated with this entry" +msgstr "" + +## From Ecto.Changeset.validate_length/3 +msgid "should be %{count} character(s)" +msgid_plural "should be %{count} character(s)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "should have %{count} item(s)" +msgid_plural "should have %{count} item(s)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "should be at least %{count} character(s)" +msgid_plural "should be at least %{count} character(s)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "should have at least %{count} item(s)" +msgid_plural "should have at least %{count} item(s)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "should be at most %{count} character(s)" +msgid_plural "should be at most %{count} character(s)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "should have at most %{count} item(s)" +msgid_plural "should have at most %{count} item(s)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +## From Ecto.Changeset.validate_number/3 +msgid "must be less than %{number}" +msgstr "" + +msgid "must be greater than %{number}" +msgstr "" + +msgid "must be less than or equal to %{number}" +msgstr "" + +msgid "must be greater than or equal to %{number}" +msgstr "" + +msgid "must be equal to %{number}" +msgstr "" + +#: lib/pleroma/web/common_api/common_api.ex:421 +#, elixir-format +msgid "Account not found" +msgstr "Nie znaleziono konta" + +#: lib/pleroma/web/common_api/common_api.ex:249 +#, elixir-format +msgid "Already voted" +msgstr "Już zagłosowano" + +#: lib/pleroma/web/oauth/oauth_controller.ex:360 +#, elixir-format +msgid "Bad request" +msgstr "Nieprawidłowe żądanie" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:425 +#, elixir-format +msgid "Can't delete object" +msgstr "Nie można usunąć obiektu" + +#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:196 +#, elixir-format +msgid "Can't delete this post" +msgstr "Nie udało się usunąć tego statusu" + +#: lib/pleroma/web/controller_helper.ex:95 +#: lib/pleroma/web/controller_helper.ex:101 +#, elixir-format +msgid "Can't display this activity" +msgstr "Nie można wyświetlić tej aktywności" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:227 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:254 +#, elixir-format +msgid "Can't find user" +msgstr "Nie znaleziono użytkownika" + +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:114 +#, elixir-format +msgid "Can't get favorites" +msgstr "" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:437 +#, elixir-format +msgid "Can't like object" +msgstr "Nie udało się polubić obiektu" + +#: lib/pleroma/web/common_api/utils.ex:556 +#, elixir-format +msgid "Cannot post an empty status without attachments" +msgstr "Nie można opublikować pustego statusu bez załączników" + +#: lib/pleroma/web/common_api/utils.ex:504 +#, elixir-format +msgid "Comment must be up to %{max_size} characters" +msgstr "Komentarz może mieć co najwyżej %{max_size} znaków" + +#: lib/pleroma/config/config_db.ex:222 +#, elixir-format +msgid "Config with params %{params} not found" +msgstr "" + +#: lib/pleroma/web/common_api/common_api.ex:95 +#, elixir-format +msgid "Could not delete" +msgstr "Nie udało się usunąć" + +#: lib/pleroma/web/common_api/common_api.ex:141 +#, elixir-format +msgid "Could not favorite" +msgstr "Nie udało się dodać do ulubionych" + +#: lib/pleroma/web/common_api/common_api.ex:370 +#, elixir-format +msgid "Could not pin" +msgstr "Nie udało się przypiąć" + +#: lib/pleroma/web/common_api/common_api.ex:112 +#, elixir-format +msgid "Could not repeat" +msgstr "Nie udało się powtórzyć" + +#: lib/pleroma/web/common_api/common_api.ex:188 +#, elixir-format +msgid "Could not unfavorite" +msgstr "Nie udało się usunąć z ulubionych" + +#: lib/pleroma/web/common_api/common_api.ex:380 +#, elixir-format +msgid "Could not unpin" +msgstr "Nie udało się odpiąć" + +#: lib/pleroma/web/common_api/common_api.ex:126 +#, elixir-format +msgid "Could not unrepeat" +msgstr "Nie udało się cofnąć powtórzenia" + +#: lib/pleroma/web/common_api/common_api.ex:428 +#: lib/pleroma/web/common_api/common_api.ex:437 +#, elixir-format +msgid "Could not update state" +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:202 +#, elixir-format +msgid "Error." +msgstr "" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:106 +#, elixir-format +msgid "Invalid CAPTCHA" +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:117 +#: lib/pleroma/web/oauth/oauth_controller.ex:569 +#, elixir-format +msgid "Invalid credentials" +msgstr "" + +#: lib/pleroma/plugs/ensure_authenticated_plug.ex:38 +#, elixir-format +msgid "Invalid credentials." +msgstr "" + +#: lib/pleroma/web/common_api/common_api.ex:265 +#, elixir-format +msgid "Invalid indices" +msgstr "" + +#: lib/pleroma/web/admin_api/admin_api_controller.ex:1147 +#, elixir-format +msgid "Invalid parameters" +msgstr "" + +#: lib/pleroma/web/common_api/utils.ex:411 +#, elixir-format +msgid "Invalid password." +msgstr "Nieprawidłowe hasło." + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:187 +#, elixir-format +msgid "Invalid request" +msgstr "Nieprawidłowe żądanie" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:109 +#, elixir-format +msgid "Kocaptcha service unavailable" +msgstr "Usługa Kocaptcha niedostępna" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:113 +#, elixir-format +msgid "Missing parameters" +msgstr "Brakujące parametry" + +#: lib/pleroma/web/common_api/utils.ex:540 +#, elixir-format +msgid "No such conversation" +msgstr "Nie ma takiej rozmowy" + +#: lib/pleroma/web/admin_api/admin_api_controller.ex:439 +#: lib/pleroma/web/admin_api/admin_api_controller.ex:465 lib/pleroma/web/admin_api/admin_api_controller.ex:507 +#, elixir-format +msgid "No such permission_group" +msgstr "Nie ma takiej grupy uprawnień" + +#: lib/pleroma/plugs/uploaded_media.ex:74 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:485 lib/pleroma/web/admin_api/admin_api_controller.ex:1135 +#: lib/pleroma/web/feed/user_controller.ex:73 lib/pleroma/web/ostatus/ostatus_controller.ex:143 +#, elixir-format +msgid "Not found" +msgstr "Nie znaleziono" + +#: lib/pleroma/web/common_api/common_api.ex:241 +#, elixir-format +msgid "Poll's author can't vote" +msgstr "Autor ankiety nie może głosować" + +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:20 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:37 lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:49 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:50 lib/pleroma/web/mastodon_api/controllers/status_controller.ex:290 +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:71 +#, elixir-format +msgid "Record not found" +msgstr "Nie znaleziono rekordu" + +#: lib/pleroma/web/admin_api/admin_api_controller.ex:1153 +#: lib/pleroma/web/feed/user_controller.ex:79 lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:32 +#: lib/pleroma/web/ostatus/ostatus_controller.ex:149 +#, elixir-format +msgid "Something went wrong" +msgstr "Coś się zepsuło" + +#: lib/pleroma/web/common_api/activity_draft.ex:107 +#, elixir-format +msgid "The message visibility must be direct" +msgstr "" + +#: lib/pleroma/web/common_api/utils.ex:566 +#, elixir-format +msgid "The status is over the character limit" +msgstr "Ten status przekracza limit znaków" + +#: lib/pleroma/plugs/ensure_public_or_authenticated_plug.ex:31 +#, elixir-format +msgid "This resource requires authentication." +msgstr "" + +#: lib/pleroma/plugs/rate_limiter/rate_limiter.ex:206 +#, elixir-format +msgid "Throttled" +msgstr "" + +#: lib/pleroma/web/common_api/common_api.ex:266 +#, elixir-format +msgid "Too many choices" +msgstr "" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:442 +#, elixir-format +msgid "Unhandled activity type" +msgstr "Nieobsługiwany typ aktywności" + +#: lib/pleroma/web/admin_api/admin_api_controller.ex:536 +#, elixir-format +msgid "You can't revoke your own admin status." +msgstr "Nie możesz odebrać samemu sobie statusu administratora." + +#: lib/pleroma/web/oauth/oauth_controller.ex:218 +#: lib/pleroma/web/oauth/oauth_controller.ex:309 +#, elixir-format +msgid "Your account is currently disabled" +msgstr "Twoje konto jest obecnie nieaktywne" + +#: lib/pleroma/web/oauth/oauth_controller.ex:180 +#: lib/pleroma/web/oauth/oauth_controller.ex:332 +#, elixir-format +msgid "Your login is missing a confirmed e-mail address" +msgstr "" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:389 +#, elixir-format +msgid "can't read inbox of %{nickname} as %{as_nickname}" +msgstr "" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:472 +#, elixir-format +msgid "can't update outbox of %{nickname} as %{as_nickname}" +msgstr "" + +#: lib/pleroma/web/common_api/common_api.ex:388 +#, elixir-format +msgid "conversation is already muted" +msgstr "rozmowa jest już wyciszona" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:316 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:491 +#, elixir-format +msgid "error" +msgstr "błąd" + +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:29 +#, elixir-format +msgid "mascots can only be images" +msgstr "maskotki muszą być obrazkami" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:60 +#, elixir-format +msgid "not found" +msgstr "nie znaleziono" + +#: lib/pleroma/web/oauth/oauth_controller.ex:395 +#, elixir-format +msgid "Bad OAuth request." +msgstr "Niepoprawne żądanie OAuth." + +#: lib/pleroma/web/twitter_api/twitter_api.ex:115 +#, elixir-format +msgid "CAPTCHA already used" +msgstr "Zużyta CAPTCHA" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:112 +#, elixir-format +msgid "CAPTCHA expired" +msgstr "CAPTCHA wygasła" + +#: lib/pleroma/plugs/uploaded_media.ex:55 +#, elixir-format +msgid "Failed" +msgstr "Nie udało się" + +#: lib/pleroma/web/oauth/oauth_controller.ex:411 +#, elixir-format +msgid "Failed to authenticate: %{message}." +msgstr "" + +#: lib/pleroma/web/oauth/oauth_controller.ex:442 +#, elixir-format +msgid "Failed to set up user account." +msgstr "" + +#: lib/pleroma/plugs/oauth_scopes_plug.ex:38 +#, elixir-format +msgid "Insufficient permissions: %{permissions}." +msgstr "Niewystarczające uprawnienia: %{permissions}." + +#: lib/pleroma/plugs/uploaded_media.ex:94 +#, elixir-format +msgid "Internal Error" +msgstr "Błąd wewnętrzny" + +#: lib/pleroma/web/oauth/fallback_controller.ex:22 +#: lib/pleroma/web/oauth/fallback_controller.ex:29 +#, elixir-format +msgid "Invalid Username/Password" +msgstr "Nieprawidłowa nazwa użytkownika lub hasło" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:118 +#, elixir-format +msgid "Invalid answer data" +msgstr "" + +#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:128 +#, elixir-format +msgid "Nodeinfo schema version not handled" +msgstr "Nieobsługiwana wersja schematu Nodeinfo" + +#: lib/pleroma/web/oauth/oauth_controller.ex:169 +#, elixir-format +msgid "This action is outside the authorized scopes" +msgstr "" + +#: lib/pleroma/web/oauth/fallback_controller.ex:14 +#, elixir-format +msgid "Unknown error, please check the details and try again." +msgstr "Nieznany błąd, sprawdź szczegóły i spróbuj ponownie." + +#: lib/pleroma/web/oauth/oauth_controller.ex:116 +#: lib/pleroma/web/oauth/oauth_controller.ex:155 +#, elixir-format +msgid "Unlisted redirect_uri." +msgstr "" + +#: lib/pleroma/web/oauth/oauth_controller.ex:391 +#, elixir-format +msgid "Unsupported OAuth provider: %{provider}." +msgstr "Nieobsługiwany dostawca OAuth: %{provider}." + +#: lib/pleroma/uploaders/uploader.ex:72 +#, elixir-format +msgid "Uploader callback timeout" +msgstr "" + +#: lib/pleroma/web/uploader_controller.ex:23 +#, elixir-format +msgid "bad request" +msgstr "nieprawidłowe żądanie" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:103 +#, elixir-format +msgid "CAPTCHA Error" +msgstr "Błąd CAPTCHA" + +#: lib/pleroma/web/common_api/common_api.ex:200 +#, elixir-format +msgid "Could not add reaction emoji" +msgstr "" + +#: lib/pleroma/web/common_api/common_api.ex:211 +#, elixir-format +msgid "Could not remove reaction emoji" +msgstr "" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:129 +#, elixir-format +msgid "Invalid CAPTCHA (Missing parameter: %{name})" +msgstr "Nieprawidłowa CAPTCHA (Brakujący parametr: %{name})" + +#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:92 +#, elixir-format +msgid "List not found" +msgstr "Nie znaleziono listy" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:124 +#, elixir-format +msgid "Missing parameter: %{name}" +msgstr "Brakujący parametr: %{name}" + +#: lib/pleroma/web/oauth/oauth_controller.ex:207 +#: lib/pleroma/web/oauth/oauth_controller.ex:322 +#, elixir-format +msgid "Password reset is required" +msgstr "Wymagany reset hasła" + +#: lib/pleroma/tests/auth_test_controller.ex:9 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 lib/pleroma/web/admin_api/admin_api_controller.ex:6 +#: lib/pleroma/web/controller_helper.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 +#: lib/pleroma/web/mailer/subscription_controller.ex:2 lib/pleroma/web/masto_fe_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/app_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/auth_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/filter_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/instance_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/marker_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex:14 lib/pleroma/web/mastodon_api/controllers/media_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/notification_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/report_controller.ex:8 lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/search_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:7 lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:6 lib/pleroma/web/media_proxy/media_proxy_controller.ex:6 +#: lib/pleroma/web/mongooseim/mongoose_im_controller.ex:6 lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:6 +#: lib/pleroma/web/oauth/fallback_controller.ex:6 lib/pleroma/web/oauth/mfa_controller.ex:10 +#: lib/pleroma/web/oauth/oauth_controller.ex:6 lib/pleroma/web/ostatus/ostatus_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:2 +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex:7 lib/pleroma/web/static_fe/static_fe_controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/password_controller.ex:10 lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:6 lib/pleroma/web/twitter_api/twitter_api_controller.ex:6 +#: lib/pleroma/web/uploader_controller.ex:6 lib/pleroma/web/web_finger/web_finger_controller.ex:6 +#, elixir-format +msgid "Security violation: OAuth scopes check was neither handled nor explicitly skipped." +msgstr "" + +#: lib/pleroma/plugs/ensure_authenticated_plug.ex:28 +#, elixir-format +msgid "Two-factor authentication enabled, you must use a access token." +msgstr "Uwierzytelnienie dwuskładnikowe jest włączone, musisz użyć tokenu." + +#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:210 +#, elixir-format +msgid "Unexpected error occurred while adding file to pack." +msgstr "Nieoczekiwany błąd podczas dodawania pliku do paczki." + +#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:138 +#, elixir-format +msgid "Unexpected error occurred while creating pack." +msgstr "Nieoczekiwany błąd podczas tworzenia paczki." + +#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:278 +#, elixir-format +msgid "Unexpected error occurred while removing file from pack." +msgstr "Nieoczekiwany błąd podczas usuwania pliku z paczki." + +#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:250 +#, elixir-format +msgid "Unexpected error occurred while updating file in pack." +msgstr "Nieoczekiwany błąd podczas zmieniania pliku w paczce." + +#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:179 +#, elixir-format +msgid "Unexpected error occurred while updating pack metadata." +msgstr "Nieoczekiwany błąd podczas zmieniania metadanych paczki." + +#: lib/pleroma/plugs/user_is_admin_plug.ex:40 +#, elixir-format +msgid "User is not an admin or OAuth admin scope is not granted." +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 +#, elixir-format +msgid "Web push subscription is disabled on this Pleroma instance" +msgstr "Powiadomienia web push są wyłączone na tej instancji Pleromy" + +#: lib/pleroma/web/admin_api/admin_api_controller.ex:502 +#, elixir-format +msgid "You can't revoke your own admin/moderator status." +msgstr "Nie możesz odebrać samemu sobie statusu administratora/moderatora." + +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:105 +#, elixir-format +msgid "authorization required for timeline view" +msgstr "logowanie wymagane do przeglądania osi czasu" diff --git a/priv/static/static/config.json b/priv/static/static/config.json index c82678699..727dde73b 100644 --- a/priv/static/static/config.json +++ b/priv/static/static/config.json @@ -1,23 +1,28 @@  { -  "theme": "pleroma-dark", +  "alwaysShowSubjectInput": true,    "background": "/static/aurora_borealis.jpg", -  "logo": "/static/logo.png", -  "logoMask": true, -  "logoMargin": ".1em", -  "redirectRootNoLogin": "/main/all", -  "redirectRootLogin": "/main/friends", -  "showInstanceSpecificPanel": false,    "collapseMessageWithSubject": false, -  "scopeCopy": true, -  "subjectLineBehavior": "email", -  "postContentType": "text/plain", -  "alwaysShowSubjectInput": true, +  "disableChat": false, +  "greentext": false, +  "hideFilteredStatuses": false, +  "hideMutedPosts": false,    "hidePostStats": false, +  "hideSitename": false,    "hideUserStats": false,    "loginMethod": "password", -  "webPushNotifications": false, +  "logo": "/static/logo.png", +  "logoMargin": ".1em", +  "logoMask": true, +  "minimalScopesMode": false,    "noAttachmentLinks": false,    "nsfwCensorImage": "", +  "postContentType": "text/plain", +  "redirectRootLogin": "/main/friends", +  "redirectRootNoLogin": "/main/all", +  "scopeCopy": true,    "showFeaturesPanel": true, -  "minimalScopesMode": false +  "showInstanceSpecificPanel": false, +  "subjectLineBehavior": "email", +  "theme": "pleroma-dark", +  "webPushNotifications": false  } diff --git a/test/config/config_db_test.exs b/test/config/config_db_test.exs index a8e947365..336de7359 100644 --- a/test/config/config_db_test.exs +++ b/test/config/config_db_test.exs @@ -476,6 +476,14 @@ defmodule Pleroma.ConfigDBTest do        assert ConfigDB.from_binary(binary) == [key: "value"]      end +    test "keyword with partial_chain key" do +      binary = +        ConfigDB.transform([%{"tuple" => [":partial_chain", "&:hackney_connect.partial_chain/1"]}]) + +      assert binary == :erlang.term_to_binary(partial_chain: &:hackney_connect.partial_chain/1) +      assert ConfigDB.from_binary(binary) == [partial_chain: &:hackney_connect.partial_chain/1] +    end +      test "keyword" do        binary =          ConfigDB.transform([ diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index 9b7120712..370d876d0 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -2509,6 +2509,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                  %{"tuple" => [":seconds_valid", 60]},                  %{"tuple" => [":path", ""]},                  %{"tuple" => [":key1", nil]}, +                %{"tuple" => [":partial_chain", "&:hackney_connect.partial_chain/1"]},                  %{"tuple" => [":regex1", "~r/https:\/\/example.com/"]},                  %{"tuple" => [":regex2", "~r/https:\/\/example.com/u"]},                  %{"tuple" => [":regex3", "~r/https:\/\/example.com/i"]}, @@ -2532,6 +2533,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                       %{"tuple" => [":seconds_valid", 60]},                       %{"tuple" => [":path", ""]},                       %{"tuple" => [":key1", nil]}, +                     %{"tuple" => [":partial_chain", "&:hackney_connect.partial_chain/1"]},                       %{"tuple" => [":regex1", "~r/https:\\/\\/example.com/"]},                       %{"tuple" => [":regex2", "~r/https:\\/\\/example.com/u"]},                       %{"tuple" => [":regex3", "~r/https:\\/\\/example.com/i"]}, @@ -2544,6 +2546,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                       ":seconds_valid",                       ":path",                       ":key1", +                     ":partial_chain",                       ":regex1",                       ":regex2",                       ":regex3", diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 26e41c313..fd8299013 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -23,6 +23,18 @@ defmodule Pleroma.Web.CommonAPITest do    setup do: clear_config([:instance, :limit])    setup do: clear_config([:instance, :max_pinned_statuses]) +  describe "unblocking" do +    test "it works even without an existing block activity" do +      blocked = insert(:user) +      blocker = insert(:user) +      User.block(blocker, blocked) + +      assert User.blocks?(blocker, blocked) +      assert {:ok, :no_activity} == CommonAPI.unblock(blocker, blocked) +      refute User.blocks?(blocker, blocked) +    end +  end +    describe "deletion" do      test "it works with pruned objects" do        user = insert(:user)  | 
