aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorIvan Tashkinov <ivant.business@gmail.com>2019-03-20 20:25:48 +0300
committerIvan Tashkinov <ivant.business@gmail.com>2019-03-20 20:25:48 +0300
commitaf68a42ef7841013476831e92d3841088fa875df (patch)
tree9068a508be988ae2745e45e02648bc068f983129 /lib
parente17a9a1f6680bfc464a1433fcff37b6d61cc5340 (diff)
downloadpleroma-af68a42ef7841013476831e92d3841088fa875df.tar.gz
[#923] Support for multiple OAuth consumer strategies.
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/oauth/oauth_controller.ex29
-rw-r--r--lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex20
-rw-r--r--lib/pleroma/web/templates/o_auth/o_auth/show.html.eex1
3 files changed, 28 insertions, 22 deletions
diff --git a/lib/pleroma/web/oauth/oauth_controller.ex b/lib/pleroma/web/oauth/oauth_controller.ex
index a2c62ae68..b300c96df 100644
--- a/lib/pleroma/web/oauth/oauth_controller.ex
+++ b/lib/pleroma/web/oauth/oauth_controller.ex
@@ -187,25 +187,25 @@ defmodule Pleroma.Web.OAuth.OAuthController do
|> redirect(to: "/")
end
- def callback(%{assigns: %{ueberauth_failure: failure}} = conn, %{"redirect_uri" => redirect_uri}) do
+ def callback(%{assigns: %{ueberauth_failure: failure}} = conn, params) do
+ params = callback_params(params)
messages = for e <- Map.get(failure, :errors, []), do: e.message
message = Enum.join(messages, "; ")
conn
|> put_flash(:error, "Failed to authenticate: #{message}.")
- |> redirect(external: redirect_uri(conn, redirect_uri))
+ |> redirect(external: redirect_uri(conn, params["redirect_uri"]))
end
- def callback(
- conn,
- %{"client_id" => client_id, "redirect_uri" => redirect_uri} = params
- ) do
+ def callback(conn, params) do
+ params = callback_params(params)
+
with {:ok, registration} <- Authenticator.get_registration(conn, params) do
user = Repo.preload(registration, :user).user
auth_params = %{
- "client_id" => client_id,
- "redirect_uri" => redirect_uri,
+ "client_id" => params["client_id"],
+ "redirect_uri" => params["redirect_uri"],
"scopes" => oauth_scopes(params, nil)
}
@@ -230,10 +230,21 @@ defmodule Pleroma.Web.OAuth.OAuthController do
_ ->
conn
|> put_flash(:error, "Failed to set up user account.")
- |> redirect(external: redirect_uri(conn, redirect_uri))
+ |> redirect(external: redirect_uri(conn, params["redirect_uri"]))
end
end
+ defp callback_params(%{"state" => state} = params) do
+ [client_id, redirect_uri, scope, state] = String.split(state, "|")
+
+ Map.merge(params, %{
+ "client_id" => client_id,
+ "redirect_uri" => redirect_uri,
+ "scope" => scope,
+ "state" => state
+ })
+ end
+
def registration_details(conn, params) do
render(conn, "register.html", %{
client_id: params["client_id"],
diff --git a/lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex b/lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex
index e7251bce8..a64859a49 100644
--- a/lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex
+++ b/lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex
@@ -1,14 +1,10 @@
-<h2>External OAuth Authorization</h2>
-<%= form_for @conn, o_auth_path(@conn, :request, :twitter), [method: "get"], fn f -> %>
- <div class="scopes-input">
- <%= label f, :scope, "Permissions" %>
- <div class="scopes">
- <%= text_input f, :scope, value: Enum.join(@available_scopes, " ") %>
- </div>
- </div>
+<br>
+<br>
+<h2>Sign in with external provider</h2>
- <%= hidden_input f, :client_id, value: @client_id %>
- <%= hidden_input f, :redirect_uri, value: @redirect_uri %>
- <%= hidden_input f, :state, value: @state%>
- <%= submit "Sign in with Twitter" %>
+<%= for strategy <- Pleroma.Config.get([:auth, :oauth_consumer_strategies], []) do %>
+ <%= form_for @conn, o_auth_path(@conn, :request, strategy), [method: "get"], fn f -> %>
+ <%= hidden_input f, :state, value: Enum.join([@client_id, @redirect_uri, Enum.join(@available_scopes, " "), @state], "|") %>
+ <%= submit "Sign in with #{String.capitalize(strategy)}" %>
+ <% end %>
<% end %>
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
index 2fa7837fc..b2381869a 100644
--- a/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex
+++ b/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex
@@ -37,6 +37,5 @@
<% end %>
<%= if Pleroma.Config.get([:auth, :oauth_consumer_enabled]) do %>
- <br>
<%= render @view_module, "consumer.html", assigns %>
<% end %>