diff options
Diffstat (limited to 'lib/mix/tasks')
| -rw-r--r-- | lib/mix/tasks/pleroma/config.ex | 4 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/notification_settings.ex | 83 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/user.ex | 15 | 
3 files changed, 91 insertions, 11 deletions
| diff --git a/lib/mix/tasks/pleroma/config.ex b/lib/mix/tasks/pleroma/config.ex index 0e21408b2..590c7a914 100644 --- a/lib/mix/tasks/pleroma/config.ex +++ b/lib/mix/tasks/pleroma/config.ex @@ -52,7 +52,9 @@ defmodule Mix.Tasks.Pleroma.Config do        |> Enum.each(fn config ->          IO.write(            file, -          "config :#{config.group}, #{config.key}, #{inspect(Config.from_binary(config.value))}\r\n\r\n" +          "config :#{config.group}, #{config.key}, #{ +            inspect(Config.from_binary(config.value), limit: :infinity) +          }\r\n\r\n"          )          if delete? do diff --git a/lib/mix/tasks/pleroma/notification_settings.ex b/lib/mix/tasks/pleroma/notification_settings.ex new file mode 100644 index 000000000..7d65f0587 --- /dev/null +++ b/lib/mix/tasks/pleroma/notification_settings.ex @@ -0,0 +1,83 @@ +defmodule Mix.Tasks.Pleroma.NotificationSettings do +  @shortdoc "Enable&Disable privacy option for push notifications" +  @moduledoc """ +  Example: + +  > mix pleroma.notification_settings --privacy-option=false --nickname-users="parallel588"  # set false only for parallel588 user +  > mix pleroma.notification_settings --privacy-option=true # set true for all users + +  """ + +  use Mix.Task +  import Mix.Pleroma +  import Ecto.Query + +  def run(args) do +    start_pleroma() + +    {options, _, _} = +      OptionParser.parse( +        args, +        strict: [ +          privacy_option: :boolean, +          email_users: :string, +          nickname_users: :string +        ] +      ) + +    privacy_option = Keyword.get(options, :privacy_option) + +    if not is_nil(privacy_option) do +      privacy_option +      |> build_query(options) +      |> Pleroma.Repo.update_all([]) +    end + +    shell_info("Done") +  end + +  defp build_query(privacy_option, options) do +    query = +      from(u in Pleroma.User, +        update: [ +          set: [ +            notification_settings: +              fragment( +                "jsonb_set(notification_settings, '{privacy_option}', ?)", +                ^privacy_option +              ) +          ] +        ] +      ) + +    user_emails = +      options +      |> Keyword.get(:email_users, "") +      |> String.split(",") +      |> Enum.map(&String.trim(&1)) +      |> Enum.reject(&(&1 == "")) + +    query = +      if length(user_emails) > 0 do +        where(query, [u], u.email in ^user_emails) +      else +        query +      end + +    user_nicknames = +      options +      |> Keyword.get(:nickname_users, "") +      |> String.split(",") +      |> Enum.map(&String.trim(&1)) +      |> Enum.reject(&(&1 == "")) + +    query = +      if length(user_nicknames) > 0 do +        where(query, [u], u.nickname in ^user_nicknames) +      else +        query +      end + +    query +  end +end diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index bc8eacda8..85c9e4954 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -8,7 +8,6 @@ defmodule Mix.Tasks.Pleroma.User do    alias Ecto.Changeset    alias Pleroma.User    alias Pleroma.UserInviteToken -  alias Pleroma.Web.OAuth    @shortdoc "Manages Pleroma users"    @moduledoc File.read!("docs/administration/CLI_tasks/user.md") @@ -354,8 +353,7 @@ defmodule Mix.Tasks.Pleroma.User do      start_pleroma()      with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do -      OAuth.Token.delete_user_tokens(user) -      OAuth.Authorization.delete_user_authorizations(user) +      User.global_sign_out(user)        shell_info("#{nickname} signed out from all apps.")      else @@ -373,9 +371,9 @@ defmodule Mix.Tasks.Pleroma.User do        users        |> Enum.each(fn user ->          shell_info( -          "#{user.nickname} moderator: #{user.info.is_moderator}, admin: #{user.info.is_admin}, locked: #{ -            user.info.locked -          }, deactivated: #{user.info.deactivated}" +          "#{user.nickname} moderator: #{user.is_moderator}, admin: #{user.is_admin}, locked: #{ +            user.locked +          }, deactivated: #{user.deactivated}"          )        end)      end) @@ -393,10 +391,7 @@ defmodule Mix.Tasks.Pleroma.User do    end    defp set_admin(user, value) do -    {:ok, user} = -      user -      |> Changeset.change(%{is_admin: value}) -      |> User.update_and_set_cache() +    {:ok, user} = User.admin_api_update(user, %{is_admin: value})      shell_info("Admin status of #{user.nickname}: #{user.is_admin}")      user | 
