diff options
Diffstat (limited to 'lib/mix/tasks')
| -rw-r--r-- | lib/mix/tasks/pleroma/database.ex | 36 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/digest.ex | 33 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/instance.ex | 2 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/relay.ex | 20 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/user.ex | 4 | 
5 files changed, 93 insertions, 2 deletions
| diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index 8547a329a..bcc2052d6 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -36,6 +36,10 @@ defmodule Mix.Tasks.Pleroma.Database do    ## Remove duplicated items from following and update followers count for all users        mix pleroma.database update_users_following_followers_counts + +  ## Fix the pre-existing "likes" collections for all objects + +      mix pleroma.database fix_likes_collections    """    def run(["remove_embedded_objects" | args]) do      {options, [], []} = @@ -125,4 +129,36 @@ defmodule Mix.Tasks.Pleroma.Database do        )      end    end + +  def run(["fix_likes_collections"]) do +    import Ecto.Query + +    start_pleroma() + +    from(object in Object, +      where: fragment("(?)->>'likes' is not null", object.data), +      select: %{id: object.id, likes: fragment("(?)->>'likes'", object.data)} +    ) +    |> Pleroma.RepoStreamer.chunk_stream(100) +    |> Stream.each(fn objects -> +      ids = +        objects +        |> Enum.filter(fn object -> object.likes |> Jason.decode!() |> is_map() end) +        |> Enum.map(& &1.id) + +      Object +      |> where([object], object.id in ^ids) +      |> update([object], +        set: [ +          data: +            fragment( +              "jsonb_set(?, '{likes}', '[]'::jsonb, true)", +              object.data +            ) +        ] +      ) +      |> Repo.update_all([], timeout: :infinity) +    end) +    |> Stream.run() +  end  end diff --git a/lib/mix/tasks/pleroma/digest.ex b/lib/mix/tasks/pleroma/digest.ex new file mode 100644 index 000000000..81c207e10 --- /dev/null +++ b/lib/mix/tasks/pleroma/digest.ex @@ -0,0 +1,33 @@ +defmodule Mix.Tasks.Pleroma.Digest do +  use Mix.Task + +  @shortdoc "Manages digest emails" +  @moduledoc """ +  Manages digest emails + +  ## Send digest email since given date (user registration date by default) +  ignoring user activity status. + +  ``mix pleroma.digest test <nickname> <since_date>`` + +  Example: ``mix pleroma.digest test donaldtheduck 2019-05-20`` +  """ +  def run(["test", nickname | opts]) do +    Mix.Pleroma.start_pleroma() + +    user = Pleroma.User.get_by_nickname(nickname) + +    last_digest_emailed_at = +      with [date] <- opts, +           {:ok, datetime} <- Timex.parse(date, "{YYYY}-{0M}-{0D}") do +        datetime +      else +        _ -> user.inserted_at +      end + +    patched_user = %{user | last_digest_emailed_at: last_digest_emailed_at} + +    _user = Pleroma.DigestEmailWorker.perform(patched_user) +    Mix.shell().info("Digest email have been sent to #{nickname} (#{user.email})") +  end +end diff --git a/lib/mix/tasks/pleroma/instance.ex b/lib/mix/tasks/pleroma/instance.ex index 9080adb52..b9b1991c2 100644 --- a/lib/mix/tasks/pleroma/instance.ex +++ b/lib/mix/tasks/pleroma/instance.ex @@ -183,6 +183,7 @@ defmodule Mix.Tasks.Pleroma.Instance do          )        secret = :crypto.strong_rand_bytes(64) |> Base.encode64() |> binary_part(0, 64) +      jwt_secret = :crypto.strong_rand_bytes(64) |> Base.encode64() |> binary_part(0, 64)        signing_salt = :crypto.strong_rand_bytes(8) |> Base.encode64() |> binary_part(0, 8)        {web_push_public_key, web_push_private_key} = :crypto.generate_key(:ecdh, :prime256v1)        template_dir = Application.app_dir(:pleroma, "priv") <> "/templates" @@ -200,6 +201,7 @@ defmodule Mix.Tasks.Pleroma.Instance do            dbuser: dbuser,            dbpass: dbpass,            secret: secret, +          jwt_secret: jwt_secret,            signing_salt: signing_salt,            web_push_public_key: Base.url_encode64(web_push_public_key, padding: false),            web_push_private_key: Base.url_encode64(web_push_private_key, padding: false), diff --git a/lib/mix/tasks/pleroma/relay.ex b/lib/mix/tasks/pleroma/relay.ex index 83ed0ed02..c7324fff6 100644 --- a/lib/mix/tasks/pleroma/relay.ex +++ b/lib/mix/tasks/pleroma/relay.ex @@ -5,6 +5,7 @@  defmodule Mix.Tasks.Pleroma.Relay do    use Mix.Task    import Mix.Pleroma +  alias Pleroma.User    alias Pleroma.Web.ActivityPub.Relay    @shortdoc "Manages remote relays" @@ -22,6 +23,10 @@ defmodule Mix.Tasks.Pleroma.Relay do    ``mix pleroma.relay unfollow <relay_url>``    Example: ``mix pleroma.relay unfollow https://example.org/relay`` + +  ## List relay subscriptions + +  ``mix pleroma.relay list``    """    def run(["follow", target]) do      start_pleroma() @@ -44,4 +49,19 @@ defmodule Mix.Tasks.Pleroma.Relay do        {:error, e} -> shell_error("Error while following #{target}: #{inspect(e)}")      end    end + +  def run(["list"]) do +    start_pleroma() + +    with %User{} = user <- Relay.get_actor() do +      user.following +      |> Enum.each(fn entry -> +        URI.parse(entry) +        |> Map.get(:host) +        |> shell_info() +      end) +    else +      e -> shell_error("Error while fetching relay subscription list: #{inspect(e)}") +    end +  end  end diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index c9b84b8f9..a3f8bc945 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -31,8 +31,8 @@ defmodule Mix.Tasks.Pleroma.User do        mix pleroma.user invite [OPTION...]      Options: -    - `--expires_at DATE` - last day on which token is active (e.g. "2019-04-05") -    - `--max_use NUMBER` - maximum numbers of token uses +    - `--expires-at DATE` - last day on which token is active (e.g. "2019-04-05") +    - `--max-use NUMBER` - maximum numbers of token uses    ## List generated invites | 
