logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git
commit: a80cdd590648d4eb812503fbf995598e6b4a95cb
parent e153b364a71de431787db236c57114f229162ddf
Author: lambda <pleromagit@rogerbraun.net>
Date:   Wed, 18 Apr 2018 11:26:38 +0000

Merge branch 'fix/login-with-username-or-email' into 'develop'

MastoAPI and OAuth: allow login with either email or username.

See merge request pleroma/pleroma!118

Diffstat:

Mlib/pleroma/user.ex7+++++++
Mlib/pleroma/web/mastodon_api/mastodon_api_controller.ex2+-
Mlib/pleroma/web/oauth/oauth_controller.ex2+-
Mlib/pleroma/web/templates/mastodon_api/mastodon/login.html.eex2+-
Mlib/pleroma/web/templates/o_auth/o_auth/show.html.eex2+-
5 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex @@ -250,6 +250,13 @@ defmodule Pleroma.User do Repo.get_by(User, nickname: nickname) end + def get_by_nickname_or_email(nickname_or_email) do + case user = Repo.get_by(User, nickname: nickname_or_email) do + %User{} -> user + nil -> Repo.get_by(User, email: nickname_or_email) + end + end + def get_cached_user_info(user) do key = "user_info:#{user.id}" Cachex.get!(:user_cache, key, fallback: fn _ -> user_info(user) end) diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -693,7 +693,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do end def login_post(conn, %{"authorization" => %{"name" => name, "password" => password}}) do - with %User{} = user <- User.get_cached_by_nickname(name), + with %User{} = user <- User.get_by_nickname_or_email(name), true <- Pbkdf2.checkpw(password, user.password_hash), {:ok, app} <- get_or_make_app(), {:ok, auth} <- Authorization.create_authorization(app, user), diff --git a/lib/pleroma/web/oauth/oauth_controller.ex b/lib/pleroma/web/oauth/oauth_controller.ex @@ -29,7 +29,7 @@ defmodule Pleroma.Web.OAuth.OAuthController do "redirect_uri" => redirect_uri } = params }) do - with %User{} = user <- User.get_cached_by_nickname(name), + with %User{} = user <- User.get_by_nickname_or_email(name), true <- Pbkdf2.checkpw(password, user.password_hash), %App{} = app <- Repo.get_by(App, client_id: client_id), {:ok, auth} <- Authorization.create_authorization(app, user) do diff --git a/lib/pleroma/web/templates/mastodon_api/mastodon/login.html.eex b/lib/pleroma/web/templates/mastodon_api/mastodon/login.html.eex @@ -3,7 +3,7 @@ <h2><%= @error %></h2> <% end %> <%= form_for @conn, mastodon_api_path(@conn, :login), [as: "authorization"], fn f -> %> -<%= text_input f, :name, placeholder: "Username" %> +<%= text_input f, :name, placeholder: "Username or email" %> <br> <%= password_input f, :password, placeholder: "Password" %> <br> diff --git a/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex b/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex @@ -2,7 +2,7 @@ <p class="alert alert-danger" role="alert"><%= get_flash(@conn, :error) %></p> <h2>OAuth Authorization</h2> <%= form_for @conn, o_auth_path(@conn, :authorize), [as: "authorization"], fn f -> %> -<%= label f, :name, "Name" %> +<%= label f, :name, "Name or email" %> <%= text_input f, :name %> <br> <%= label f, :password, "Password" %>