Expose personal tokened feeds
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -22,7 +22,7 @@ defmodule Mobilizon.GraphQL.Resolvers.FeedToken do
|
||||
) do
|
||||
with {:is_owned, %Actor{}} <- User.owns_actor(user, actor_id),
|
||||
{:ok, feed_token} <- Events.create_feed_token(%{user_id: id, actor_id: actor_id}) do
|
||||
{:ok, feed_token}
|
||||
{:ok, to_short_uuid(feed_token)}
|
||||
else
|
||||
{:is_owned, nil} ->
|
||||
{:error, dgettext("errors", "Profile is not owned by authenticated user")}
|
||||
@@ -32,7 +32,7 @@ defmodule Mobilizon.GraphQL.Resolvers.FeedToken do
|
||||
@spec create_feed_token(any, map, map) :: {:ok, FeedToken.t()}
|
||||
def create_feed_token(_parent, %{}, %{context: %{current_user: %User{id: id}}}) do
|
||||
with {:ok, feed_token} <- Events.create_feed_token(%{user_id: id}) do
|
||||
{:ok, feed_token}
|
||||
{:ok, to_short_uuid(feed_token)}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -50,7 +50,8 @@ defmodule Mobilizon.GraphQL.Resolvers.FeedToken do
|
||||
%{token: token},
|
||||
%{context: %{current_user: %User{id: id} = _user}}
|
||||
) do
|
||||
with {:ok, token} <- Ecto.UUID.cast(token),
|
||||
with {:ok, token} <- ShortUUID.decode(token),
|
||||
{:ok, token} <- Ecto.UUID.cast(token),
|
||||
{:no_token, %FeedToken{actor: actor, user: %User{} = user} = feed_token} <-
|
||||
{:no_token, Events.get_feed_token(token)},
|
||||
{:token_from_user, true} <- {:token_from_user, id == user.id},
|
||||
@@ -65,6 +66,9 @@ defmodule Mobilizon.GraphQL.Resolvers.FeedToken do
|
||||
:error ->
|
||||
{:error, dgettext("errors", "Token is not a valid UUID")}
|
||||
|
||||
{:error, "Invalid input"} ->
|
||||
{:error, dgettext("errors", "Token is not a valid UUID")}
|
||||
|
||||
{:no_token, _} ->
|
||||
{:error, dgettext("errors", "Token does not exist")}
|
||||
|
||||
@@ -77,4 +81,8 @@ defmodule Mobilizon.GraphQL.Resolvers.FeedToken do
|
||||
def delete_feed_token(_parent, _args, %{}) do
|
||||
{:error, dgettext("errors", "You are not allowed to delete a feed token if not connected")}
|
||||
end
|
||||
|
||||
defp to_short_uuid(%FeedToken{token: token} = feed_token) do
|
||||
%FeedToken{feed_token | token: ShortUUID.encode!(token)}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,7 +4,7 @@ defmodule Mobilizon.GraphQL.Schema.Actors.PersonType do
|
||||
"""
|
||||
use Absinthe.Schema.Notation
|
||||
|
||||
import Absinthe.Resolution.Helpers, only: [dataloader: 1]
|
||||
import Absinthe.Resolution.Helpers, only: [dataloader: 2]
|
||||
|
||||
alias Mobilizon.Events
|
||||
alias Mobilizon.GraphQL.Resolvers.{Media, Person}
|
||||
@@ -53,7 +53,13 @@ defmodule Mobilizon.GraphQL.Schema.Actors.PersonType do
|
||||
)
|
||||
|
||||
field(:feed_tokens, list_of(:feed_token),
|
||||
resolve: dataloader(Events),
|
||||
resolve:
|
||||
dataloader(
|
||||
Events,
|
||||
callback: fn feed_tokens, _parent, _args ->
|
||||
{:ok, Enum.map(feed_tokens, &Map.put(&1, :token, ShortUUID.encode!(&1.token)))}
|
||||
end
|
||||
),
|
||||
description: "A list of the feed tokens for this person"
|
||||
)
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ defmodule Mobilizon.GraphQL.Schema.Events.FeedTokenType do
|
||||
description: "The actor that participates to the event"
|
||||
)
|
||||
|
||||
field(:token, :string, description: "The role of this actor at this event")
|
||||
field(:token, :string, description: "A ShortUUID private token")
|
||||
end
|
||||
|
||||
@desc "Represents a deleted feed_token"
|
||||
|
||||
@@ -4,7 +4,7 @@ defmodule Mobilizon.GraphQL.Schema.UserType do
|
||||
"""
|
||||
use Absinthe.Schema.Notation
|
||||
|
||||
import Absinthe.Resolution.Helpers, only: [dataloader: 1]
|
||||
import Absinthe.Resolution.Helpers, only: [dataloader: 2]
|
||||
|
||||
alias Mobilizon.Events
|
||||
alias Mobilizon.GraphQL.Resolvers.{Media, User}
|
||||
@@ -43,7 +43,13 @@ defmodule Mobilizon.GraphQL.Schema.UserType do
|
||||
)
|
||||
|
||||
field(:feed_tokens, list_of(:feed_token),
|
||||
resolve: dataloader(Events),
|
||||
resolve:
|
||||
dataloader(
|
||||
Events,
|
||||
callback: fn feed_tokens, _parent, _args ->
|
||||
{:ok, Enum.map(feed_tokens, &Map.put(&1, :token, ShortUUID.encode!(&1.token)))}
|
||||
end
|
||||
),
|
||||
description: "A list of the feed tokens for this user"
|
||||
)
|
||||
|
||||
|
||||
@@ -25,8 +25,9 @@ defmodule Mobilizon.Service.Export.Common do
|
||||
# Only events, not posts
|
||||
@spec fetch_events_from_token(String.t()) :: String.t()
|
||||
def fetch_events_from_token(token) do
|
||||
with {:ok, _uuid} <- Ecto.UUID.cast(token),
|
||||
%FeedToken{actor: actor, user: %User{} = user} <- Events.get_feed_token(token) do
|
||||
with {:ok, uuid} <- ShortUUID.decode(token),
|
||||
{:ok, _uuid} <- Ecto.UUID.cast(uuid),
|
||||
%FeedToken{actor: actor, user: %User{} = user} <- Events.get_feed_token(uuid) do
|
||||
case actor do
|
||||
%Actor{} = actor ->
|
||||
%{
|
||||
|
||||
@@ -26,7 +26,7 @@ defmodule Mobilizon.Web.FeedController do
|
||||
end
|
||||
|
||||
def event(conn, %{"uuid" => uuid, "format" => "ics"}) do
|
||||
return_data(conn, "ics", "event_" <> uuid, "event.ics")
|
||||
return_data(conn, "ics", "event_" <> uuid, "event")
|
||||
end
|
||||
|
||||
def event(_conn, _) do
|
||||
@@ -34,7 +34,7 @@ defmodule Mobilizon.Web.FeedController do
|
||||
end
|
||||
|
||||
def going(conn, %{"token" => token, "format" => format}) when format in @formats do
|
||||
return_data(conn, format, "token_" <> token, "events.#{format}")
|
||||
return_data(conn, format, "token_" <> token, "events")
|
||||
end
|
||||
|
||||
def going(_conn, _) do
|
||||
|
||||
Reference in New Issue
Block a user