plug Pleroma.Plugs.AuthenticationPlug, %{fetcher: &Router.user_fetcher/1, optional: true}
end
- pipeline :pleroma_html do
- plug :accepts, ["html"]
- plug :fetch_session
- plug Pleroma.Plugs.OAuthPlug
- plug Pleroma.Plugs.AuthenticationPlug, %{fetcher: &Router.user_fetcher/1, optional: true}
- end
-
pipeline :well_known do
plug :accepts, ["xml", "xrd+xml"]
end
get "/emoji", UtilController, :emoji
end
- scope "/", Pleroma.Web.TwitterAPI do
- pipe_through :pleroma_html
- get "/ostatus_subscribe", UtilController, :remote_follow
- post "/ostatus_subscribe", UtilController, :do_remote_follow
- end
-
scope "/api/pleroma", Pleroma.Web.TwitterAPI do
pipe_through :authenticated_api
post "/follow_import", UtilController, :follow_import
+++ /dev/null
-<%= if @error do %>
- <h2><%= @error %></h2>
-<% end %>
-<h2>Log in to follow</h2>
-<p><%= @name %></p>
-<img height="128" width="128" src="<%= @avatar %>">
-<%= form_for @conn, util_path(@conn, :do_remote_follow), [as: "authorization"], fn f -> %>
-<%= text_input f, :name, placeholder: "Username" %>
-<br>
-<%= password_input f, :password, placeholder: "Password" %>
-<br>
-<%= hidden_input f, :id, value: @id %>
-<%= submit "Authorize" %>
-<% end %>
use Pleroma.Web, :controller
require Logger
alias Pleroma.Web
- alias Pleroma.Web.OStatus
- alias Comeonin.Pbkdf2
alias Pleroma.Formatter
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.{Repo, PasswordResetToken, User}
json(conn, "ok")
end
- def remote_follow(%{assigns: %{user: user}} = conn, %{"acct" => acct}) do
- {err, followee} = OStatus.find_or_make_user(acct)
- avatar = User.avatar_url(followee)
- name = followee.nickname
- id = followee.id
-
- if !!user do
- conn
- |> render("follow.html", %{error: err, acct: acct, avatar: avatar, name: name, id: id})
- else
- conn
- |> render("follow_login.html", %{error: false, acct: acct, avatar: avatar, name: name, id: id})
- end
- end
-
- def do_remote_follow(conn, %{"authorization" => %{"name" => username, "password" => password, "id" => id}}) do
- followee = Repo.get(User, id)
- avatar = User.avatar_url(followee)
- name = followee.nickname
- with %User{} = user <- User.get_cached_by_nickname(username),
- true <- Pbkdf2.checkpw(password, user.password_hash),
- %User{} = followed <- Repo.get(User, id),
- {:ok, follower} <- User.follow(user, followee),
- {:ok, _activity} <- ActivityPub.follow(follower, followee) do
- conn
- |> render("followed.html", %{error: false})
- else
- _e ->
- conn
- |> render("follow_login.html", %{error: "Wrong username or password", id: id, name: name, avatar: avatar})
- end
- end
- def do_remote_follow(%{assigns: %{user: user}} = conn, %{"user" => %{"id" => id}}) do
- with %User{} = followee <- Repo.get(User, id),
- {:ok, follower} <- User.follow(user, followee),
- {:ok, _activity} <- ActivityPub.follow(follower, followee) do
- conn
- |> render("followed.html", %{error: false})
- else
- e ->
- Logger.debug("Remote follow failed with error #{inspect e}")
- conn
- |> render("followed.html", %{error: inspect(e)})
- end
- end
-
@instance Application.get_env(:pleroma, :instance)
def config(conn, _params) do
case get_format(conn) do