defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
use Pleroma.Web, :controller
- alias Pleroma.{Repo, App}
+ alias Pleroma.{Repo}
+ alias Pleroma.Web.OAuth.App
+ alias Pleroma.Web
+ alias Pleroma.Web.MastodonAPI.AccountView
def create_app(conn, params) do
with cs <- App.register_changeset(%App{}, params) |> IO.inspect,
end
def verify_credentials(%{assigns: %{user: user}} = conn, params) do
- account = %{
- id: user.id,
- username: user.nickname,
- acct: user.nickname,
- display_name: user.name,
- locked: false,
- created_at: user.inserted_at,
- note: user.bio,
- url: ""
+ account = AccountView.render("account.json", %{user: user})
+ json(conn, account)
+ end
+
+ def masto_instance(conn, _params) do
+ response = %{
+ uri: Web.base_url,
+ title: Web.base_url,
+ description: "A Pleroma instance, an alternative fediverse server",
+ version: "Pleroma Dev"
}
- json(conn, account)
+ json(conn, response)
end
end
--- /dev/null
+defmodule Pleroma.Web.MastodonAPI.AccountView do
+ use Pleroma.Web, :view
+ alias Pleroma.User
+
+ def render("account.json", %{user: user}) do
+ image = User.avatar_url(user)
+ user_info = User.user_info(user)
+
+ %{
+ id: user.id,
+ username: user.nickname,
+ acct: user.nickname,
+ display_name: user.name,
+ locked: false,
+ created_at: user.inserted_at,
+ followers_count: user_info.follower_count,
+ following_count: user_info.following_count,
+ statuses_count: user_info.note_count,
+ note: user.bio,
+ url: user.ap_id,
+ avatar: image,
+ avatar_static: image,
+ header: "",
+ header_static: ""
+ }
+ end
+end
-defmodule Pleroma.App do
+defmodule Pleroma.Web.OAuth.App do
use Ecto.Schema
import Ecto.{Changeset}
defmodule Pleroma.Web.OAuth.Authorization do
use Ecto.Schema
- alias Pleroma.{App, User, Repo}
- alias Pleroma.Web.OAuth.Authorization
+ alias Pleroma.{User, Repo}
+ alias Pleroma.Web.OAuth.{Authorization, App}
schema "oauth_authorizations" do
field :token, :string
defmodule Pleroma.Web.OAuth.OAuthController do
use Pleroma.Web, :controller
- alias Pleroma.Web.OAuth.{Authorization, Token}
- alias Pleroma.{Repo, User, App}
+ alias Pleroma.Web.OAuth.{Authorization, Token, App}
+ alias Pleroma.{Repo, User}
alias Comeonin.Pbkdf2
def authorize(conn, params) do
def create_authorization(conn, %{"authorization" => %{"name" => name, "password" => password, "client_id" => client_id}} = params) do
with %User{} = user <- User.get_cached_by_nickname(name),
true <- Pbkdf2.checkpw(password, user.password_hash),
- %App{} = app <- Pleroma.Repo.get_by(Pleroma.App, client_id: client_id),
+ %App{} = app <- Repo.get_by(App, client_id: client_id),
{:ok, auth} <- Authorization.create_authorization(app, user) do
render conn, "results.html", %{
auth: auth
defmodule Pleroma.Web.OAuth.Token do
use Ecto.Schema
- alias Pleroma.{App, User, Repo}
- alias Pleroma.Web.OAuth.Token
+ alias Pleroma.{User, Repo}
+ alias Pleroma.Web.OAuth.{Token, App}
schema "oauth_tokens" do
field :token, :string
plug :accepts, ["json", "xml"]
end
- pipeline :masto_config do
- plug :accepts, ["json"]
- end
-
pipeline :oauth do
plug :accepts, ["html", "json"]
end
post "/token", OAuthController, :token_exchange
end
- scope "/api/v1", Pleroma.Web do
- pipe_through :masto_config
- # TODO: Move this
- get "/instance", TwitterAPI.UtilController, :masto_instance
- post "/apps", MastodonAPI.MastodonAPIController, :create_app
+ scope "/api/v1", Pleroma.Web.MastodonAPI do
+ pipe_through :api
+ get "/instance", MastodonAPO.Controller, :masto_instance
+ post "/apps", MastodonAPIController, :create_app
end
scope "/api/v1", Pleroma.Web.MastodonAPI do
_ -> json(conn, "Pleroma Dev")
end
end
-
- # TODO: Move this
- def masto_instance(conn, _params) do
- response = %{
- uri: Web.base_url,
- title: Web.base_url,
- description: "A Pleroma instance, an alternative fediverse server",
- version: "dev"
- }
-
- json(conn, response)
- end
end