diff options
| author | Sadposter <hannah+pleroma@coffee-and-dreams.uk> | 2019-05-20 12:39:23 +0100 | 
|---|---|---|
| committer | Sadposter <hannah+pleroma@coffee-and-dreams.uk> | 2019-05-20 12:39:23 +0100 | 
| commit | 54e9cb5c2db580bc12441f3651fa87a7b976137d (patch) | |
| tree | c96d5c0fab0279f10f49a3ef2fdd6ba6017819bb /lib | |
| parent | b30b51c3b792cc2aaf39902809bea84bd9b574a9 (diff) | |
| download | pleroma-54e9cb5c2db580bc12441f3651fa87a7b976137d.tar.gz pleroma-54e9cb5c2db580bc12441f3651fa87a7b976137d.zip | |
Add API endpoints for a custom user mascot
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/user/info.ex | 21 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 36 | ||||
| -rw-r--r-- | lib/pleroma/web/router.ex | 3 | 
3 files changed, 59 insertions, 1 deletions
| diff --git a/lib/pleroma/user/info.ex b/lib/pleroma/user/info.ex index 5f0cefc00..ffcd06e3e 100644 --- a/lib/pleroma/user/info.ex +++ b/lib/pleroma/user/info.ex @@ -43,6 +43,19 @@ defmodule Pleroma.User.Info do      field(:hide_favorites, :boolean, default: true)      field(:pinned_activities, {:array, :string}, default: [])      field(:flavour, :string, default: nil) + +    field(:mascot, :map, +      default: %{ +        id: "pleromatan", +        url: "/images/pleroma-fox-tan-smol.png", +        type: "image", +        preview_url: "/images/pleroma-fox-tan-smol.png", +        pleroma: %{ +          mime_type: "image/png" +        } +      } +    ) +      field(:emoji, {:array, :map}, default: [])      field(:notification_settings, :map, @@ -248,6 +261,14 @@ defmodule Pleroma.User.Info do      |> validate_required([:flavour])    end +  def mascot_update(info, url) do +    params = %{mascot: url} + +    info +    |> cast(params, [:mascot]) +    |> validate_required([:mascot]) +  end +    def set_source_data(info, source_data) do      params = %{source_data: source_data} diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 1051861ff..67f363859 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -707,6 +707,40 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do      end    end +  def set_mascot(%{assigns: %{user: user}} = conn, %{"file" => file}) do +    with {:ok, object} <- ActivityPub.upload(file, actor: User.ap_id(user)), +         %{} = attachment_data <- Map.put(object.data, "id", object.id), +         %{type: type} = rendered <- +           StatusView.render("attachment.json", %{attachment: attachment_data}) do +      # Reject if not an image +      if type == "image" do +        # Sure! +        # Save to the user's info +        info_changeset = User.Info.mascot_update(user.info, rendered) + +        user_changeset = +          user +          |> Ecto.Changeset.change() +          |> Ecto.Changeset.put_embed(:info, info_changeset) + +        {:ok, _user} = User.update_and_set_cache(user_changeset) + +        conn +        |> json(rendered) +      else +        conn +        |> send_resp(415, Jason.encode!(%{"error" => "mascots can only be images"})) +      end +    end +  end + +  def get_mascot(%{assigns: %{user: user}} = conn, _params) do +    %{info: %{mascot: mascot}} = user + +    conn +    |> json(mascot) +  end +    def favourited_by(%{assigns: %{user: user}} = conn, %{"id" => id}) do      with %Activity{data: %{"object" => object}} <- Repo.get(Activity, id),           %Object{data: %{"likes" => likes}} <- Object.normalize(object) do @@ -1329,7 +1363,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do              display_sensitive_media: false,              reduce_motion: false,              max_toot_chars: limit, -            mascot: "/images/pleroma-fox-tan-smol.png" +            mascot: Map.get(user.info.mascot, "url", "/images/pleroma-fox-tan-smol.png")            },            rights: %{              delete_others_notice: present?(user.info.is_moderator), diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 6a4e4a1d4..4c29b24eb 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -352,6 +352,9 @@ defmodule Pleroma.Web.Router do        post("/pleroma/flavour/:flavour", MastodonAPIController, :set_flavour) +      get("/pleroma/mascot", MastodonAPIController, :get_mascot) +      put("/pleroma/mascot", MastodonAPIController, :set_mascot) +        post("/reports", MastodonAPIController, :reports)      end | 
