Merge branch 'fix/masto-put-settings' into 'develop'
authoreal <eal@waifu.club>
Sun, 16 Dec 2018 11:21:26 +0000 (11:21 +0000)
committereal <eal@waifu.club>
Sun, 16 Dec 2018 11:21:26 +0000 (11:21 +0000)
Mastodon API: Fix PUT /api/web/settings

See merge request pleroma/pleroma!557

1  2 
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex

index 0414d73d86d815af5a4f3b64d1b06f6edc284789,a46e1878fec56148085770b524fa42bbe6f4dd29..726807f0aa3590cef98329fa7b3807dcc1a1536f
@@@ -929,7 -929,7 +929,7 @@@ defmodule Pleroma.Web.MastodonAPI.Masto
              ]
            },
            settings:
-             Map.get(user.info, :settings) ||
+             user.info.settings ||
                %{
                  onboarded: true,
                  home: %{
    def put_settings(%{assigns: %{user: user}} = conn, %{"data" => settings} = _params) do
      info_cng = User.Info.mastodon_settings_update(user.info, settings)
  
-     with changeset <- User.update_changeset(user),
+     with changeset <- Ecto.Changeset.change(user),
           changeset <- Ecto.Changeset.put_embed(changeset, :info, info_cng),
           {:ok, _user} <- User.update_and_set_cache(changeset) do
        json(conn, %{})
      else
        e ->
-         json(conn, %{error: inspect(e)})
+         conn
+         |> put_resp_content_type("application/json")
+         |> send_resp(500, Jason.encode!(%{"error" => inspect(e)}))
      end
    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_activity_by_object_ap_id(activity.data["object"])
 +    mastodon_type = Activity.mastodon_notification_type(activity)
  
 -    created_at =
 -      NaiveDateTime.to_iso8601(created_at)
 -      |> String.replace(~r/(\.\d+)?$/, ".000Z", global: false)
 -
 -    id = id |> to_string
 +    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 activity.data["type"] do
 -      "Create" ->
 -        %{
 -          id: id,
 -          type: "mention",
 -          created_at: 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})
 -        }
 +        })
  
 -      "Like" ->
 -        liked_activity = Activity.get_create_activity_by_object_ap_id(activity.data["object"])
 +      "favourite" ->
 +        response
 +        |> Map.merge(%{
 +          status: StatusView.render("status.json", %{activity: parent_activity, for: user})
 +        })
  
 -        %{
 -          id: id,
 -          type: "favourite",
 -          created_at: created_at,
 -          account: AccountView.render("account.json", %{user: actor, for: user}),
 -          status: StatusView.render("status.json", %{activity: liked_activity, for: user})
 -        }
 +      "reblog" ->
 +        response
 +        |> Map.merge(%{
 +          status: StatusView.render("status.json", %{activity: parent_activity, for: user})
 +        })
  
 -      "Announce" ->
 -        announced_activity = Activity.get_create_activity_by_object_ap_id(activity.data["object"])
 -
 -        %{
 -          id: id,
 -          type: "reblog",
 -          created_at: created_at,
 -          account: AccountView.render("account.json", %{user: actor, for: user}),
 -          status: StatusView.render("status.json", %{activity: announced_activity, for: user})
 -        }
 -
 -      "Follow" ->
 -        %{
 -          id: id,
 -          type: "follow",
 -          created_at: created_at,
 -          account: AccountView.render("account.json", %{user: actor, for: user})
 -        }
 +      "follow" ->
 +        response
  
        _ ->
          nil
    end
  
    def create_push_subscription(%{assigns: %{user: user, token: token}} = conn, params) do
 +    true = Pleroma.Web.Push.enabled()
      Pleroma.Web.Push.Subscription.delete_if_exists(user, token)
      {:ok, subscription} = Pleroma.Web.Push.Subscription.create(user, token, params)
      view = PushSubscriptionView.render("push_subscription.json", subscription: subscription)
    end
  
    def get_push_subscription(%{assigns: %{user: user, token: token}} = conn, _params) do
 +    true = Pleroma.Web.Push.enabled()
      subscription = Pleroma.Web.Push.Subscription.get(user, token)
      view = PushSubscriptionView.render("push_subscription.json", subscription: subscription)
      json(conn, view)
          %{assigns: %{user: user, token: token}} = conn,
          params
        ) do
 +    true = Pleroma.Web.Push.enabled()
      {:ok, subscription} = Pleroma.Web.Push.Subscription.update(user, token, params)
      view = PushSubscriptionView.render("push_subscription.json", subscription: subscription)
      json(conn, view)
    end
  
    def delete_push_subscription(%{assigns: %{user: user, token: token}} = conn, _params) do
 +    true = Pleroma.Web.Push.enabled()
      {:ok, _response} = Pleroma.Web.Push.Subscription.delete(user, token)
      json(conn, %{})
    end