1
0
Fork 1
mirror of https://akkoma.dev/AkkomaGang/akkoma.git synced 2024-11-18 02:49:18 +00:00

[#923] OAuthController#callback adjustments (with tests).

This commit is contained in:
Ivan Tashkinov 2019-04-05 09:19:17 +03:00
parent 45765918c3
commit 3e7f2bfc2f
2 changed files with 14 additions and 21 deletions

View file

@ -249,13 +249,7 @@ def callback(conn, params) do
with {:ok, registration} <- Authenticator.get_registration(conn, params) do
user = Repo.preload(registration, :user).user
auth_params = %{
"client_id" => params["client_id"],
"redirect_uri" => params["redirect_uri"],
"state" => params["state"],
"scopes" => oauth_scopes(params, nil)
}
auth_params = Map.take(params, ~w(client_id redirect_uri scope scopes state))
if user do
create_authorization(

View file

@ -73,7 +73,7 @@ test "GET /oauth/prepare_request encodes parameters as `state` and redirects", %
"/oauth/prepare_request",
%{
"provider" => "twitter",
"scope" => app.scopes,
"scope" => "read follow",
"client_id" => app.client_id,
"redirect_uri" => app.redirect_uris,
"state" => "a_state"
@ -81,21 +81,20 @@ test "GET /oauth/prepare_request encodes parameters as `state` and redirects", %
)
assert response = html_response(conn, 302)
redirected_to = redirected_to(conn)
[state] = Regex.run(~r/(?<=state=).*?(?=\Z|&)/, redirected_to)
state = URI.decode(state)
assert {:ok, state_params} = Poison.decode(state)
expected_scope_param = Enum.join(app.scopes, "+")
expected_client_id_param = app.client_id
expected_redirect_uri_param = app.redirect_uris
redirect_query = URI.parse(redirected_to(conn)).query
assert %{"state" => state_param} = URI.decode_query(redirect_query)
assert {:ok, state_components} = Poison.decode(state_param)
expected_client_id = app.client_id
expected_redirect_uri = app.redirect_uris
assert %{
"scope" => ^expected_scope_param,
"client_id" => ^expected_client_id_param,
"redirect_uri" => ^expected_redirect_uri_param,
"scope" => "read follow",
"client_id" => ^expected_client_id,
"redirect_uri" => ^expected_redirect_uri,
"state" => "a_state"
} = state_params
} = state_components
end
test "on authentication error, redirects to `redirect_uri`", %{app: app, conn: conn} do
@ -158,7 +157,7 @@ test "with user-unbound registration, GET /oauth/<provider>/callback redirects t
registration = insert(:registration, user: nil)
state_params = %{
"scope" => "read",
"scope" => "read write",
"client_id" => app.client_id,
"redirect_uri" => app.redirect_uris,
"state" => "a_state"
@ -182,7 +181,7 @@ test "with user-unbound registration, GET /oauth/<provider>/callback redirects t
state_params
|> Map.delete("scope")
|> Map.merge(%{
"scopes" => ["read"],
"scope" => "read write",
"email" => Registration.email(registration),
"nickname" => Registration.nickname(registration)
})