Add GraphQL support to handle FeedTokens
Closes #88 Automatically create tokens for new users and actors Closes #89 Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -9,7 +9,6 @@ defmodule Mobilizon.Actors do
|
||||
alias Mobilizon.Repo
|
||||
|
||||
alias Mobilizon.Actors.{Actor, Bot, Member, Follower}
|
||||
alias Mobilizon.Users.User
|
||||
|
||||
alias Mobilizon.Service.ActivityPub
|
||||
# import Exgravatar
|
||||
@@ -505,17 +504,6 @@ defmodule Mobilizon.Actors do
|
||||
[entry] |> :public_key.pem_encode() |> String.trim_trailing()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Register user
|
||||
"""
|
||||
@spec register(map()) :: {:ok, User.t()} | {:error, String.t()}
|
||||
def register(%{email: _email, password: _password} = args) do
|
||||
with {:ok, %User{} = user} <-
|
||||
%User{} |> User.registration_changeset(args) |> Mobilizon.Repo.insert() do
|
||||
{:ok, user}
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Create a new person actor
|
||||
"""
|
||||
@@ -525,8 +513,13 @@ defmodule Mobilizon.Actors do
|
||||
pem = [entry] |> :public_key.pem_encode() |> String.trim_trailing()
|
||||
args = Map.put(args, :keys, pem)
|
||||
|
||||
actor = Mobilizon.Actors.Actor.registration_changeset(%Mobilizon.Actors.Actor{}, args)
|
||||
Mobilizon.Repo.insert(actor)
|
||||
with {:ok, %Actor{} = person} <-
|
||||
%Actor{}
|
||||
|> Actor.registration_changeset(args)
|
||||
|> Repo.insert() do
|
||||
Mobilizon.Events.create_feed_token(%{"user_id" => args["user_id"], "actor_id" => person.id})
|
||||
{:ok, person}
|
||||
end
|
||||
end
|
||||
|
||||
def register_bot_account(%{name: name, summary: summary}) do
|
||||
|
||||
@@ -9,6 +9,7 @@ defmodule Mobilizon.Events do
|
||||
alias Mobilizon.Repo
|
||||
alias Mobilizon.Events.{Event, Comment, Participant}
|
||||
alias Mobilizon.Actors.Actor
|
||||
alias Mobilizon.Users.User
|
||||
alias Mobilizon.Addresses.Address
|
||||
|
||||
def data() do
|
||||
@@ -1192,6 +1193,32 @@ defmodule Mobilizon.Events do
|
||||
|> Repo.one!()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Get feed tokens for an user
|
||||
"""
|
||||
@spec get_feed_tokens(User.t()) :: list(FeedTokens.t())
|
||||
def get_feed_tokens(%User{id: id}) do
|
||||
from(
|
||||
tk in FeedToken,
|
||||
where: tk.user_id == ^id,
|
||||
preload: [:actor, :user]
|
||||
)
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Get feed tokens for an actor
|
||||
"""
|
||||
@spec get_feed_tokens(Actor.t()) :: list(FeedTokens.t())
|
||||
def get_feed_tokens(%Actor{id: id, domain: nil}) do
|
||||
from(
|
||||
tk in FeedToken,
|
||||
where: tk.actor_id == ^id,
|
||||
preload: [:actor, :user]
|
||||
)
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Creates a feed token.
|
||||
|
||||
@@ -1205,6 +1232,8 @@ defmodule Mobilizon.Events do
|
||||
|
||||
"""
|
||||
def create_feed_token(attrs \\ %{}) do
|
||||
attrs = Map.put(attrs, "token", Ecto.UUID.generate())
|
||||
|
||||
%FeedToken{}
|
||||
|> FeedToken.changeset(attrs)
|
||||
|> Repo.insert()
|
||||
|
||||
@@ -9,8 +9,8 @@ defmodule Mobilizon.Events.FeedToken do
|
||||
alias Mobilizon.Users.User
|
||||
|
||||
@primary_key false
|
||||
schema "feed_token" do
|
||||
field(:token, :string, primary_key: true)
|
||||
schema "feed_tokens" do
|
||||
field(:token, Ecto.UUID, primary_key: true)
|
||||
belongs_to(:actor, Actor)
|
||||
belongs_to(:user, User)
|
||||
|
||||
|
||||
@@ -21,6 +21,18 @@ defmodule Mobilizon.Users do
|
||||
queryable
|
||||
end
|
||||
|
||||
@doc """
|
||||
Register user
|
||||
"""
|
||||
@spec register(map()) :: {:ok, User.t()} | {:error, String.t()}
|
||||
def register(%{email: _email, password: _password} = args) do
|
||||
with {:ok, %User{} = user} <-
|
||||
%User{} |> User.registration_changeset(args) |> Mobilizon.Repo.insert() do
|
||||
Mobilizon.Events.create_feed_token(%{"user_id" => user.id})
|
||||
{:ok, user}
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets an user by it's email
|
||||
|
||||
|
||||
Reference in New Issue
Block a user