diff options
| author | Mark Felder <feld@FreeBSD.org> | 2020-06-30 15:09:03 -0500 | 
|---|---|---|
| committer | Mark Felder <feld@FreeBSD.org> | 2020-06-30 15:09:03 -0500 | 
| commit | 0883a706dc376fdfb7de9df1366803e87c8e7c98 (patch) | |
| tree | dc43f7b09dddd3300efd7b3ebbc0e82e60a978c5 /lib/mix | |
| parent | 954acdda2072cac343409b3d17d831b86ac6a18c (diff) | |
| parent | b9e6ad571ac5925431466d6e6b27c0b372bb7727 (diff) | |
| download | pleroma-0883a706dc376fdfb7de9df1366803e87c8e7c98.tar.gz pleroma-0883a706dc376fdfb7de9df1366803e87c8e7c98.zip | |
Merge branch 'develop' into activation-meta
Diffstat (limited to 'lib/mix')
| -rw-r--r-- | lib/mix/tasks/pleroma/config.ex | 11 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/emoji.ex | 6 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/refresh_counter_cache.ex | 49 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/user.ex | 12 | 
4 files changed, 58 insertions, 20 deletions
| diff --git a/lib/mix/tasks/pleroma/config.ex b/lib/mix/tasks/pleroma/config.ex index 5c9ef6904..d5129d410 100644 --- a/lib/mix/tasks/pleroma/config.ex +++ b/lib/mix/tasks/pleroma/config.ex @@ -52,6 +52,7 @@ defmodule Mix.Tasks.Pleroma.Config do    defp do_migrate_to_db(config_file) do      if File.exists?(config_file) do +      shell_info("Migrating settings from file: #{Path.expand(config_file)}")        Ecto.Adapters.SQL.query!(Repo, "TRUNCATE config;")        Ecto.Adapters.SQL.query!(Repo, "ALTER SEQUENCE config_id_seq RESTART;") @@ -72,8 +73,7 @@ defmodule Mix.Tasks.Pleroma.Config do      group      |> Pleroma.Config.Loader.filter_group(settings)      |> Enum.each(fn {key, value} -> -      key = inspect(key) -      {:ok, _} = ConfigDB.update_or_create(%{group: inspect(group), key: key, value: value}) +      {:ok, _} = ConfigDB.update_or_create(%{group: group, key: key, value: value})        shell_info("Settings for key #{key} migrated.")      end) @@ -131,12 +131,9 @@ defmodule Mix.Tasks.Pleroma.Config do    end    defp write(config, file) do -    value = -      config.value -      |> ConfigDB.from_binary() -      |> inspect(limit: :infinity) +    value = inspect(config.value, limit: :infinity) -    IO.write(file, "config #{config.group}, #{config.key}, #{value}\r\n\r\n") +    IO.write(file, "config #{inspect(config.group)}, #{inspect(config.key)}, #{value}\r\n\r\n")      config    end diff --git a/lib/mix/tasks/pleroma/emoji.ex b/lib/mix/tasks/pleroma/emoji.ex index 29a5fa99c..f4eaeac98 100644 --- a/lib/mix/tasks/pleroma/emoji.ex +++ b/lib/mix/tasks/pleroma/emoji.ex @@ -237,6 +237,12 @@ defmodule Mix.Tasks.Pleroma.Emoji do      end    end +  def run(["reload"]) do +    start_pleroma() +    Pleroma.Emoji.reload() +    IO.puts("Emoji packs have been reloaded.") +  end +    defp fetch_and_decode(from) do      with {:ok, json} <- fetch(from) do        Jason.decode!(json) diff --git a/lib/mix/tasks/pleroma/refresh_counter_cache.ex b/lib/mix/tasks/pleroma/refresh_counter_cache.ex index 15b4dbfa6..efcbaa3b1 100644 --- a/lib/mix/tasks/pleroma/refresh_counter_cache.ex +++ b/lib/mix/tasks/pleroma/refresh_counter_cache.ex @@ -17,30 +17,53 @@ defmodule Mix.Tasks.Pleroma.RefreshCounterCache do    def run([]) do      Mix.Pleroma.start_pleroma() -    ["public", "unlisted", "private", "direct"] -    |> Enum.each(fn visibility -> -      count = status_visibility_count_query(visibility) -      name = "status_visibility_#{visibility}" -      CounterCache.set(name, count) -      Mix.Pleroma.shell_info("Set #{name} to #{count}") +    instances = +      Activity +      |> distinct([a], true) +      |> select([a], fragment("split_part(?, '/', 3)", a.actor)) +      |> Repo.all() + +    instances +    |> Enum.with_index(1) +    |> Enum.each(fn {instance, i} -> +      counters = instance_counters(instance) +      CounterCache.set(instance, counters) + +      Mix.Pleroma.shell_info( +        "[#{i}/#{length(instances)}] Setting #{instance} counters: #{inspect(counters)}" +      )      end)      Mix.Pleroma.shell_info("Done")    end -  defp status_visibility_count_query(visibility) do +  defp instance_counters(instance) do +    counters = %{"public" => 0, "unlisted" => 0, "private" => 0, "direct" => 0} +      Activity -    |> where( +    |> where([a], fragment("(? ->> 'type'::text) = 'Create'", a.data)) +    |> where([a], fragment("split_part(?, '/', 3) = ?", a.actor, ^instance)) +    |> select( +      [a], +      {fragment( +         "activity_visibility(?, ?, ?)", +         a.actor, +         a.recipients, +         a.data +       ), count(a.id)} +    ) +    |> group_by(        [a],        fragment( -        "activity_visibility(?, ?, ?) = ?", +        "activity_visibility(?, ?, ?)",          a.actor,          a.recipients, -        a.data, -        ^visibility +        a.data        )      ) -    |> where([a], fragment("(? ->> 'type'::text) = 'Create'", a.data)) -    |> Repo.aggregate(:count, :id, timeout: :timer.minutes(30)) +    |> Repo.all(timeout: :timer.minutes(30)) +    |> Enum.reduce(counters, fn {visibility, count}, acc -> +      Map.put(acc, visibility, count) +    end)    end  end diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index 3635c02bc..bca7e87bf 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -144,6 +144,18 @@ defmodule Mix.Tasks.Pleroma.User do      end    end +  def run(["reset_mfa", nickname]) do +    start_pleroma() + +    with %User{local: true} = user <- User.get_cached_by_nickname(nickname), +         {:ok, _token} <- Pleroma.MFA.disable(user) do +      shell_info("Multi-Factor Authentication disabled for #{user.nickname}") +    else +      _ -> +        shell_error("No local user #{nickname}") +    end +  end +    def run(["deactivate", nickname]) do      start_pleroma() | 
