--- /dev/null
+defmodule Pleroma.UserEmail do
+ @moduledoc "User emails"
+
+ import Swoosh.Email
+
+ alias Pleroma.Web.{Endpoint, Router}
+
+ defp instance_config, do: Pleroma.Config.get(:instance)
+
+ defp instance_name, do: instance_config()[:name]
+
+ defp from do
+ {instance_name(), instance_config()[:email]}
+ end
+
+ def password_reset_email(user, password_reset_token) when is_binary(password_reset_token) do
+ password_reset_url =
+ Router.Helpers.util_url(
+ Endpoint,
+ :show_password_reset,
+ password_reset_token
+ )
+
+ html_body = """
+ <h3>Reset your password at #{instance_name()}</h3>
+ <p>Someone has requested password change for your account at #{instance_name()}.</p>
+ <p>If it was you, visit the following link to proceed: <a href="#{password_reset_url}">reset password</a>.</p>
+ <p>If it was someone else, nothing to worry about: your data is secure and your password has not been changed.</p>
+ """
+
+ new()
+ |> to({user.name, user.email})
+ |> from(from())
+ |> subject("Password reset")
+ |> html_body(html_body)
+ end
+end
get("/statusnet/conversation/:id", TwitterAPI.Controller, :fetch_conversation)
post("/account/register", TwitterAPI.Controller, :register)
- post("/account/reset_password", TwitterAPI.Controller, :reset_password)
+ post("/account/password_reset", TwitterAPI.Controller, :password_reset)
get("/search", TwitterAPI.Controller, :search)
get("/statusnet/tags/timeline/:tag", TwitterAPI.Controller, :public_and_external_timeline)
defmodule Pleroma.Web.TwitterAPI.Controller do
use Pleroma.Web, :controller
+
+ import Pleroma.Web.ControllerHelper, only: [json_response: 3]
+
+ alias Pleroma.Formatter
alias Pleroma.Web.TwitterAPI.{TwitterAPI, UserView, ActivityView, NotificationView}
alias Pleroma.Web.CommonAPI
alias Pleroma.{Repo, Activity, Object, User, Notification}
end
end
+ def password_reset(conn, params) do
+ nickname_or_email = params["email"] || params["nickname"]
+
+ with is_binary(nickname_or_email),
+ %User{local: true} = user <- User.get_by_nickname_or_email(nickname_or_email) do
+ {:ok, token_record} = Pleroma.PasswordResetToken.create_token(user)
+
+ user
+ |> Pleroma.UserEmail.password_reset_email(token_record.token)
+ |> Pleroma.Mailer.deliver()
+
+ json_response(conn, :no_content, "")
+ end
+ end
+
def update_avatar(%{assigns: %{user: user}} = conn, params) do
{:ok, object} = ActivityPub.upload(params, type: :avatar)
change = Changeset.change(user, %{avatar: object.data})