mastodon_api_controller.ex: Complete account_register/2
This commit is contained in:
parent
3aeac25959
commit
dcdff1846c
|
@ -30,6 +30,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
|
||||||
alias Pleroma.Web.OAuth.App
|
alias Pleroma.Web.OAuth.App
|
||||||
alias Pleroma.Web.OAuth.Authorization
|
alias Pleroma.Web.OAuth.Authorization
|
||||||
alias Pleroma.Web.OAuth.Token
|
alias Pleroma.Web.OAuth.Token
|
||||||
|
alias Pleroma.Web.TwitterAPI.TwitterAPI
|
||||||
|
|
||||||
import Pleroma.Web.ControllerHelper, only: [oauth_scopes: 2]
|
import Pleroma.Web.ControllerHelper, only: [oauth_scopes: 2]
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
@ -1492,7 +1493,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
|
||||||
end
|
end
|
||||||
|
|
||||||
def account_register(
|
def account_register(
|
||||||
conn,
|
%{assign: %{app: app}} = conn,
|
||||||
%{"username" => nickname, "email" => _, "password" => _, "agreement" => true} = params
|
%{"username" => nickname, "email" => _, "password" => _, "agreement" => true} = params
|
||||||
) do
|
) do
|
||||||
params =
|
params =
|
||||||
|
@ -1510,16 +1511,31 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
|
||||||
|> Map.put("bio", params["bio"] || "")
|
|> Map.put("bio", params["bio"] || "")
|
||||||
|> Map.put("confirm", params["password"])
|
|> Map.put("confirm", params["password"])
|
||||||
|
|
||||||
# TODO: Move TwitterAPI.register_user to CommonAPI ?
|
# TODO: Move TwitterAPI.register_user to CommonAPI?
|
||||||
with {:ok, user} <- TwitterAPI.register_user(params) do
|
# TODO: Fix applications to be able put only "read" scope instead for this token?
|
||||||
# Return Token
|
with {:ok, user} <- TwitterAPI.register_user(params),
|
||||||
|
token <- Token.create_token(app, user, app.scopes) do
|
||||||
|
token
|
||||||
else
|
else
|
||||||
{:error, errors} ->
|
{:error, errors} ->
|
||||||
conn
|
conn
|
||||||
|> json_reply(400, Jason.encode!(errors))
|
|> put_status(400)
|
||||||
|
|> json(Jason.encode!(errors))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def account_register(%{assign: %{app: _app}} = conn, _) do
|
||||||
|
conn
|
||||||
|
|> put_status(400)
|
||||||
|
|> json(%{error: "Missing parameters"})
|
||||||
|
end
|
||||||
|
|
||||||
|
def account_register(conn, _) do
|
||||||
|
conn
|
||||||
|
|> put_status(403)
|
||||||
|
|> json(%{error: "Invalid credentials"})
|
||||||
|
end
|
||||||
|
|
||||||
def try_render(conn, target, params)
|
def try_render(conn, target, params)
|
||||||
when is_binary(target) do
|
when is_binary(target) do
|
||||||
res = render(conn, target, params)
|
res = render(conn, target, params)
|
||||||
|
|
|
@ -292,8 +292,6 @@ defmodule Pleroma.Web.Router do
|
||||||
post("/pleroma/flavour/:flavour", MastodonAPIController, :set_flavour)
|
post("/pleroma/flavour/:flavour", MastodonAPIController, :set_flavour)
|
||||||
|
|
||||||
post("/reports", MastodonAPIController, :reports)
|
post("/reports", MastodonAPIController, :reports)
|
||||||
|
|
||||||
post("/accounts", MastodonAPIController, :account_register)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
scope [] do
|
scope [] do
|
||||||
|
@ -334,6 +332,9 @@ defmodule Pleroma.Web.Router do
|
||||||
scope "/api/v1", Pleroma.Web.MastodonAPI do
|
scope "/api/v1", Pleroma.Web.MastodonAPI do
|
||||||
pipe_through(:api)
|
pipe_through(:api)
|
||||||
|
|
||||||
|
# TODO: Restrain to Applications in the router?
|
||||||
|
post("/accounts", MastodonAPIController, :account_register)
|
||||||
|
|
||||||
get("/instance", MastodonAPIController, :masto_instance)
|
get("/instance", MastodonAPIController, :masto_instance)
|
||||||
get("/instance/peers", MastodonAPIController, :peers)
|
get("/instance/peers", MastodonAPIController, :peers)
|
||||||
post("/apps", MastodonAPIController, :create_app)
|
post("/apps", MastodonAPIController, :create_app)
|
||||||
|
|
|
@ -2340,4 +2340,31 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
|
||||||
refute acc_one == acc_two
|
refute acc_one == acc_two
|
||||||
assert acc_two == acc_three
|
assert acc_two == acc_three
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "Account registeration via Application", %{conn: conn} do
|
||||||
|
app = build(:oauth_app)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> post("/api/v1/apps", %{
|
||||||
|
client_name: app.client_name,
|
||||||
|
redirect_uris: app.redirect_uris
|
||||||
|
})
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:app, app)
|
||||||
|
|> post("/api/v1/accounts", %{
|
||||||
|
username: "lain",
|
||||||
|
email: "lain@example.org",
|
||||||
|
password: "PlzDontHeckLain",
|
||||||
|
aggreement: true
|
||||||
|
})
|
||||||
|
|
||||||
|
assert response = json_response(conn, 200)
|
||||||
|
assert response.access_token
|
||||||
|
assert response.token_type
|
||||||
|
assert response.scope
|
||||||
|
assert response.created_at
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue