diff options
Diffstat (limited to 'lib')
90 files changed, 537 insertions, 366 deletions
diff --git a/lib/mix/tasks/pleroma/relay.ex b/lib/mix/tasks/pleroma/relay.ex index cbe23f82e..fbec473c5 100644 --- a/lib/mix/tasks/pleroma/relay.ex +++ b/lib/mix/tasks/pleroma/relay.ex @@ -4,8 +4,8 @@  defmodule Mix.Tasks.Pleroma.Relay do    use Mix.Task -  alias Pleroma.Web.ActivityPub.Relay    alias Mix.Tasks.Pleroma.Common +  alias Pleroma.Web.ActivityPub.Relay    @shortdoc "Manages remote relays"    @moduledoc """ diff --git a/lib/mix/tasks/pleroma/robotstxt.ex b/lib/mix/tasks/pleroma/robotstxt.ex new file mode 100644 index 000000000..2128e1cd6 --- /dev/null +++ b/lib/mix/tasks/pleroma/robotstxt.ex @@ -0,0 +1,32 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Mix.Tasks.Pleroma.RobotsTxt do +  use Mix.Task + +  @shortdoc "Generate robots.txt" +  @moduledoc """ +  Generates robots.txt + +  ## Overwrite robots.txt to disallow all + +      mix pleroma.robots_txt disallow_all + +  This will write a robots.txt that will hide all paths on your instance +  from search engines and other robots that obey robots.txt + +  """ +  def run(["disallow_all"]) do +    static_dir = Pleroma.Config.get([:instance, :static_dir], "instance/static/") + +    if !File.exists?(static_dir) do +      File.mkdir_p!(static_dir) +    end + +    robots_txt_path = Path.join(static_dir, "robots.txt") +    robots_txt_content = "User-Agent: *\nDisallow: /\n" + +    File.write!(robots_txt_path, robots_txt_content, [:write]) +  end +end diff --git a/lib/mix/tasks/pleroma/uploads.ex b/lib/mix/tasks/pleroma/uploads.ex index a01e61627..106fcf443 100644 --- a/lib/mix/tasks/pleroma/uploads.ex +++ b/lib/mix/tasks/pleroma/uploads.ex @@ -4,9 +4,9 @@  defmodule Mix.Tasks.Pleroma.Uploads do    use Mix.Task +  alias Mix.Tasks.Pleroma.Common    alias Pleroma.Upload    alias Pleroma.Uploaders.Local -  alias Mix.Tasks.Pleroma.Common    require Logger    @log_every 50 @@ -20,7 +20,6 @@ defmodule Mix.Tasks.Pleroma.Uploads do     Options:     - `--delete` - delete local uploads after migrating them to the target uploader -     A list of available uploaders can be seen in config.exs    """    def run(["migrate_local", target_uploader | args]) do diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index 037e44716..f6cca0d06 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -5,9 +5,9 @@  defmodule Mix.Tasks.Pleroma.User do    use Mix.Task    import Ecto.Changeset +  alias Mix.Tasks.Pleroma.Common    alias Pleroma.Repo    alias Pleroma.User -  alias Mix.Tasks.Pleroma.Common    @shortdoc "Manages Pleroma users"    @moduledoc """ diff --git a/lib/pleroma/PasswordResetToken.ex b/lib/pleroma/PasswordResetToken.ex index 750ddd3c0..772c239a1 100644 --- a/lib/pleroma/PasswordResetToken.ex +++ b/lib/pleroma/PasswordResetToken.ex @@ -7,9 +7,9 @@ defmodule Pleroma.PasswordResetToken do    import Ecto.Changeset -  alias Pleroma.User -  alias Pleroma.Repo    alias Pleroma.PasswordResetToken +  alias Pleroma.Repo +  alias Pleroma.User    schema "password_reset_tokens" do      belongs_to(:user, User, type: Pleroma.FlakeId) diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index 18d5b70de..79dc26b01 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -5,9 +5,9 @@  defmodule Pleroma.Activity do    use Ecto.Schema -  alias Pleroma.Repo    alias Pleroma.Activity    alias Pleroma.Notification +  alias Pleroma.Repo    import Ecto.Query diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index d2523c045..cc81e1805 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -11,10 +11,10 @@ defmodule Pleroma.Application do    @repository Mix.Project.config()[:source_url]    def name, do: @name    def version, do: @version -  def named_version(), do: @name <> " " <> @version +  def named_version, do: @name <> " " <> @version    def repository, do: @repository -  def user_agent() do +  def user_agent do      info = "#{Pleroma.Web.base_url()} <#{Pleroma.Config.get([:instance, :email], "")}>"      named_version() <> "; " <> info    end @@ -48,7 +48,7 @@ defmodule Pleroma.Application do            [              :user_cache,              [ -              default_ttl: 25000, +              default_ttl: 25_000,                ttl_interval: 1000,                limit: 2500              ] @@ -60,7 +60,7 @@ defmodule Pleroma.Application do            [              :object_cache,              [ -              default_ttl: 25000, +              default_ttl: 25_000,                ttl_interval: 1000,                limit: 2500              ] @@ -127,7 +127,7 @@ defmodule Pleroma.Application do      Supervisor.start_link(children, opts)    end -  def enabled_hackney_pools() do +  def enabled_hackney_pools do      [:media] ++        if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Hackney do          [:federation] @@ -142,14 +142,14 @@ defmodule Pleroma.Application do    end    if Mix.env() == :test do -    defp streamer_child(), do: [] -    defp chat_child(), do: [] +    defp streamer_child, do: [] +    defp chat_child, do: []    else -    defp streamer_child() do +    defp streamer_child do        [worker(Pleroma.Web.Streamer, [])]      end -    defp chat_child() do +    defp chat_child do        if Pleroma.Config.get([:chat, :enabled]) do          [worker(Pleroma.Web.ChatChannel.ChatChannelState, [])]        else @@ -158,7 +158,7 @@ defmodule Pleroma.Application do      end    end -  defp hackney_pool_children() do +  defp hackney_pool_children do      for pool <- enabled_hackney_pools() do        options = Pleroma.Config.get([:hackney_pools, pool])        :hackney_pool.child_spec(pool, options) diff --git a/lib/pleroma/captcha/captcha.ex b/lib/pleroma/captcha/captcha.ex index aa41acd1a..f105cbb25 100644 --- a/lib/pleroma/captcha/captcha.ex +++ b/lib/pleroma/captcha/captcha.ex @@ -10,7 +10,7 @@ defmodule Pleroma.Captcha do    use GenServer    @doc false -  def start_link() do +  def start_link do      GenServer.start_link(__MODULE__, [], name: __MODULE__)    end @@ -22,7 +22,7 @@ defmodule Pleroma.Captcha do    @doc """    Ask the configured captcha service for a new captcha    """ -  def new() do +  def new do      GenServer.call(__MODULE__, :new)    end @@ -73,7 +73,7 @@ defmodule Pleroma.Captcha do      secret = KeyGenerator.generate(secret_key_base, token <> "_encrypt")      sign_secret = KeyGenerator.generate(secret_key_base, token <> "_sign") -    # If the time found is less than (current_time - seconds_valid), then the time has already passed. +    # If the time found is less than (current_time-seconds_valid) then the time has already passed      # Later we check that the time found is more than the presumed invalidatation time, that means      # that the data is still valid and the captcha can be checked      seconds_valid = Pleroma.Config.get!([Pleroma.Captcha, :seconds_valid]) diff --git a/lib/pleroma/captcha/kocaptcha.ex b/lib/pleroma/captcha/kocaptcha.ex index 34a611492..61688e778 100644 --- a/lib/pleroma/captcha/kocaptcha.ex +++ b/lib/pleroma/captcha/kocaptcha.ex @@ -7,7 +7,7 @@ defmodule Pleroma.Captcha.Kocaptcha do    @behaviour Service    @impl Service -  def new() do +  def new do      endpoint = Pleroma.Config.get!([__MODULE__, :endpoint])      case Tesla.get(endpoint <> "/new") do diff --git a/lib/pleroma/clippy.ex b/lib/pleroma/clippy.ex index 4e9bdbe19..bd20952a6 100644 --- a/lib/pleroma/clippy.ex +++ b/lib/pleroma/clippy.ex @@ -7,13 +7,13 @@ defmodule Pleroma.Clippy do    # No software is complete until they have a Clippy implementation.    # A ballmer peak _may_ be required to change this module. -  def tip() do +  def tip do      tips()      |> Enum.random()      |> puts()    end -  def tips() do +  def tips do      host = Pleroma.Config.get([Pleroma.Web.Endpoint, :url, :host])      [ @@ -92,8 +92,8 @@ defmodule Pleroma.Clippy do      # surrond one/five line clippy with blank lines around to not fuck up the layout      # -    # yes this fix sucks but it's good enough, have you ever seen a release of windows wihtout some butched -    # features anyway? +    # yes this fix sucks but it's good enough, have you ever seen a release of windows +    # without some butched features anyway?      lines =        if length(lines) == 1 or length(lines) == 5 do          [""] ++ lines ++ [""] diff --git a/lib/pleroma/config/deprecation_warnings.ex b/lib/pleroma/config/deprecation_warnings.ex index 7451fd0a7..0345ac19c 100644 --- a/lib/pleroma/config/deprecation_warnings.ex +++ b/lib/pleroma/config/deprecation_warnings.ex @@ -5,7 +5,7 @@  defmodule Pleroma.Config.DeprecationWarnings do    require Logger -  def check_frontend_config_mechanism() do +  def check_frontend_config_mechanism do      if Pleroma.Config.get(:fe) do        Logger.warn("""        !!!DEPRECATION WARNING!!! diff --git a/lib/pleroma/emoji.ex b/lib/pleroma/emoji.ex index bb3190e08..f3f08cd9d 100644 --- a/lib/pleroma/emoji.ex +++ b/lib/pleroma/emoji.ex @@ -17,13 +17,13 @@ defmodule Pleroma.Emoji do    @ets_options [:ordered_set, :protected, :named_table, {:read_concurrency, true}]    @doc false -  def start_link() do +  def start_link do      GenServer.start_link(__MODULE__, [], name: __MODULE__)    end    @doc "Reloads the emojis from disk."    @spec reload() :: :ok -  def reload() do +  def reload do      GenServer.call(__MODULE__, :reload)    end @@ -38,7 +38,7 @@ defmodule Pleroma.Emoji do    @doc "Returns all the emojos!!"    @spec get_all() :: [{String.t(), String.t()}, ...] -  def get_all() do +  def get_all do      :ets.tab2list(@ets)    end @@ -72,7 +72,7 @@ defmodule Pleroma.Emoji do      {:ok, state}    end -  defp load() do +  defp load do      emojis =        (load_finmoji(Keyword.get(Application.get_env(:pleroma, :instance), :finmoji_enabled)) ++           load_from_file("config/emoji.txt") ++ diff --git a/lib/pleroma/filter.ex b/lib/pleroma/filter.ex index bdc34698c..79efc29f0 100644 --- a/lib/pleroma/filter.ex +++ b/lib/pleroma/filter.ex @@ -8,8 +8,8 @@ defmodule Pleroma.Filter do    import Ecto.Changeset    import Ecto.Query -  alias Pleroma.User    alias Pleroma.Repo +  alias Pleroma.User    schema "filters" do      belongs_to(:user, User, type: Pleroma.FlakeId) diff --git a/lib/pleroma/flake_id.ex b/lib/pleroma/flake_id.ex index 9f098ce33..4259d5718 100644 --- a/lib/pleroma/flake_id.ex +++ b/lib/pleroma/flake_id.ex @@ -85,7 +85,7 @@ defmodule Pleroma.FlakeId do      {:ok, FlakeId.from_string(value)}    end -  def autogenerate(), do: get() +  def autogenerate, do: get()    # -- GenServer API    def start_link do @@ -165,7 +165,7 @@ defmodule Pleroma.FlakeId do      1_000_000_000 * mega_seconds + seconds * 1000 + :erlang.trunc(micro_seconds / 1000)    end -  defp worker_id() do +  defp worker_id do      <<worker::integer-size(48)>> = :crypto.strong_rand_bytes(6)      worker    end diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 048c032ed..1e4ede3f2 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -10,6 +10,7 @@ defmodule Pleroma.Formatter do    @markdown_characters_regex ~r/(`|\*|_|{|}|[|]|\(|\)|#|\+|-|\.|!)/    @link_regex ~r{((?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~%:/?#[\]@!\$&'\(\)\*\+,;=.]+)|[0-9a-z+\-\.]+:[0-9a-z$-_.+!*'(),]+}ui +  # credo:disable-for-previous-line Credo.Check.Readability.MaxLineLength    @auto_linker_config hashtag: true,                        hashtag_handler: &Pleroma.Formatter.hashtag_handler/4, diff --git a/lib/pleroma/gopher/server.ex b/lib/pleroma/gopher/server.ex index ba9614029..6baacc566 100644 --- a/lib/pleroma/gopher/server.ex +++ b/lib/pleroma/gopher/server.ex @@ -6,7 +6,7 @@ defmodule Pleroma.Gopher.Server do    use GenServer    require Logger -  def start_link() do +  def start_link do      config = Pleroma.Config.get(:gopher, [])      ip = Keyword.get(config, :ip, {0, 0, 0, 0})      port = Keyword.get(config, :port, 1234) @@ -36,12 +36,12 @@ defmodule Pleroma.Gopher.Server do  end  defmodule Pleroma.Gopher.Server.ProtocolHandler do -  alias Pleroma.Web.ActivityPub.ActivityPub -  alias Pleroma.Web.ActivityPub.Visibility    alias Pleroma.Activity    alias Pleroma.HTML -  alias Pleroma.User    alias Pleroma.Repo +  alias Pleroma.User +  alias Pleroma.Web.ActivityPub.ActivityPub +  alias Pleroma.Web.ActivityPub.Visibility    def start_link(ref, socket, transport, opts) do      pid = spawn_link(__MODULE__, :init, [ref, socket, transport, opts]) diff --git a/lib/pleroma/html.ex b/lib/pleroma/html.ex index 4dc6998b1..05253157e 100644 --- a/lib/pleroma/html.ex +++ b/lib/pleroma/html.ex @@ -9,7 +9,7 @@ defmodule Pleroma.HTML do    defp get_scrubbers(scrubbers) when is_list(scrubbers), do: scrubbers    defp get_scrubbers(_), do: [Pleroma.HTML.Scrubber.Default] -  def get_scrubbers() do +  def get_scrubbers do      Pleroma.Config.get([:markup, :scrub_policy])      |> get_scrubbers    end diff --git a/lib/pleroma/instances/instance.ex b/lib/pleroma/instances/instance.ex index 48bc939dd..e92006151 100644 --- a/lib/pleroma/instances/instance.ex +++ b/lib/pleroma/instances/instance.ex @@ -2,8 +2,8 @@ defmodule Pleroma.Instances.Instance do    @moduledoc "Instance."    alias Pleroma.Instances -  alias Pleroma.Repo    alias Pleroma.Instances.Instance +  alias Pleroma.Repo    use Ecto.Schema diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index c88512567..fe8181d8b 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -5,12 +5,12 @@  defmodule Pleroma.Notification do    use Ecto.Schema -  alias Pleroma.User    alias Pleroma.Activity    alias Pleroma.Notification    alias Pleroma.Repo -  alias Pleroma.Web.CommonAPI.Utils +  alias Pleroma.User    alias Pleroma.Web.CommonAPI +  alias Pleroma.Web.CommonAPI.Utils    import Ecto.Query diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index 7510a09bb..58e46ef1d 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -5,11 +5,11 @@  defmodule Pleroma.Object do    use Ecto.Schema -  alias Pleroma.Repo -  alias Pleroma.Object -  alias Pleroma.User    alias Pleroma.Activity +  alias Pleroma.Object    alias Pleroma.ObjectTombstone +  alias Pleroma.Repo +  alias Pleroma.User    import Ecto.Query    import Ecto.Changeset diff --git a/lib/pleroma/plugs/http_signature.ex b/lib/pleroma/plugs/http_signature.ex index 51bec910e..21c195713 100644 --- a/lib/pleroma/plugs/http_signature.ex +++ b/lib/pleroma/plugs/http_signature.ex @@ -3,8 +3,8 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.Plugs.HTTPSignaturePlug do -  alias Pleroma.Web.HTTPSignatures    alias Pleroma.Web.ActivityPub.Utils +  alias Pleroma.Web.HTTPSignatures    import Plug.Conn    require Logger diff --git a/lib/pleroma/plugs/instance_static.ex b/lib/pleroma/plugs/instance_static.ex index 41125921a..a64f1ea80 100644 --- a/lib/pleroma/plugs/instance_static.ex +++ b/lib/pleroma/plugs/instance_static.ex @@ -21,7 +21,8 @@ defmodule Pleroma.Plugs.InstanceStatic do      end    end -  @only ~w(index.html static emoji packs sounds images instance favicon.png sw.js sw-pleroma.js) +  @only ~w(index.html robots.txt static emoji packs sounds images instance favicon.png sw.js +  sw-pleroma.js)    def init(opts) do      opts diff --git a/lib/pleroma/plugs/oauth_plug.ex b/lib/pleroma/plugs/oauth_plug.ex index 22f0406f4..5888d596a 100644 --- a/lib/pleroma/plugs/oauth_plug.ex +++ b/lib/pleroma/plugs/oauth_plug.ex @@ -6,8 +6,8 @@ defmodule Pleroma.Plugs.OAuthPlug do    import Plug.Conn    import Ecto.Query -  alias Pleroma.User    alias Pleroma.Repo +  alias Pleroma.User    alias Pleroma.Web.OAuth.Token    @realm_reg Regex.compile!("Bearer\:?\s+(.*)$", "i") @@ -38,6 +38,7 @@ defmodule Pleroma.Plugs.OAuthPlug do          preload: [user: user]        ) +    # credo:disable-for-next-line Credo.Check.Readability.MaxLineLength      with %Token{user: %{info: %{deactivated: false} = _} = user} = token_record <- Repo.one(query) do        {:ok, user, token_record}      end diff --git a/lib/pleroma/plugs/uploaded_media.ex b/lib/pleroma/plugs/uploaded_media.ex index 13aa8641a..fd77b8d8f 100644 --- a/lib/pleroma/plugs/uploaded_media.ex +++ b/lib/pleroma/plugs/uploaded_media.ex @@ -24,6 +24,18 @@ defmodule Pleroma.Plugs.UploadedMedia do    end    def call(%{request_path: <<"/", @path, "/", file::binary>>} = conn, opts) do +    conn = +      case fetch_query_params(conn) do +        %{query_params: %{"name" => name}} = conn -> +          name = String.replace(name, "\"", "\\\"") + +          conn +          |> put_resp_header("content-disposition", "filename=\"#{name}\"") + +        conn -> +          conn +      end +      config = Pleroma.Config.get([Pleroma.Upload])      with uploader <- Keyword.fetch!(config, :uploader), diff --git a/lib/pleroma/plugs/user_fetcher_plug.ex b/lib/pleroma/plugs/user_fetcher_plug.ex index 7ed4602bb..5a77f6833 100644 --- a/lib/pleroma/plugs/user_fetcher_plug.ex +++ b/lib/pleroma/plugs/user_fetcher_plug.ex @@ -3,8 +3,8 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Plugs.UserFetcherPlug do -  alias Pleroma.User    alias Pleroma.Repo +  alias Pleroma.User    import Plug.Conn diff --git a/lib/pleroma/reverse_proxy.ex b/lib/pleroma/reverse_proxy.ex index a25b5ea4e..6298b92f4 100644 --- a/lib/pleroma/reverse_proxy.ex +++ b/lib/pleroma/reverse_proxy.ex @@ -3,10 +3,12 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.ReverseProxy do -  @keep_req_headers ~w(accept user-agent accept-encoding cache-control if-modified-since if-unmodified-since if-none-match if-range range) +  @keep_req_headers ~w(accept user-agent accept-encoding cache-control if-modified-since) ++ +                      ~w(if-unmodified-since if-none-match if-range range)    @resp_cache_headers ~w(etag date last-modified cache-control)    @keep_resp_headers @resp_cache_headers ++ -                       ~w(content-type content-disposition content-encoding content-range accept-ranges vary) +                       ~w(content-type content-disposition content-encoding content-range) ++ +                       ~w(accept-ranges vary)    @default_cache_control_header "public, max-age=1209600"    @valid_resp_codes [200, 206, 304]    @max_read_duration :timer.seconds(30) @@ -282,8 +284,8 @@ defmodule Pleroma.ReverseProxy do          headers        has_cache? -> -        # There's caching header present but no cache-control -- we need to explicitely override it to public -        # as Plug defaults to "max-age=0, private, must-revalidate" +        # There's caching header present but no cache-control -- we need to explicitely override it +        # to public as Plug defaults to "max-age=0, private, must-revalidate"          List.keystore(headers, "cache-control", 0, {"cache-control", "public"})        true -> diff --git a/lib/pleroma/stats.ex b/lib/pleroma/stats.ex index fe0ce9051..2e7d747df 100644 --- a/lib/pleroma/stats.ex +++ b/lib/pleroma/stats.ex @@ -4,8 +4,8 @@  defmodule Pleroma.Stats do    import Ecto.Query -  alias Pleroma.User    alias Pleroma.Repo +  alias Pleroma.User    def start_link do      agent = Agent.start_link(fn -> {[], %{}} end, name: __MODULE__) diff --git a/lib/pleroma/thread_mute.ex b/lib/pleroma/thread_mute.ex index 0b577113d..10d31679d 100644 --- a/lib/pleroma/thread_mute.ex +++ b/lib/pleroma/thread_mute.ex @@ -4,7 +4,11 @@  defmodule Pleroma.ThreadMute do    use Ecto.Schema -  alias Pleroma.{Repo, User, ThreadMute} + +  alias Pleroma.Repo +  alias Pleroma.ThreadMute +  alias Pleroma.User +    require Ecto.Query    schema "thread_mutes" do diff --git a/lib/pleroma/upload.ex b/lib/pleroma/upload.ex index 1a97e9fde..f72334930 100644 --- a/lib/pleroma/upload.ex +++ b/lib/pleroma/upload.ex @@ -70,7 +70,7 @@ defmodule Pleroma.Upload do             %{               "type" => "Link",               "mediaType" => upload.content_type, -             "href" => url_from_spec(opts.base_url, url_spec) +             "href" => url_from_spec(upload, opts.base_url, url_spec)             }           ],           "name" => Map.get(opts, :description) || upload.name @@ -219,14 +219,18 @@ defmodule Pleroma.Upload do      tmp_path    end -  defp url_from_spec(base_url, {:file, path}) do +  defp url_from_spec(%__MODULE__{name: name}, base_url, {:file, path}) do      path = -      path -      |> URI.encode(&char_unescaped?/1) +      URI.encode(path, &char_unescaped?/1) <> +        if Pleroma.Config.get([__MODULE__, :link_name], false) do +          "?name=#{URI.encode(name, &char_unescaped?/1)}" +        else +          "" +        end      [base_url, "media", path]      |> Path.join()    end -  defp url_from_spec(_base_url, {:url, url}), do: url +  defp url_from_spec(_upload, _base_url, {:url, url}), do: url  end diff --git a/lib/pleroma/uploaders/s3.ex b/lib/pleroma/uploaders/s3.ex index 0038ba01f..e7de3f3e0 100644 --- a/lib/pleroma/uploaders/s3.ex +++ b/lib/pleroma/uploaders/s3.ex @@ -6,7 +6,8 @@ defmodule Pleroma.Uploaders.S3 do    @behaviour Pleroma.Uploaders.Uploader    require Logger -  # The file name is re-encoded with S3's constraints here to comply with previous links with less strict filenames +  # The file name is re-encoded with S3's constraints here to comply with previous +  # links with less strict filenames    def get_file(file) do      config = Pleroma.Config.get([__MODULE__])      bucket = Keyword.fetch!(config, :bucket) diff --git a/lib/pleroma/uploaders/swift/keystone.ex b/lib/pleroma/uploaders/swift/keystone.ex index b4f250f9d..3046cdbd2 100644 --- a/lib/pleroma/uploaders/swift/keystone.ex +++ b/lib/pleroma/uploaders/swift/keystone.ex @@ -17,7 +17,7 @@ defmodule Pleroma.Uploaders.Swift.Keystone do      |> Poison.decode!()    end -  def get_token() do +  def get_token do      settings = Pleroma.Config.get(Pleroma.Uploaders.Swift)      username = Keyword.fetch!(settings, :username)      password = Keyword.fetch!(settings, :password) diff --git a/lib/pleroma/uploaders/uploader.ex b/lib/pleroma/uploaders/uploader.ex index ce83cbbbc..bf15389fc 100644 --- a/lib/pleroma/uploaders/uploader.ex +++ b/lib/pleroma/uploaders/uploader.ex @@ -29,7 +29,6 @@ defmodule Pleroma.Uploaders.Uploader do    * `{:error, String.t}` error information if the file failed to be saved to the backend.    * `:wait_callback` will wait for an http post request at `/api/pleroma/upload_callback/:upload_path` and call the uploader's `http_callback/3` method. -    """    @type file_spec :: {:file | :url, String.t()}    @callback put_file(Pleroma.Upload.t()) :: diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index e17df8e34..381642281 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -8,21 +8,21 @@ defmodule Pleroma.User do    import Ecto.Changeset    import Ecto.Query +  alias Comeonin.Pbkdf2 +  alias Pleroma.Activity +  alias Pleroma.Formatter +  alias Pleroma.Notification +  alias Pleroma.Object    alias Pleroma.Repo    alias Pleroma.User -  alias Pleroma.Object    alias Pleroma.Web -  alias Pleroma.Activity -  alias Pleroma.Notification -  alias Comeonin.Pbkdf2 -  alias Pleroma.Formatter +  alias Pleroma.Web.ActivityPub.ActivityPub +  alias Pleroma.Web.ActivityPub.Utils    alias Pleroma.Web.CommonAPI.Utils, as: CommonUtils -  alias Pleroma.Web.OStatus -  alias Pleroma.Web.Websub    alias Pleroma.Web.OAuth -  alias Pleroma.Web.ActivityPub.Utils -  alias Pleroma.Web.ActivityPub.ActivityPub +  alias Pleroma.Web.OStatus    alias Pleroma.Web.RelMe +  alias Pleroma.Web.Websub    require Logger @@ -30,6 +30,7 @@ defmodule Pleroma.User do    @primary_key {:id, Pleroma.FlakeId, autogenerate: true} +  # credo:disable-for-next-line Credo.Check.Readability.MaxLineLength    @email_regex ~r/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/    @strict_local_nickname_regex ~r/^[a-zA-Z\d]+$/ @@ -317,7 +318,7 @@ defmodule Pleroma.User do    def needs_update?(%User{local: false, last_refreshed_at: nil}), do: true    def needs_update?(%User{local: false} = user) do -    NaiveDateTime.diff(NaiveDateTime.utc_now(), user.last_refreshed_at) >= 86400 +    NaiveDateTime.diff(NaiveDateTime.utc_now(), user.last_refreshed_at) >= 86_400    end    def needs_update?(_), do: true @@ -467,7 +468,8 @@ defmodule Pleroma.User do      Repo.get_by(User, ap_id: ap_id)    end -  # This is mostly an SPC migration fix. This guesses the user nickname (by taking the last part of the ap_id and the domain) and tries to get that user +  # This is mostly an SPC migration fix. This guesses the user nickname by taking the last part +  # of the ap_id and the domain and tries to get that user    def get_by_guessed_nickname(ap_id) do      domain = URI.parse(ap_id).host      name = List.last(String.split(ap_id, "/")) @@ -1378,7 +1380,7 @@ defmodule Pleroma.User do      |> Enum.map(&String.downcase(&1))    end -  defp local_nickname_regex() do +  defp local_nickname_regex do      if Pleroma.Config.get([:instance, :extended_nickname_format]) do        @extended_local_nickname_regex      else diff --git a/lib/pleroma/user/info.ex b/lib/pleroma/user/info.ex index 818b64645..e3fd65a6e 100644 --- a/lib/pleroma/user/info.ex +++ b/lib/pleroma/user/info.ex @@ -6,6 +6,8 @@ defmodule Pleroma.User.Info do    use Ecto.Schema    import Ecto.Changeset +  alias Pleroma.User.Info +    embedded_schema do      field(:banner, :map, default: %{})      field(:background, :map, default: %{}) @@ -250,4 +252,11 @@ defmodule Pleroma.User.Info do      cast(info, params, [:pinned_activities])    end + +  def roles(%Info{is_moderator: is_moderator, is_admin: is_admin}) do +    %{ +      admin: is_admin, +      moderator: is_moderator +    } +  end  end diff --git a/lib/pleroma/user/welcome_message.ex b/lib/pleroma/user/welcome_message.ex index 8018ac22f..2ba65b75a 100644 --- a/lib/pleroma/user/welcome_message.ex +++ b/lib/pleroma/user/welcome_message.ex @@ -14,7 +14,7 @@ defmodule Pleroma.User.WelcomeMessage do      end    end -  defp welcome_user() do +  defp welcome_user do      with nickname when is_binary(nickname) <-             Pleroma.Config.get([:instance, :welcome_user_nickname]),           %User{local: true} = user <- User.get_cached_by_nickname(nickname) do @@ -24,7 +24,7 @@ defmodule Pleroma.User.WelcomeMessage do      end    end -  defp welcome_message() do +  defp welcome_message do      Pleroma.Config.get([:instance, :welcome_message])    end  end diff --git a/lib/pleroma/user_invite_token.ex b/lib/pleroma/user_invite_token.ex index 5a448114c..9c5579934 100644 --- a/lib/pleroma/user_invite_token.ex +++ b/lib/pleroma/user_invite_token.ex @@ -7,8 +7,8 @@ defmodule Pleroma.UserInviteToken do    import Ecto.Changeset -  alias Pleroma.UserInviteToken    alias Pleroma.Repo +  alias Pleroma.UserInviteToken    schema "user_invite_tokens" do      field(:token, :string) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 2f11f8984..70db419ca 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -4,17 +4,17 @@  defmodule Pleroma.Web.ActivityPub.ActivityPub do    alias Pleroma.Activity -  alias Pleroma.Repo +  alias Pleroma.Instances +  alias Pleroma.Notification    alias Pleroma.Object +  alias Pleroma.Repo    alias Pleroma.Upload    alias Pleroma.User -  alias Pleroma.Notification -  alias Pleroma.Instances -  alias Pleroma.Web.ActivityPub.Transmogrifier    alias Pleroma.Web.ActivityPub.MRF -  alias Pleroma.Web.WebFinger +  alias Pleroma.Web.ActivityPub.Transmogrifier    alias Pleroma.Web.Federator    alias Pleroma.Web.OStatus +  alias Pleroma.Web.WebFinger    import Ecto.Query    import Pleroma.Web.ActivityPub.Utils @@ -170,7 +170,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do               additional             ),           {:ok, activity} <- insert(create_data, local), -         # Changing note count prior to enqueuing federation task in order to avoid race conditions on updating user.info +         # Changing note count prior to enqueuing federation task in order to avoid +         # race conditions on updating user.info           {:ok, _actor} <- increase_note_count_if_public(actor, activity),           :ok <- maybe_federate(activity) do        {:ok, activity} @@ -309,7 +310,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do    def delete(%Object{data: %{"id" => id, "actor" => actor}} = object, local \\ true) do      user = User.get_cached_by_ap_id(actor) -    to = object.data["to"] || [] ++ object.data["cc"] || [] +    to = (object.data["to"] || []) ++ (object.data["cc"] || [])      with {:ok, object, activity} <- Object.delete(object),           data <- %{ @@ -320,7 +321,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do             "deleted_activity_id" => activity && activity.id           },           {:ok, activity} <- insert(data, local), -         # Changing note count prior to enqueuing federation task in order to avoid race conditions on updating user.info +         # Changing note count prior to enqueuing federation task in order to avoid +         # race conditions on updating user.info           {:ok, _actor} <- decrease_note_count_if_public(user, object),           :ok <- maybe_federate(activity) do        {:ok, activity} @@ -502,7 +504,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do         when is_list(tag_reject) and tag_reject != [] do      from(        activity in query, -      where: fragment("(not (? #> '{\"object\",\"tag\"}') \\?| ?)", activity.data, ^tag_reject) +      where: fragment(~s(\(not \(? #> '{"object","tag"}'\) \\?| ?\)), activity.data, ^tag_reject)      )    end @@ -512,7 +514,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do         when is_list(tag_all) and tag_all != [] do      from(        activity in query, -      where: fragment("(? #> '{\"object\",\"tag\"}') \\?& ?", activity.data, ^tag_all) +      where: fragment(~s(\(? #> '{"object","tag"}'\) \\?& ?), activity.data, ^tag_all)      )    end @@ -521,14 +523,14 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do    defp restrict_tag(query, %{"tag" => tag}) when is_list(tag) do      from(        activity in query, -      where: fragment("(? #> '{\"object\",\"tag\"}') \\?| ?", activity.data, ^tag) +      where: fragment(~s(\(? #> '{"object","tag"}'\) \\?| ?), activity.data, ^tag)      )    end    defp restrict_tag(query, %{"tag" => tag}) when is_binary(tag) do      from(        activity in query, -      where: fragment("? <@ (? #> '{\"object\",\"tag\"}')", ^tag, activity.data) +      where: fragment(~s(? <@ (? #> '{"object","tag"}'\)), ^tag, activity.data)      )    end @@ -601,7 +603,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do    defp restrict_favorited_by(query, %{"favorited_by" => ap_id}) do      from(        activity in query, -      where: fragment("? <@ (? #> '{\"object\",\"likes\"}')", ^ap_id, activity.data) +      where: fragment(~s(? <@ (? #> '{"object","likes"}'\)), ^ap_id, activity.data)      )    end @@ -610,7 +612,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do    defp restrict_media(query, %{"only_media" => val}) when val == "true" or val == "1" do      from(        activity in query, -      where: fragment("not (? #> '{\"object\",\"attachment\"}' = ?)", activity.data, ^[]) +      where: fragment(~s(not (? #> '{"object","attachment"}' = ?\)), activity.data, ^[])      )    end diff --git a/lib/pleroma/web/activity_pub/activity_pub_controller.ex b/lib/pleroma/web/activity_pub/activity_pub_controller.ex index ff924a536..7091d6927 100644 --- a/lib/pleroma/web/activity_pub/activity_pub_controller.ex +++ b/lib/pleroma/web/activity_pub/activity_pub_controller.ex @@ -6,15 +6,15 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do    use Pleroma.Web, :controller    alias Pleroma.Activity -  alias Pleroma.User    alias Pleroma.Object -  alias Pleroma.Web.ActivityPub.ObjectView -  alias Pleroma.Web.ActivityPub.UserView +  alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub -  alias Pleroma.Web.ActivityPub.Visibility +  alias Pleroma.Web.ActivityPub.ObjectView    alias Pleroma.Web.ActivityPub.Relay    alias Pleroma.Web.ActivityPub.Transmogrifier +  alias Pleroma.Web.ActivityPub.UserView    alias Pleroma.Web.ActivityPub.Utils +  alias Pleroma.Web.ActivityPub.Visibility    alias Pleroma.Web.Federator    require Logger diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index eebea207c..1aaa20050 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -16,7 +16,7 @@ defmodule Pleroma.Web.ActivityPub.MRF do      end)    end -  def get_policies() do +  def get_policies do      Application.get_env(:pleroma, :instance, [])      |> Keyword.get(:rewrite_policy, [])      |> get_policies() diff --git a/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex b/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex index 5fdc03414..25d5f9cd3 100644 --- a/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex @@ -45,13 +45,14 @@ defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicy do    defp check_replace(%{"object" => %{"content" => content, "summary" => summary}} = message) do      {content, summary} = -      Enum.reduce(Pleroma.Config.get([:mrf_keyword, :replace]), {content, summary}, fn {pattern, -                                                                                        replacement}, -                                                                                       {content_acc, -                                                                                        summary_acc} -> -        {String.replace(content_acc, pattern, replacement), -         String.replace(summary_acc, pattern, replacement)} -      end) +      Enum.reduce( +        Pleroma.Config.get([:mrf_keyword, :replace]), +        {content, summary}, +        fn {pattern, replacement}, {content_acc, summary_acc} -> +          {String.replace(content_acc, pattern, replacement), +           String.replace(summary_acc, pattern, replacement)} +        end +      )      {:ok,       message diff --git a/lib/pleroma/web/activity_pub/relay.ex b/lib/pleroma/web/activity_pub/relay.ex index c496063ea..01fef71b9 100644 --- a/lib/pleroma/web/activity_pub/relay.ex +++ b/lib/pleroma/web/activity_pub/relay.ex @@ -3,9 +3,9 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.ActivityPub.Relay do -  alias Pleroma.User -  alias Pleroma.Object    alias Pleroma.Activity +  alias Pleroma.Object +  alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub    require Logger diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 27d223a3e..1247e4b61 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -7,9 +7,9 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do    A module to handle coding from internal to wire ActivityPub and back.    """    alias Pleroma.Activity -  alias Pleroma.User    alias Pleroma.Object    alias Pleroma.Repo +  alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.ActivityPub.Utils    alias Pleroma.Web.ActivityPub.Visibility @@ -650,10 +650,10 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do      if object = Object.normalize(id), do: {:ok, object}, else: nil    end -  def set_reply_to_uri(%{"inReplyTo" => inReplyTo} = object) when is_binary(inReplyTo) do -    with false <- String.starts_with?(inReplyTo, "http"), -         {:ok, %{data: replied_to_object}} <- get_obj_helper(inReplyTo) do -      Map.put(object, "inReplyTo", replied_to_object["external_url"] || inReplyTo) +  def set_reply_to_uri(%{"inReplyTo" => in_reply_to} = object) when is_binary(in_reply_to) do +    with false <- String.starts_with?(in_reply_to, "http"), +         {:ok, %{data: replied_to_object}} <- get_obj_helper(in_reply_to) do +      Map.put(object, "inReplyTo", replied_to_object["external_url"] || in_reply_to)      else        _e -> object      end @@ -830,10 +830,10 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do    end    def add_attributed_to(object) do -    attributedTo = object["attributedTo"] || object["actor"] +    attributed_to = object["attributedTo"] || object["actor"]      object -    |> Map.put("attributedTo", attributedTo) +    |> Map.put("attributedTo", attributed_to)    end    def add_likes(%{"id" => id, "like_count" => likes} = object) do diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 629c39315..182f9cacb 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -3,17 +3,17 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.ActivityPub.Utils do +  alias Ecto.Changeset +  alias Ecto.UUID +  alias Pleroma.Activity +  alias Pleroma.Notification +  alias Pleroma.Object    alias Pleroma.Repo +  alias Pleroma.User    alias Pleroma.Web -  alias Pleroma.Object -  alias Pleroma.Activity    alias Pleroma.Web.ActivityPub.Visibility -  alias Pleroma.User -  alias Pleroma.Notification -  alias Pleroma.Web.Router.Helpers    alias Pleroma.Web.Endpoint -  alias Ecto.Changeset -  alias Ecto.UUID +  alias Pleroma.Web.Router.Helpers    import Ecto.Query diff --git a/lib/pleroma/web/activity_pub/views/user_view.ex b/lib/pleroma/web/activity_pub/views/user_view.ex index 415cbd47a..3d00dcbf2 100644 --- a/lib/pleroma/web/activity_pub/views/user_view.ex +++ b/lib/pleroma/web/activity_pub/views/user_view.ex @@ -5,15 +5,15 @@  defmodule Pleroma.Web.ActivityPub.UserView do    use Pleroma.Web, :view -  alias Pleroma.Web.WebFinger -  alias Pleroma.Web.Salmon -  alias Pleroma.User    alias Pleroma.Repo +  alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.ActivityPub.Transmogrifier    alias Pleroma.Web.ActivityPub.Utils -  alias Pleroma.Web.Router.Helpers    alias Pleroma.Web.Endpoint +  alias Pleroma.Web.Router.Helpers +  alias Pleroma.Web.Salmon +  alias Pleroma.Web.WebFinger    import Ecto.Query diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 75c2c6061..6d9bf2895 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -8,7 +8,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do    use Pleroma.Web, :controller    alias Pleroma.User    alias Pleroma.Web.ActivityPub.Relay -  alias Pleroma.Web.MastodonAPI.Admin.AccountView +  alias Pleroma.Web.AdminAPI.AccountView    import Pleroma.Web.ControllerHelper, only: [json_response: 3] diff --git a/lib/pleroma/web/mastodon_api/views/admin/account_view.ex b/lib/pleroma/web/admin_api/views/account_view.ex index 74ca13564..4d6f921ef 100644 --- a/lib/pleroma/web/mastodon_api/views/admin/account_view.ex +++ b/lib/pleroma/web/admin_api/views/account_view.ex @@ -2,10 +2,11 @@  # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>  # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.MastodonAPI.Admin.AccountView do +defmodule Pleroma.Web.AdminAPI.AccountView do    use Pleroma.Web, :view -  alias Pleroma.Web.MastodonAPI.Admin.AccountView +  alias Pleroma.User.Info +  alias Pleroma.Web.AdminAPI.AccountView    def render("index.json", %{users: users, count: count, page_size: page_size}) do      %{ @@ -19,7 +20,10 @@ defmodule Pleroma.Web.MastodonAPI.Admin.AccountView do      %{        "id" => user.id,        "nickname" => user.nickname, -      "deactivated" => user.info.deactivated +      "deactivated" => user.info.deactivated, +      "local" => user.local, +      "roles" => Info.roles(user.info), +      "tags" => user.tags || []      }    end  end diff --git a/lib/pleroma/web/auth/pleroma_authenticator.ex b/lib/pleroma/web/auth/pleroma_authenticator.ex index fb04ef8da..5583f41a9 100644 --- a/lib/pleroma/web/auth/pleroma_authenticator.ex +++ b/lib/pleroma/web/auth/pleroma_authenticator.ex @@ -3,8 +3,8 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.Auth.PleromaAuthenticator do -  alias Pleroma.User    alias Comeonin.Pbkdf2 +  alias Pleroma.User    @behaviour Pleroma.Web.Auth.Authenticator diff --git a/lib/pleroma/web/channels/user_socket.ex b/lib/pleroma/web/channels/user_socket.ex index aed8475fd..3a700fa3b 100644 --- a/lib/pleroma/web/channels/user_socket.ex +++ b/lib/pleroma/web/channels/user_socket.ex @@ -23,7 +23,7 @@ defmodule Pleroma.Web.UserSocket do    # performing token verification on connect.    def connect(%{"token" => token}, socket) do      with true <- Pleroma.Config.get([:chat, :enabled]), -         {:ok, user_id} <- Phoenix.Token.verify(socket, "user socket", token, max_age: 84600), +         {:ok, user_id} <- Phoenix.Token.verify(socket, "user socket", token, max_age: 84_600),           %User{} = user <- Pleroma.Repo.get(User, user_id) do        {:ok, assign(socket, :user_name, user.nickname)}      else diff --git a/lib/pleroma/web/chat_channel.ex b/lib/pleroma/web/chat_channel.ex index fe63ede66..f63f4bda1 100644 --- a/lib/pleroma/web/chat_channel.ex +++ b/lib/pleroma/web/chat_channel.ex @@ -4,8 +4,8 @@  defmodule Pleroma.Web.ChatChannel do    use Phoenix.Channel -  alias Pleroma.Web.ChatChannel.ChatChannelState    alias Pleroma.User +  alias Pleroma.Web.ChatChannel.ChatChannelState    def join("chat:public", _message, socket) do      send(self(), :after_join) @@ -48,7 +48,7 @@ defmodule Pleroma.Web.ChatChannel.ChatChannelState do      end)    end -  def messages() do +  def messages do      Agent.get(__MODULE__, fn state -> state[:messages] |> Enum.reverse() end)    end  end diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 07bd6548a..de0759fb0 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -3,14 +3,14 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.CommonAPI do -  alias Pleroma.User -  alias Pleroma.Repo    alias Pleroma.Activity +  alias Pleroma.Formatter    alias Pleroma.Object +  alias Pleroma.Repo    alias Pleroma.ThreadMute +  alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.ActivityPub.Utils -  alias Pleroma.Formatter    import Pleroma.Web.CommonAPI.Utils @@ -27,6 +27,42 @@ defmodule Pleroma.Web.CommonAPI do      end    end +  def unfollow(follower, unfollowed) do +    with {:ok, follower, _follow_activity} <- User.unfollow(follower, unfollowed), +         {:ok, _activity} <- ActivityPub.unfollow(follower, unfollowed) do +      {:ok, follower} +    end +  end + +  def accept_follow_request(follower, followed) do +    with {:ok, follower} <- User.maybe_follow(follower, followed), +         %Activity{} = follow_activity <- Utils.fetch_latest_follow(follower, followed), +         {:ok, follow_activity} <- Utils.update_follow_state(follow_activity, "accept"), +         {:ok, _activity} <- +           ActivityPub.accept(%{ +             to: [follower.ap_id], +             actor: followed, +             object: follow_activity.data["id"], +             type: "Accept" +           }) do +      {:ok, follower} +    end +  end + +  def reject_follow_request(follower, followed) do +    with %Activity{} = follow_activity <- Utils.fetch_latest_follow(follower, followed), +         {:ok, follow_activity} <- Utils.update_follow_state(follow_activity, "reject"), +         {:ok, _activity} <- +           ActivityPub.reject(%{ +             to: [follower.ap_id], +             actor: followed, +             object: follow_activity.data["id"], +             type: "Reject" +           }) do +      {:ok, follower} +    end +  end +    def delete(activity_id, user) do      with %Activity{data: %{"object" => %{"id" => object_id}}} <- Repo.get(Activity, activity_id),           %Object{} = object <- Object.normalize(object_id), @@ -88,8 +124,8 @@ defmodule Pleroma.Web.CommonAPI do        nil ->          "public" -      inReplyTo -> -        Pleroma.Web.MastodonAPI.StatusView.get_visibility(inReplyTo.data["object"]) +      in_reply_to -> +        Pleroma.Web.MastodonAPI.StatusView.get_visibility(in_reply_to.data["object"])      end    end @@ -101,15 +137,15 @@ defmodule Pleroma.Web.CommonAPI do      with status <- String.trim(status),           attachments <- attachments_from_ids(data), -         inReplyTo <- get_replied_to_activity(data["in_reply_to_status_id"]), +         in_reply_to <- get_replied_to_activity(data["in_reply_to_status_id"]),           {content_html, mentions, tags} <-             make_content_html(               status,               attachments,               data             ), -         {to, cc} <- to_for_user_and_mentions(user, mentions, inReplyTo, visibility), -         context <- make_context(inReplyTo), +         {to, cc} <- to_for_user_and_mentions(user, mentions, in_reply_to, visibility), +         context <- make_context(in_reply_to),           cw <- data["spoiler_text"],           full_payload <- String.trim(status <> (data["spoiler_text"] || "")),           length when length in 1..limit <- String.length(full_payload), @@ -120,7 +156,7 @@ defmodule Pleroma.Web.CommonAPI do               context,               content_html,               attachments, -             inReplyTo, +             in_reply_to,               tags,               cw,               cc diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index e4b9102c5..b7513ef28 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -6,14 +6,14 @@ defmodule Pleroma.Web.CommonAPI.Utils do    alias Calendar.Strftime    alias Comeonin.Pbkdf2    alias Pleroma.Activity +  alias Pleroma.Config    alias Pleroma.Formatter    alias Pleroma.Object    alias Pleroma.Repo    alias Pleroma.User -  alias Pleroma.Config +  alias Pleroma.Web.ActivityPub.Utils    alias Pleroma.Web.Endpoint    alias Pleroma.Web.MediaProxy -  alias Pleroma.Web.ActivityPub.Utils    # This is a hack for twidere.    def get_by_id_or_ap_id(id) do diff --git a/lib/pleroma/web/controller_helper.ex b/lib/pleroma/web/controller_helper.ex index 5915ea40e..4d6192db0 100644 --- a/lib/pleroma/web/controller_helper.ex +++ b/lib/pleroma/web/controller_helper.ex @@ -6,7 +6,8 @@ defmodule Pleroma.Web.ControllerHelper do    use Pleroma.Web, :controller    def oauth_scopes(params, default) do -    # Note: `scopes` is used by Mastodon — supporting it but sticking to OAuth's standard `scope` wherever we control it +    # Note: `scopes` is used by Mastodon — supporting it but sticking to +    # OAuth's standard `scope` wherever we control it      Pleroma.Web.OAuth.parse_scopes(params["scope"] || params["scopes"], default)    end diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index 31ffdecc0..f92724d8b 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -25,7 +25,8 @@ defmodule Pleroma.Web.Endpoint do      at: "/",      from: :pleroma,      only: -      ~w(index.html static finmoji emoji packs sounds images instance sw.js sw-pleroma.js favicon.png schemas doc) +      ~w(index.html robots.txt static finmoji emoji packs sounds images instance sw.js sw-pleroma.js favicon.png schemas doc) +    # credo:disable-for-previous-line Credo.Check.Readability.MaxLineLength    )    # Code reloading can be explicitly enabled under the diff --git a/lib/pleroma/web/federator/federator.ex b/lib/pleroma/web/federator/federator.ex index fbfe97dbc..5e690ddb8 100644 --- a/lib/pleroma/web/federator/federator.ex +++ b/lib/pleroma/web/federator/federator.ex @@ -4,27 +4,27 @@  defmodule Pleroma.Web.Federator do    alias Pleroma.Activity +  alias Pleroma.Jobs    alias Pleroma.User -  alias Pleroma.Web.WebFinger -  alias Pleroma.Web.Websub -  alias Pleroma.Web.Salmon    alias Pleroma.Web.ActivityPub.ActivityPub -  alias Pleroma.Web.ActivityPub.Visibility    alias Pleroma.Web.ActivityPub.Relay    alias Pleroma.Web.ActivityPub.Transmogrifier    alias Pleroma.Web.ActivityPub.Utils +  alias Pleroma.Web.ActivityPub.Visibility    alias Pleroma.Web.Federator.RetryQueue    alias Pleroma.Web.OStatus -  alias Pleroma.Jobs +  alias Pleroma.Web.Salmon +  alias Pleroma.Web.WebFinger +  alias Pleroma.Web.Websub    require Logger    @websub Application.get_env(:pleroma, :websub)    @ostatus Application.get_env(:pleroma, :ostatus) -  def init() do +  def init do      # 1 minute -    Process.sleep(1000 * 60 * 1) +    Process.sleep(1000 * 60)      refresh_subscriptions()    end @@ -58,7 +58,7 @@ defmodule Pleroma.Web.Federator do      Jobs.enqueue(:federator_outgoing, __MODULE__, [:request_subscription, sub])    end -  def refresh_subscriptions() do +  def refresh_subscriptions do      Jobs.enqueue(:federator_outgoing, __MODULE__, [:refresh_subscriptions])    end diff --git a/lib/pleroma/web/federator/retry_queue.ex b/lib/pleroma/web/federator/retry_queue.ex index e0ce251d2..71e49494f 100644 --- a/lib/pleroma/web/federator/retry_queue.ex +++ b/lib/pleroma/web/federator/retry_queue.ex @@ -13,7 +13,7 @@ defmodule Pleroma.Web.Federator.RetryQueue do      {:ok, %{args | queue_table: queue_table, running_jobs: :sets.new()}}    end -  def start_link() do +  def start_link do      enabled =        if Mix.env() == :test, do: true, else: Pleroma.Config.get([__MODULE__, :enabled], false) @@ -39,11 +39,11 @@ defmodule Pleroma.Web.Federator.RetryQueue do      GenServer.cast(__MODULE__, {:maybe_enqueue, data, transport, retries + 1})    end -  def get_stats() do +  def get_stats do      GenServer.call(__MODULE__, :get_stats)    end -  def reset_stats() do +  def reset_stats do      GenServer.call(__MODULE__, :reset_stats)    end @@ -55,7 +55,7 @@ defmodule Pleroma.Web.Federator.RetryQueue do      end    end -  def get_retry_timer_interval() do +  def get_retry_timer_interval do      Pleroma.Config.get([:retry_queue, :interval], 1000)    end @@ -231,7 +231,7 @@ defmodule Pleroma.Web.Federator.RetryQueue do      end    end -  defp maybe_kickoff_timer() do +  defp maybe_kickoff_timer do      GenServer.cast(__MODULE__, :kickoff_timer)    end  end diff --git a/lib/pleroma/web/mastodon_api/mastodon_api.ex b/lib/pleroma/web/mastodon_api/mastodon_api.ex index 8b1378917..54cb6c97a 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api.ex @@ -1 +1,63 @@ +defmodule Pleroma.Web.MastodonAPI.MastodonAPI do +  import Ecto.Query +  import Ecto.Changeset +  alias Pleroma.Repo +  alias Pleroma.User + +  @default_limit 20 + +  def get_followers(user, params \\ %{}) do +    user +    |> User.get_followers_query() +    |> paginate(params) +    |> Repo.all() +  end + +  def get_friends(user, params \\ %{}) do +    user +    |> User.get_friends_query() +    |> paginate(params) +    |> Repo.all() +  end + +  def paginate(query, params \\ %{}) do +    options = cast_params(params) + +    query +    |> restrict(:max_id, options) +    |> restrict(:since_id, options) +    |> restrict(:limit, options) +    |> order_by([u], fragment("? desc nulls last", u.id)) +  end + +  def cast_params(params) do +    param_types = %{ +      max_id: :string, +      since_id: :string, +      limit: :integer +    } + +    changeset = cast({%{}, param_types}, params, Map.keys(param_types)) +    changeset.changes +  end + +  defp restrict(query, :max_id, %{max_id: max_id}) do +    query +    |> where([q], q.id < ^max_id) +  end + +  defp restrict(query, :since_id, %{since_id: since_id}) do +    query +    |> where([q], q.id > ^since_id) +  end + +  defp restrict(query, :limit, options) do +    limit = Map.get(options, :limit, @default_limit) + +    query +    |> limit(^limit) +  end + +  defp restrict(query, _, _), do: query +end diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 26921d386..265bf837e 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -4,6 +4,7 @@  defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do    use Pleroma.Web, :controller +    alias Pleroma.Activity    alias Pleroma.Config    alias Pleroma.Filter @@ -13,18 +14,18 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do    alias Pleroma.Stats    alias Pleroma.User    alias Pleroma.Web +  alias Pleroma.Web.ActivityPub.ActivityPub +  alias Pleroma.Web.ActivityPub.Visibility    alias Pleroma.Web.CommonAPI -  alias Pleroma.Web.MediaProxy -    alias Pleroma.Web.MastodonAPI.AccountView    alias Pleroma.Web.MastodonAPI.FilterView    alias Pleroma.Web.MastodonAPI.ListView +  alias Pleroma.Web.MastodonAPI.MastodonAPI    alias Pleroma.Web.MastodonAPI.MastodonView -  alias Pleroma.Web.MastodonAPI.StatusView +  alias Pleroma.Web.MastodonAPI.NotificationView    alias Pleroma.Web.MastodonAPI.ReportView -  alias Pleroma.Web.ActivityPub.ActivityPub -  alias Pleroma.Web.ActivityPub.Utils -  alias Pleroma.Web.ActivityPub.Visibility +  alias Pleroma.Web.MastodonAPI.StatusView +  alias Pleroma.Web.MediaProxy    alias Pleroma.Web.OAuth.App    alias Pleroma.Web.OAuth.Authorization    alias Pleroma.Web.OAuth.Token @@ -131,8 +132,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do      json(conn, account)    end -  def user(%{assigns: %{user: for_user}} = conn, %{"id" => id}) do -    with %User{} = user <- Repo.get(User, id), +  def user(%{assigns: %{user: for_user}} = conn, %{"id" => nickname_or_id}) do +    with %User{} = user <- User.get_cached_by_nickname_or_id(nickname_or_id),           true <- User.auth_active?(user) || user.id == for_user.id || User.superuser?(for_user) do        account = AccountView.render("account.json", %{user: user, for: for_user})        json(conn, account) @@ -503,19 +504,17 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do    def notifications(%{assigns: %{user: user}} = conn, params) do      notifications = Notification.for_user(user, params) -    result = -      notifications -      |> Enum.map(fn x -> render_notification(user, x) end) -      |> Enum.filter(& &1) -      conn      |> add_link_headers(:notifications, notifications) -    |> json(result) +    |> put_view(NotificationView) +    |> render("index.json", %{notifications: notifications, for: user})    end    def get_notification(%{assigns: %{user: user}} = conn, %{"id" => id} = _params) do      with {:ok, notification} <- Notification.get(user, id) do -      json(conn, render_notification(user, notification)) +      conn +      |> put_view(NotificationView) +      |> render("show.json", %{notification: notification, for: user})      else        {:error, reason} ->          conn @@ -652,9 +651,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do      |> render("index.json", %{activities: activities, for: user, as: :activity})    end -  def followers(%{assigns: %{user: for_user}} = conn, %{"id" => id}) do +  def followers(%{assigns: %{user: for_user}} = conn, %{"id" => id} = params) do      with %User{} = user <- Repo.get(User, id), -         {:ok, followers} <- User.get_followers(user) do +         followers <- MastodonAPI.get_followers(user, params) do        followers =          cond do            for_user && user.id == for_user.id -> followers @@ -663,14 +662,15 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do          end        conn +      |> add_link_headers(:followers, followers, user)        |> put_view(AccountView)        |> render("accounts.json", %{users: followers, as: :user})      end    end -  def following(%{assigns: %{user: for_user}} = conn, %{"id" => id}) do +  def following(%{assigns: %{user: for_user}} = conn, %{"id" => id} = params) do      with %User{} = user <- Repo.get(User, id), -         {:ok, followers} <- User.get_friends(user) do +         followers <- MastodonAPI.get_friends(user, params) do        followers =          cond do            for_user && user.id == for_user.id -> followers @@ -679,6 +679,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do          end        conn +      |> add_link_headers(:following, followers, user)        |> put_view(AccountView)        |> render("accounts.json", %{users: followers, as: :user})      end @@ -694,16 +695,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do    def authorize_follow_request(%{assigns: %{user: followed}} = conn, %{"id" => id}) do      with %User{} = follower <- Repo.get(User, id), -         {:ok, follower} <- User.maybe_follow(follower, followed), -         %Activity{} = follow_activity <- Utils.fetch_latest_follow(follower, followed), -         {:ok, follow_activity} <- Utils.update_follow_state(follow_activity, "accept"), -         {:ok, _activity} <- -           ActivityPub.accept(%{ -             to: [follower.ap_id], -             actor: followed, -             object: follow_activity.data["id"], -             type: "Accept" -           }) do +         {:ok, follower} <- CommonAPI.accept_follow_request(follower, followed) do        conn        |> put_view(AccountView)        |> render("relationship.json", %{user: followed, target: follower}) @@ -717,15 +709,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do    def reject_follow_request(%{assigns: %{user: followed}} = conn, %{"id" => id}) do      with %User{} = follower <- Repo.get(User, id), -         %Activity{} = follow_activity <- Utils.fetch_latest_follow(follower, followed), -         {:ok, follow_activity} <- Utils.update_follow_state(follow_activity, "reject"), -         {:ok, _activity} <- -           ActivityPub.reject(%{ -             to: [follower.ap_id], -             actor: followed, -             object: follow_activity.data["id"], -             type: "Reject" -           }) do +         {:ok, follower} <- CommonAPI.reject_follow_request(follower, followed) do        conn        |> put_view(AccountView)        |> render("relationship.json", %{user: followed, target: follower}) @@ -767,8 +751,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do    def unfollow(%{assigns: %{user: follower}} = conn, %{"id" => id}) do      with %User{} = followed <- Repo.get(User, id), -         {:ok, _activity} <- ActivityPub.unfollow(follower, followed), -         {:ok, follower, _} <- User.unfollow(follower, followed) do +         {:ok, follower} <- CommonAPI.unfollow(follower, followed) do        conn        |> put_view(AccountView)        |> render("relationship.json", %{user: follower, target: followed}) @@ -1126,7 +1109,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do            compose: %{              me: "#{user.id}",              default_privacy: user.info.default_scope, -            default_sensitive: false +            default_sensitive: false, +            allow_content_types: Config.get([:instance, :allowed_post_formats])            },            media_attachments: %{              accept_content_types: [ @@ -1271,7 +1255,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do      end    end -  defp get_or_make_app() do +  defp get_or_make_app do      find_attrs = %{client_name: @local_mastodon_name, redirect_uris: "."}      scopes = ["read", "write", "follow", "push"] @@ -1324,45 +1308,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do      json(conn, %{})    end -  def render_notification(user, %{id: id, activity: activity, inserted_at: created_at} = _params) do -    actor = User.get_cached_by_ap_id(activity.data["actor"]) -    parent_activity = Activity.get_create_by_object_ap_id(activity.data["object"]) -    mastodon_type = Activity.mastodon_notification_type(activity) - -    response = %{ -      id: to_string(id), -      type: mastodon_type, -      created_at: CommonAPI.Utils.to_masto_date(created_at), -      account: AccountView.render("account.json", %{user: actor, for: user}) -    } - -    case mastodon_type do -      "mention" -> -        response -        |> Map.merge(%{ -          status: StatusView.render("status.json", %{activity: activity, for: user}) -        }) - -      "favourite" -> -        response -        |> Map.merge(%{ -          status: StatusView.render("status.json", %{activity: parent_activity, for: user}) -        }) - -      "reblog" -> -        response -        |> Map.merge(%{ -          status: StatusView.render("status.json", %{activity: parent_activity, for: user}) -        }) - -      "follow" -> -        response - -      _ -> -        nil -    end -  end -    def get_filters(%{assigns: %{user: user}} = conn, _) do      filters = Filter.get_filters(user)      res = FilterView.render("filters.json", filters: filters) diff --git a/lib/pleroma/web/mastodon_api/views/notification_view.ex b/lib/pleroma/web/mastodon_api/views/notification_view.ex new file mode 100644 index 000000000..27e9cab06 --- /dev/null +++ b/lib/pleroma/web/mastodon_api/views/notification_view.ex @@ -0,0 +1,64 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.MastodonAPI.NotificationView do +  use Pleroma.Web, :view + +  alias Pleroma.Activity +  alias Pleroma.Notification +  alias Pleroma.User +  alias Pleroma.Web.CommonAPI +  alias Pleroma.Web.MastodonAPI.AccountView +  alias Pleroma.Web.MastodonAPI.NotificationView +  alias Pleroma.Web.MastodonAPI.StatusView + +  def render("index.json", %{notifications: notifications, for: user}) do +    render_many(notifications, NotificationView, "show.json", %{for: user}) +  end + +  def render("show.json", %{ +        notification: %Notification{activity: activity} = notification, +        for: user +      }) do +    actor = User.get_cached_by_ap_id(activity.data["actor"]) +    parent_activity = Activity.get_create_by_object_ap_id(activity.data["object"]) +    mastodon_type = Activity.mastodon_notification_type(activity) + +    response = %{ +      id: to_string(notification.id), +      type: mastodon_type, +      created_at: CommonAPI.Utils.to_masto_date(notification.inserted_at), +      account: AccountView.render("account.json", %{user: actor, for: user}), +      pleroma: %{ +        is_seen: notification.seen +      } +    } + +    case mastodon_type do +      "mention" -> +        response +        |> Map.merge(%{ +          status: StatusView.render("status.json", %{activity: activity, for: user}) +        }) + +      "favourite" -> +        response +        |> Map.merge(%{ +          status: StatusView.render("status.json", %{activity: parent_activity, for: user}) +        }) + +      "reblog" -> +        response +        |> Map.merge(%{ +          status: StatusView.render("status.json", %{activity: parent_activity, for: user}) +        }) + +      "follow" -> +        response + +      _ -> +        nil +    end +  end +end diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index bf3aaf025..209119dd5 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -257,7 +257,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do        preview_url: href,        text_url: href,        type: type, -      description: attachment["name"] +      description: attachment["name"], +      pleroma: %{mime_type: media_type}      }    end diff --git a/lib/pleroma/web/mastodon_api/websocket_handler.ex b/lib/pleroma/web/mastodon_api/websocket_handler.ex index 8efe2efd5..9b262f461 100644 --- a/lib/pleroma/web/mastodon_api/websocket_handler.ex +++ b/lib/pleroma/web/mastodon_api/websocket_handler.ex @@ -5,9 +5,9 @@  defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do    require Logger -  alias Pleroma.Web.OAuth.Token    alias Pleroma.Repo    alias Pleroma.User +  alias Pleroma.Web.OAuth.Token    @behaviour :cowboy_websocket diff --git a/lib/pleroma/web/media_proxy/media_proxy.ex b/lib/pleroma/web/media_proxy/media_proxy.ex index 39a725a69..3bd2affe9 100644 --- a/lib/pleroma/web/media_proxy/media_proxy.ex +++ b/lib/pleroma/web/media_proxy/media_proxy.ex @@ -19,7 +19,8 @@ defmodule Pleroma.Web.MediaProxy do      else        secret = Application.get_env(:pleroma, Pleroma.Web.Endpoint)[:secret_key_base] -      # Must preserve `%2F` for compatibility with S3 (https://git.pleroma.social/pleroma/pleroma/issues/580) +      # Must preserve `%2F` for compatibility with S3 +      # https://git.pleroma.social/pleroma/pleroma/issues/580        replacement = get_replacement(url, ":2F:")        # The URL is url-decoded and encoded again to ensure it is correctly encoded and not twice. diff --git a/lib/pleroma/web/metadata/opengraph.ex b/lib/pleroma/web/metadata/opengraph.ex index cafb8134b..357b80a2d 100644 --- a/lib/pleroma/web/metadata/opengraph.ex +++ b/lib/pleroma/web/metadata/opengraph.ex @@ -88,7 +88,7 @@ defmodule Pleroma.Web.Metadata.Providers.OpenGraph do            # TODO: Add additional properties to objects when we have the data available.            # Also, Whatsapp only wants JPEG or PNGs. It seems that if we add a second og:image -          # object when a Video or GIF is attached it will display that in the Whatsapp Rich Preview. +          # object when a Video or GIF is attached it will display that in Whatsapp Rich Preview.            case media_type do              "audio" ->                [ diff --git a/lib/pleroma/web/metadata/twitter_card.ex b/lib/pleroma/web/metadata/twitter_card.ex index a0be383e5..040b872e7 100644 --- a/lib/pleroma/web/metadata/twitter_card.ex +++ b/lib/pleroma/web/metadata/twitter_card.ex @@ -97,7 +97,8 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do                  | acc                ] -            # TODO: Need the true width and height values here or Twitter renders an iFrame with a bad aspect ratio +            # TODO: Need the true width and height values here or Twitter renders an iFrame with +            # a bad aspect ratio              "video" ->                [                  {:meta, [property: "twitter:card", content: "player"], []}, diff --git a/lib/pleroma/web/metadata/utils.ex b/lib/pleroma/web/metadata/utils.ex index 5fc9c9e7b..23bbde1a6 100644 --- a/lib/pleroma/web/metadata/utils.ex +++ b/lib/pleroma/web/metadata/utils.ex @@ -1,10 +1,10 @@  # Pleroma: A lightweight social networking server -# Copyright \xc2\xa9 2017-2019 Pleroma Authors <https://pleroma.social/> +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.Metadata.Utils do -  alias Pleroma.HTML    alias Pleroma.Formatter +  alias Pleroma.HTML    alias Pleroma.Web.MediaProxy    def scrub_html_and_truncate(%{data: %{"content" => content}} = object) do diff --git a/lib/pleroma/web/nodeinfo/nodeinfo.ex b/lib/pleroma/web/nodeinfo/nodeinfo.ex deleted file mode 100644 index 8b1378917..000000000 --- a/lib/pleroma/web/nodeinfo/nodeinfo.ex +++ /dev/null @@ -1 +0,0 @@ - diff --git a/lib/pleroma/web/oauth/authorization.ex b/lib/pleroma/web/oauth/authorization.ex index d37c2cb83..a80543adf 100644 --- a/lib/pleroma/web/oauth/authorization.ex +++ b/lib/pleroma/web/oauth/authorization.ex @@ -5,10 +5,10 @@  defmodule Pleroma.Web.OAuth.Authorization do    use Ecto.Schema -  alias Pleroma.User    alias Pleroma.Repo -  alias Pleroma.Web.OAuth.Authorization +  alias Pleroma.User    alias Pleroma.Web.OAuth.App +  alias Pleroma.Web.OAuth.Authorization    import Ecto.Changeset    import Ecto.Query diff --git a/lib/pleroma/web/oauth/oauth_controller.ex b/lib/pleroma/web/oauth/oauth_controller.ex index 366085a57..d39c4a713 100644 --- a/lib/pleroma/web/oauth/oauth_controller.ex +++ b/lib/pleroma/web/oauth/oauth_controller.ex @@ -5,13 +5,13 @@  defmodule Pleroma.Web.OAuth.OAuthController do    use Pleroma.Web, :controller +  alias Comeonin.Pbkdf2 +  alias Pleroma.Repo +  alias Pleroma.User    alias Pleroma.Web.Auth.Authenticator +  alias Pleroma.Web.OAuth.App    alias Pleroma.Web.OAuth.Authorization    alias Pleroma.Web.OAuth.Token -  alias Pleroma.Web.OAuth.App -  alias Pleroma.Repo -  alias Pleroma.User -  alias Comeonin.Pbkdf2    import Pleroma.Web.ControllerHelper, only: [oauth_scopes: 2] diff --git a/lib/pleroma/web/oauth/token.ex b/lib/pleroma/web/oauth/token.ex index ca67632ba..2b074b470 100644 --- a/lib/pleroma/web/oauth/token.ex +++ b/lib/pleroma/web/oauth/token.ex @@ -7,11 +7,11 @@ defmodule Pleroma.Web.OAuth.Token do    import Ecto.Query -  alias Pleroma.User    alias Pleroma.Repo -  alias Pleroma.Web.OAuth.Token +  alias Pleroma.User    alias Pleroma.Web.OAuth.App    alias Pleroma.Web.OAuth.Authorization +  alias Pleroma.Web.OAuth.Token    schema "oauth_tokens" do      field(:token, :string) diff --git a/lib/pleroma/web/ostatus/activity_representer.ex b/lib/pleroma/web/ostatus/activity_representer.ex index 9e1f24bc4..1a1b74bb0 100644 --- a/lib/pleroma/web/ostatus/activity_representer.ex +++ b/lib/pleroma/web/ostatus/activity_representer.ex @@ -4,8 +4,8 @@  defmodule Pleroma.Web.OStatus.ActivityRepresenter do    alias Pleroma.Activity -  alias Pleroma.User    alias Pleroma.Object +  alias Pleroma.User    alias Pleroma.Web.OStatus.UserRepresenter    require Logger diff --git a/lib/pleroma/web/ostatus/feed_representer.ex b/lib/pleroma/web/ostatus/feed_representer.ex index 025d4731c..b7b97e505 100644 --- a/lib/pleroma/web/ostatus/feed_representer.ex +++ b/lib/pleroma/web/ostatus/feed_representer.ex @@ -4,8 +4,8 @@  defmodule Pleroma.Web.OStatus.FeedRepresenter do    alias Pleroma.User -  alias Pleroma.Web.OStatus    alias Pleroma.Web.MediaProxy +  alias Pleroma.Web.OStatus    alias Pleroma.Web.OStatus.ActivityRepresenter    alias Pleroma.Web.OStatus.UserRepresenter diff --git a/lib/pleroma/web/ostatus/handlers/delete_handler.ex b/lib/pleroma/web/ostatus/handlers/delete_handler.ex index 01b52f08f..b2f9f3946 100644 --- a/lib/pleroma/web/ostatus/handlers/delete_handler.ex +++ b/lib/pleroma/web/ostatus/handlers/delete_handler.ex @@ -4,9 +4,9 @@  defmodule Pleroma.Web.OStatus.DeleteHandler do    require Logger -  alias Pleroma.Web.XML    alias Pleroma.Object    alias Pleroma.Web.ActivityPub.ActivityPub +  alias Pleroma.Web.XML    def handle_delete(entry, _doc \\ nil) do      with id <- XML.string_from_xpath("//id", entry), diff --git a/lib/pleroma/web/ostatus/handlers/follow_handler.ex b/lib/pleroma/web/ostatus/handlers/follow_handler.ex index 91ad4bc40..263d3b2dc 100644 --- a/lib/pleroma/web/ostatus/handlers/follow_handler.ex +++ b/lib/pleroma/web/ostatus/handlers/follow_handler.ex @@ -3,10 +3,10 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.OStatus.FollowHandler do -  alias Pleroma.Web.XML -  alias Pleroma.Web.OStatus -  alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.User +  alias Pleroma.Web.ActivityPub.ActivityPub +  alias Pleroma.Web.OStatus +  alias Pleroma.Web.XML    def handle(entry, doc) do      with {:ok, actor} <- OStatus.find_make_or_update_user(doc), diff --git a/lib/pleroma/web/ostatus/handlers/note_handler.ex b/lib/pleroma/web/ostatus/handlers/note_handler.ex index c2e585cac..770a71a0a 100644 --- a/lib/pleroma/web/ostatus/handlers/note_handler.ex +++ b/lib/pleroma/web/ostatus/handlers/note_handler.ex @@ -4,13 +4,14 @@  defmodule Pleroma.Web.OStatus.NoteHandler do    require Logger -  alias Pleroma.Web.OStatus -  alias Pleroma.Web.XML +    alias Pleroma.Activity    alias Pleroma.Object    alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.ActivityPub.Utils    alias Pleroma.Web.CommonAPI +  alias Pleroma.Web.OStatus +  alias Pleroma.Web.XML    @doc """    Get the context for this note. Uses this: @@ -18,13 +19,13 @@ defmodule Pleroma.Web.OStatus.NoteHandler do    2. The conversation reference in the ostatus xml    3. A newly generated context id.    """ -  def get_context(entry, inReplyTo) do +  def get_context(entry, in_reply_to) do      context =        (XML.string_from_xpath("//ostatus:conversation[1]", entry) ||           XML.string_from_xpath("//ostatus:conversation[1]/@ref", entry) || "")        |> String.trim() -    with %{data: %{"context" => context}} <- Object.get_cached_by_ap_id(inReplyTo) do +    with %{data: %{"context" => context}} <- Object.get_cached_by_ap_id(in_reply_to) do        context      else        _e -> @@ -87,14 +88,14 @@ defmodule Pleroma.Web.OStatus.NoteHandler do      Map.put(note, "external_url", url)    end -  def fetch_replied_to_activity(entry, inReplyTo) do -    with %Activity{} = activity <- Activity.get_create_by_object_ap_id(inReplyTo) do +  def fetch_replied_to_activity(entry, in_reply_to) do +    with %Activity{} = activity <- Activity.get_create_by_object_ap_id(in_reply_to) do        activity      else        _e -> -        with inReplyToHref when not is_nil(inReplyToHref) <- +        with in_reply_to_href when not is_nil(in_reply_to_href) <-                 XML.string_from_xpath("//thr:in-reply-to[1]/@href", entry), -             {:ok, [activity | _]} <- OStatus.fetch_activity_from_url(inReplyToHref) do +             {:ok, [activity | _]} <- OStatus.fetch_activity_from_url(in_reply_to_href) do            activity          else            _e -> nil @@ -110,11 +111,12 @@ defmodule Pleroma.Web.OStatus.NoteHandler do           {:ok, actor} <- OStatus.find_make_or_update_user(author),           content_html <- OStatus.get_content(entry),           cw <- OStatus.get_cw(entry), -         inReplyTo <- XML.string_from_xpath("//thr:in-reply-to[1]/@ref", entry), -         inReplyToActivity <- fetch_replied_to_activity(entry, inReplyTo), -         inReplyTo <- (inReplyToActivity && inReplyToActivity.data["object"]["id"]) || inReplyTo, +         in_reply_to <- XML.string_from_xpath("//thr:in-reply-to[1]/@ref", entry), +         in_reply_to_activity <- fetch_replied_to_activity(entry, in_reply_to), +         in_reply_to <- +           (in_reply_to_activity && in_reply_to_activity.data["object"]["id"]) || in_reply_to,           attachments <- OStatus.get_attachments(entry), -         context <- get_context(entry, inReplyTo), +         context <- get_context(entry, in_reply_to),           tags <- OStatus.get_tags(entry),           mentions <- get_mentions(entry),           to <- make_to_list(actor, mentions), @@ -128,7 +130,7 @@ defmodule Pleroma.Web.OStatus.NoteHandler do               context,               content_html,               attachments, -             inReplyToActivity, +             in_reply_to_activity,               [],               cw             ), @@ -140,8 +142,8 @@ defmodule Pleroma.Web.OStatus.NoteHandler do           # TODO: Handle this case in make_note_data           note <-             if( -             inReplyTo && !inReplyToActivity, -             do: note |> Map.put("inReplyTo", inReplyTo), +             in_reply_to && !in_reply_to_activity, +             do: note |> Map.put("inReplyTo", in_reply_to),               else: note             ) do        ActivityPub.create(%{ diff --git a/lib/pleroma/web/ostatus/handlers/unfollow_handler.ex b/lib/pleroma/web/ostatus/handlers/unfollow_handler.ex index c9085894d..6596ada3b 100644 --- a/lib/pleroma/web/ostatus/handlers/unfollow_handler.ex +++ b/lib/pleroma/web/ostatus/handlers/unfollow_handler.ex @@ -3,10 +3,10 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.OStatus.UnfollowHandler do -  alias Pleroma.Web.XML -  alias Pleroma.Web.OStatus -  alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.User +  alias Pleroma.Web.ActivityPub.ActivityPub +  alias Pleroma.Web.OStatus +  alias Pleroma.Web.XML    def handle(entry, doc) do      with {:ok, actor} <- OStatus.find_make_or_update_user(doc), diff --git a/lib/pleroma/web/ostatus/ostatus.ex b/lib/pleroma/web/ostatus/ostatus.ex index b4f5761ac..266f86bf4 100644 --- a/lib/pleroma/web/ostatus/ostatus.ex +++ b/lib/pleroma/web/ostatus/ostatus.ex @@ -9,19 +9,19 @@ defmodule Pleroma.Web.OStatus do    import Pleroma.Web.XML    require Logger +  alias Pleroma.Activity +  alias Pleroma.Object    alias Pleroma.Repo    alias Pleroma.User    alias Pleroma.Web -  alias Pleroma.Object -  alias Pleroma.Activity    alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.ActivityPub.Transmogrifier -  alias Pleroma.Web.WebFinger -  alias Pleroma.Web.Websub +  alias Pleroma.Web.OStatus.DeleteHandler    alias Pleroma.Web.OStatus.FollowHandler -  alias Pleroma.Web.OStatus.UnfollowHandler    alias Pleroma.Web.OStatus.NoteHandler -  alias Pleroma.Web.OStatus.DeleteHandler +  alias Pleroma.Web.OStatus.UnfollowHandler +  alias Pleroma.Web.WebFinger +  alias Pleroma.Web.Websub    def is_representable?(%Activity{data: data}) do      object = Object.normalize(data["object"]) diff --git a/lib/pleroma/web/ostatus/ostatus_controller.ex b/lib/pleroma/web/ostatus/ostatus_controller.ex index 4e963774a..0579a5f3d 100644 --- a/lib/pleroma/web/ostatus/ostatus_controller.ex +++ b/lib/pleroma/web/ostatus/ostatus_controller.ex @@ -9,13 +9,13 @@ defmodule Pleroma.Web.OStatus.OStatusController do    alias Pleroma.Object    alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub -  alias Pleroma.Web.ActivityPub.Visibility    alias Pleroma.Web.ActivityPub.ActivityPubController    alias Pleroma.Web.ActivityPub.ObjectView -  alias Pleroma.Web.OStatus.ActivityRepresenter -  alias Pleroma.Web.OStatus.FeedRepresenter +  alias Pleroma.Web.ActivityPub.Visibility    alias Pleroma.Web.Federator    alias Pleroma.Web.OStatus +  alias Pleroma.Web.OStatus.ActivityRepresenter +  alias Pleroma.Web.OStatus.FeedRepresenter    alias Pleroma.Web.XML    plug(Pleroma.Web.FederatingPlug when action in [:salmon_incoming]) diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex index 33f912d34..863573185 100644 --- a/lib/pleroma/web/push/impl.ex +++ b/lib/pleroma/web/push/impl.ex @@ -5,13 +5,13 @@  defmodule Pleroma.Web.Push.Impl do    @moduledoc "The module represents implementation push web notification" -  alias Pleroma.Repo -  alias Pleroma.User    alias Pleroma.Activity +  alias Pleroma.Notification    alias Pleroma.Object -  alias Pleroma.Web.Push.Subscription +  alias Pleroma.Repo +  alias Pleroma.User    alias Pleroma.Web.Metadata.Utils -  alias Pleroma.Notification +  alias Pleroma.Web.Push.Subscription    require Logger    import Ecto.Query @@ -20,7 +20,10 @@ defmodule Pleroma.Web.Push.Impl do    @doc "Performs sending notifications for user subscriptions"    @spec perform_send(Notification.t()) :: list(any) -  def perform_send(%{activity: %{data: %{"type" => activity_type}}, user_id: user_id} = notif) +  def perform_send( +        %{activity: %{data: %{"type" => activity_type}, id: activity_id}, user_id: user_id} = +          notif +      )        when activity_type in @types do      actor = User.get_cached_by_ap_id(notif.activity.data["actor"]) @@ -37,7 +40,10 @@ defmodule Pleroma.Web.Push.Impl do          notification_id: notif.id,          notification_type: type,          icon: avatar_url, -        preferred_locale: "en" +        preferred_locale: "en", +        pleroma: %{ +          activity_id: activity_id +        }        }        |> Jason.encode!()        |> push_message(build_sub(subscription), gcm_api_key, subscription) diff --git a/lib/pleroma/web/push/push.ex b/lib/pleroma/web/push/push.ex index 951dab535..5259e8e33 100644 --- a/lib/pleroma/web/push/push.ex +++ b/lib/pleroma/web/push/push.ex @@ -13,15 +13,15 @@ defmodule Pleroma.Web.Push do    # Client API #    ############## -  def start_link() do +  def start_link do      GenServer.start_link(__MODULE__, :ok, name: __MODULE__)    end -  def vapid_config() do +  def vapid_config do      Application.get_env(:web_push_encryption, :vapid_details, [])    end -  def enabled() do +  def enabled do      case vapid_config() do        [] -> false        list when is_list(list) -> true diff --git a/lib/pleroma/web/push/subscription.ex b/lib/pleroma/web/push/subscription.ex index c90bd2bda..da301fbbc 100644 --- a/lib/pleroma/web/push/subscription.ex +++ b/lib/pleroma/web/push/subscription.ex @@ -82,8 +82,8 @@ defmodule Pleroma.Web.Push.Subscription do    end    # Some webpush clients (e.g. iOS Toot!) use an non urlsafe base64 as an encoding for the key. -  # However, the web push rfs specify to use base64 urlsafe, and the `web_push_encryption` library we use -  # requires the key to be properly encoded. So we just convert base64 to urlsafe base64. +  # However, the web push rfs specify to use base64 urlsafe, and the `web_push_encryption` library +  # we use requires the key to be properly encoded. So we just convert base64 to urlsafe base64.    defp ensure_base64_urlsafe(string) do      string      |> String.replace("+", "-") diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex index 8317a1162..92c61ff51 100644 --- a/lib/pleroma/web/rich_media/helpers.ex +++ b/lib/pleroma/web/rich_media/helpers.ex @@ -4,8 +4,8 @@  defmodule Pleroma.Web.RichMedia.Helpers do    alias Pleroma.Activity -  alias Pleroma.Object    alias Pleroma.HTML +  alias Pleroma.Object    alias Pleroma.Web.RichMedia.Parser    defp validate_page_url(page_url) when is_binary(page_url) do diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 7cf7794b3..d490b9b58 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -643,8 +643,8 @@ end  defmodule Fallback.RedirectController do    use Pleroma.Web, :controller -  alias Pleroma.Web.Metadata    alias Pleroma.User +  alias Pleroma.Web.Metadata    def redirector(conn, _params, code \\ 200) do      conn diff --git a/lib/pleroma/web/salmon/salmon.ex b/lib/pleroma/web/salmon/salmon.ex index 0a69aa1ec..0a9e51656 100644 --- a/lib/pleroma/web/salmon/salmon.ex +++ b/lib/pleroma/web/salmon/salmon.ex @@ -9,8 +9,8 @@ defmodule Pleroma.Web.Salmon do    alias Pleroma.Instances    alias Pleroma.User -  alias Pleroma.Web.XML    alias Pleroma.Web.OStatus.ActivityRepresenter +  alias Pleroma.Web.XML    require Logger @@ -86,10 +86,10 @@ defmodule Pleroma.Web.Salmon do    # Native generation of RSA keys is only available since OTP 20+ and in default build conditions    # We try at compile time to generate natively an RSA key otherwise we fallback on the old way.    try do -    _ = :public_key.generate_key({:rsa, 2048, 65537}) +    _ = :public_key.generate_key({:rsa, 2048, 65_537})      def generate_rsa_pem do -      key = :public_key.generate_key({:rsa, 2048, 65537}) +      key = :public_key.generate_key({:rsa, 2048, 65_537})        entry = :public_key.pem_entry_encode(:RSAPrivateKey, key)        pem = :public_key.pem_encode([entry]) |> String.trim_trailing()        {:ok, pem} diff --git a/lib/pleroma/web/streamer.ex b/lib/pleroma/web/streamer.ex index ad888c361..5850a9579 100644 --- a/lib/pleroma/web/streamer.ex +++ b/lib/pleroma/web/streamer.ex @@ -5,12 +5,13 @@  defmodule Pleroma.Web.Streamer do    use GenServer    require Logger -  alias Pleroma.User -  alias Pleroma.Notification    alias Pleroma.Activity +  alias Pleroma.Notification    alias Pleroma.Object    alias Pleroma.Repo +  alias Pleroma.User    alias Pleroma.Web.ActivityPub.Visibility +  alias Pleroma.Web.MastodonAPI.NotificationView    @keepalive_interval :timer.seconds(30) @@ -106,10 +107,10 @@ defmodule Pleroma.Web.Streamer do          %{            event: "notification",            payload: -            Pleroma.Web.MastodonAPI.MastodonAPIController.render_notification( -              socket.assigns["user"], -              item -            ) +            NotificationView.render("show.json", %{ +              notification: item, +              for: socket.assigns["user"] +            })              |> Jason.encode!()          }          |> Jason.encode!() diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index e2fdedb25..8ed02a93f 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -10,13 +10,13 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do    alias Comeonin.Pbkdf2    alias Pleroma.Emoji    alias Pleroma.PasswordResetToken -  alias Pleroma.User    alias Pleroma.Repo +  alias Pleroma.User    alias Pleroma.Web +  alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.CommonAPI    alias Pleroma.Web.OStatus    alias Pleroma.Web.WebFinger -  alias Pleroma.Web.ActivityPub.ActivityPub    def show_password_reset(conn, %{"token" => token}) do      with %{used: false} = token <- Repo.get_by(PasswordResetToken, %{token: token}), diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index dcb15b9a9..d57100491 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -3,16 +3,16 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.TwitterAPI.TwitterAPI do -  alias Pleroma.UserInviteToken -  alias Pleroma.User    alias Pleroma.Activity -  alias Pleroma.Repo +  alias Pleroma.Mailer    alias Pleroma.Object +  alias Pleroma.Repo +  alias Pleroma.User    alias Pleroma.UserEmail -  alias Pleroma.Mailer +  alias Pleroma.UserInviteToken    alias Pleroma.Web.ActivityPub.ActivityPub -  alias Pleroma.Web.TwitterAPI.UserView    alias Pleroma.Web.CommonAPI +  alias Pleroma.Web.TwitterAPI.UserView    import Ecto.Query @@ -35,11 +35,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do    def unfollow(%User{} = follower, params) do      with {:ok, %User{} = unfollowed} <- get_user(params), -         {:ok, follower, _follow_activity} <- User.unfollow(follower, unfollowed), -         {:ok, _activity} <- ActivityPub.unfollow(follower, unfollowed) do +         {:ok, follower} <- CommonAPI.unfollow(follower, unfollowed) do        {:ok, follower, unfollowed} -    else -      err -> err      end    end @@ -133,7 +130,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do    end    def register_user(params) do -    tokenString = params["token"] +    token_string = params["token"]      params = %{        nickname: params["nickname"], @@ -170,8 +167,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do        # no need to query DB if registration is open        token = -        unless registrations_open || is_nil(tokenString) do -          Repo.get_by(UserInviteToken, %{token: tokenString}) +        unless registrations_open || is_nil(token_string) do +          Repo.get_by(UserInviteToken, %{token: token_string})          end        cond do diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 5e4ebb8e8..6ea0b110b 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -8,23 +8,20 @@ defmodule Pleroma.Web.TwitterAPI.Controller do    import Pleroma.Web.ControllerHelper, only: [json_response: 3]    alias Ecto.Changeset -  alias Pleroma.Web.TwitterAPI.{TwitterAPI, UserView, ActivityView, NotificationView, TokenView} -  alias Pleroma.Web.CommonAPI -  alias Pleroma.{Repo, Activity, Object, User, Notification} -  alias Pleroma.Web.OAuth.Token +  alias Pleroma.Activity +  alias Pleroma.Notification +  alias Pleroma.Object +  alias Pleroma.Repo +  alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.ActivityPub.Visibility -  alias Pleroma.Web.ActivityPub.Utils    alias Pleroma.Web.CommonAPI +  alias Pleroma.Web.OAuth.Token    alias Pleroma.Web.TwitterAPI.ActivityView    alias Pleroma.Web.TwitterAPI.NotificationView +  alias Pleroma.Web.TwitterAPI.TokenView    alias Pleroma.Web.TwitterAPI.TwitterAPI    alias Pleroma.Web.TwitterAPI.UserView -  alias Pleroma.Activity -  alias Pleroma.Object -  alias Pleroma.Notification -  alias Pleroma.Repo -  alias Pleroma.User    require Logger @@ -590,16 +587,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do    def approve_friend_request(conn, %{"user_id" => uid} = _params) do      with followed <- conn.assigns[:user],           %User{} = follower <- Repo.get(User, uid), -         {:ok, follower} <- User.maybe_follow(follower, followed), -         %Activity{} = follow_activity <- Utils.fetch_latest_follow(follower, followed), -         {:ok, follow_activity} <- Utils.update_follow_state(follow_activity, "accept"), -         {:ok, _activity} <- -           ActivityPub.accept(%{ -             to: [follower.ap_id], -             actor: followed, -             object: follow_activity.data["id"], -             type: "Accept" -           }) do +         {:ok, follower} <- CommonAPI.accept_follow_request(follower, followed) do        conn        |> put_view(UserView)        |> render("show.json", %{user: follower, for: followed}) @@ -611,15 +599,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do    def deny_friend_request(conn, %{"user_id" => uid} = _params) do      with followed <- conn.assigns[:user],           %User{} = follower <- Repo.get(User, uid), -         %Activity{} = follow_activity <- Utils.fetch_latest_follow(follower, followed), -         {:ok, follow_activity} <- Utils.update_follow_state(follow_activity, "reject"), -         {:ok, _activity} <- -           ActivityPub.reject(%{ -             to: [follower.ap_id], -             actor: followed, -             object: follow_activity.data["id"], -             type: "Reject" -           }) do +         {:ok, follower} <- CommonAPI.reject_follow_request(follower, followed) do        conn        |> put_view(UserView)        |> render("show.json", %{user: follower, for: followed}) diff --git a/lib/pleroma/web/twitter_api/views/activity_view.ex b/lib/pleroma/web/twitter_api/views/activity_view.ex index 02ca4ee42..4926f007e 100644 --- a/lib/pleroma/web/twitter_api/views/activity_view.ex +++ b/lib/pleroma/web/twitter_api/views/activity_view.ex @@ -14,9 +14,9 @@ defmodule Pleroma.Web.TwitterAPI.ActivityView do    alias Pleroma.Web.CommonAPI.Utils    alias Pleroma.Web.MastodonAPI.StatusView    alias Pleroma.Web.TwitterAPI.ActivityView +  alias Pleroma.Web.TwitterAPI.Representers.ObjectRepresenter    alias Pleroma.Web.TwitterAPI.TwitterAPI    alias Pleroma.Web.TwitterAPI.UserView -  alias Pleroma.Web.TwitterAPI.Representers.ObjectRepresenter    import Ecto.Query    require Logger diff --git a/lib/pleroma/web/web_finger/web_finger.ex b/lib/pleroma/web/web_finger/web_finger.ex index 5ea5ae48e..32c3455f5 100644 --- a/lib/pleroma/web/web_finger/web_finger.ex +++ b/lib/pleroma/web/web_finger/web_finger.ex @@ -6,11 +6,11 @@ defmodule Pleroma.Web.WebFinger do    @httpoison Application.get_env(:pleroma, :httpoison)    alias Pleroma.User -  alias Pleroma.XmlBuilder    alias Pleroma.Web -  alias Pleroma.Web.XML -  alias Pleroma.Web.Salmon    alias Pleroma.Web.OStatus +  alias Pleroma.Web.Salmon +  alias Pleroma.Web.XML +  alias Pleroma.XmlBuilder    require Jason    require Logger diff --git a/lib/pleroma/web/websub/websub.ex b/lib/pleroma/web/websub/websub.ex index c00ec0858..3ffa6b416 100644 --- a/lib/pleroma/web/websub/websub.ex +++ b/lib/pleroma/web/websub/websub.ex @@ -6,14 +6,14 @@ defmodule Pleroma.Web.Websub do    alias Ecto.Changeset    alias Pleroma.Instances    alias Pleroma.Repo -  alias Pleroma.Web.Websub.WebsubServerSubscription -  alias Pleroma.Web.Websub.WebsubClientSubscription -  alias Pleroma.Web.OStatus.FeedRepresenter -  alias Pleroma.Web.XML    alias Pleroma.Web.Endpoint +  alias Pleroma.Web.Federator    alias Pleroma.Web.OStatus +  alias Pleroma.Web.OStatus.FeedRepresenter    alias Pleroma.Web.Router.Helpers -  alias Pleroma.Web.Federator +  alias Pleroma.Web.Websub.WebsubClientSubscription +  alias Pleroma.Web.Websub.WebsubServerSubscription +  alias Pleroma.Web.XML    require Logger    import Ecto.Query @@ -200,8 +200,8 @@ defmodule Pleroma.Web.Websub do           uri when not is_nil(uri) <- XML.string_from_xpath("/feed/author[1]/uri", doc),           hub when not is_nil(hub) <- XML.string_from_xpath(~S{/feed/link[@rel="hub"]/@href}, doc) do        name = XML.string_from_xpath("/feed/author[1]/name", doc) -      preferredUsername = XML.string_from_xpath("/feed/author[1]/poco:preferredUsername", doc) -      displayName = XML.string_from_xpath("/feed/author[1]/poco:displayName", doc) +      preferred_username = XML.string_from_xpath("/feed/author[1]/poco:preferredUsername", doc) +      display_name = XML.string_from_xpath("/feed/author[1]/poco:displayName", doc)        avatar = OStatus.make_avatar_object(doc)        bio = XML.string_from_xpath("/feed/author[1]/summary", doc) @@ -209,8 +209,8 @@ defmodule Pleroma.Web.Websub do         %{           "uri" => uri,           "hub" => hub, -         "nickname" => preferredUsername || name, -         "name" => displayName || name, +         "nickname" => preferred_username || name, +         "name" => display_name || name,           "host" => URI.parse(uri).host,           "avatar" => avatar,           "bio" => bio diff --git a/lib/pleroma/web/websub/websub_controller.ex b/lib/pleroma/web/websub/websub_controller.ex index ad40f1b94..9e8b48b80 100644 --- a/lib/pleroma/web/websub/websub_controller.ex +++ b/lib/pleroma/web/websub/websub_controller.ex @@ -7,8 +7,8 @@ defmodule Pleroma.Web.Websub.WebsubController do    alias Pleroma.Repo    alias Pleroma.User -  alias Pleroma.Web.Websub    alias Pleroma.Web.Federator +  alias Pleroma.Web.Websub    alias Pleroma.Web.Websub.WebsubClientSubscription    require Logger  | 
