diff options
author | kaniini <nenolod@gmail.com> | 2018-11-06 16:18:12 +0000 |
---|---|---|
committer | kaniini <nenolod@gmail.com> | 2018-11-06 16:18:12 +0000 |
commit | a68c18f0ad6befe432e961bd348744b305492524 (patch) | |
tree | 4096642128f76339d86a4beee7a5b19609f05876 /lib/pleroma/web/oauth/oauth_controller.ex | |
parent | 0f3e78addb4a88106120737f2eb603ec136d99f9 (diff) | |
parent | 236fd28aca4191617cf059ff0a536f6b2fef5d64 (diff) | |
download | pleroma-a68c18f0ad6befe432e961bd348744b305492524.tar.gz |
Merge branch 'unify-mastodon-oauth' into 'develop'
Unify Mastodon Login with OAuth login.
See merge request pleroma/pleroma!429
Diffstat (limited to 'lib/pleroma/web/oauth/oauth_controller.ex')
-rw-r--r-- | lib/pleroma/web/oauth/oauth_controller.ex | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/lib/pleroma/web/oauth/oauth_controller.ex b/lib/pleroma/web/oauth/oauth_controller.ex index 5441ee0a8..35c158fbb 100644 --- a/lib/pleroma/web/oauth/oauth_controller.ex +++ b/lib/pleroma/web/oauth/oauth_controller.ex @@ -33,25 +33,35 @@ defmodule Pleroma.Web.OAuth.OAuthController do 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 - if redirect_uri == "urn:ietf:wg:oauth:2.0:oob" do - render(conn, "results.html", %{ - auth: auth - }) - else - connector = if String.contains?(redirect_uri, "?"), do: "&", else: "?" - url = "#{redirect_uri}#{connector}" - url_params = %{:code => auth.token} - - url_params = - if params["state"] do - Map.put(url_params, :state, params["state"]) - else - url_params - end - - url = "#{url}#{Plug.Conn.Query.encode(url_params)}" - - redirect(conn, external: url) + # Special case: Local MastodonFE. + redirect_uri = + if redirect_uri == "." do + mastodon_api_url(conn, :login) + else + redirect_uri + end + + cond do + redirect_uri == "urn:ietf:wg:oauth:2.0:oob" -> + render(conn, "results.html", %{ + auth: auth + }) + + true -> + connector = if String.contains?(redirect_uri, "?"), do: "&", else: "?" + url = "#{redirect_uri}#{connector}" + url_params = %{:code => auth.token} + + url_params = + if params["state"] do + Map.put(url_params, :state, params["state"]) + else + url_params + end + + url = "#{url}#{Plug.Conn.Query.encode(url_params)}" + + redirect(conn, external: url) end end end |