add tests for token reuse
This commit is contained in:
parent
4c89219fb8
commit
a7de06ef1a
1 changed files with 121 additions and 0 deletions
|
@ -494,6 +494,127 @@ test "renders authentication page if user is already authenticated but user requ
|
||||||
assert html_response(conn, 200) =~ ~s(type="submit")
|
assert html_response(conn, 200) =~ ~s(type="submit")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "allows access if the user has a prior authorization but is authenticated with another client",
|
||||||
|
%{
|
||||||
|
app: app,
|
||||||
|
conn: conn
|
||||||
|
} do
|
||||||
|
|
||||||
|
user = insert(:user)
|
||||||
|
token = insert(:oauth_token, app: app, user: user)
|
||||||
|
|
||||||
|
other_app = insert(:oauth_app, redirect_uris: "https://other_redirect.url")
|
||||||
|
authorization = insert(:oauth_authorization, user: user, app: other_app)
|
||||||
|
_reusable_token = insert(:oauth_token, app: other_app, user: user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> AuthHelper.put_session_token(token.token)
|
||||||
|
|> AuthHelper.put_session_user(user.id)
|
||||||
|
|> get(
|
||||||
|
"/oauth/authorize",
|
||||||
|
%{
|
||||||
|
"response_type" => "code",
|
||||||
|
"client_id" => other_app.client_id,
|
||||||
|
"redirect_uri" => OAuthController.default_redirect_uri(other_app),
|
||||||
|
"scope" => "read"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
assert URI.decode(redirected_to(conn)) ==
|
||||||
|
"https://other_redirect.url?code=#{authorization.token}"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "renders login page if the user has an authorization but no token",
|
||||||
|
%{
|
||||||
|
app: app,
|
||||||
|
conn: conn
|
||||||
|
} do
|
||||||
|
|
||||||
|
user = insert(:user)
|
||||||
|
token = insert(:oauth_token, app: app, user: user)
|
||||||
|
|
||||||
|
other_app = insert(:oauth_app, redirect_uris: "https://other_redirect.url")
|
||||||
|
_authorization = insert(:oauth_authorization, user: user, app: other_app)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> AuthHelper.put_session_token(token.token)
|
||||||
|
|> AuthHelper.put_session_user(user.id)
|
||||||
|
|> get(
|
||||||
|
"/oauth/authorize",
|
||||||
|
%{
|
||||||
|
"response_type" => "code",
|
||||||
|
"client_id" => other_app.client_id,
|
||||||
|
"redirect_uri" => OAuthController.default_redirect_uri(other_app),
|
||||||
|
"scope" => "read"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
assert html_response(conn, 200) =~ ~s(type="submit")
|
||||||
|
end
|
||||||
|
|
||||||
|
test "does not reuse other people's tokens",
|
||||||
|
%{
|
||||||
|
app: app,
|
||||||
|
conn: conn
|
||||||
|
} do
|
||||||
|
|
||||||
|
user = insert(:user)
|
||||||
|
other_user = insert(:user)
|
||||||
|
token = insert(:oauth_token, app: app, user: user)
|
||||||
|
|
||||||
|
other_app = insert(:oauth_app, redirect_uris: "https://other_redirect.url")
|
||||||
|
_authorization = insert(:oauth_authorization, user: other_user, app: other_app)
|
||||||
|
_reusable_token = insert(:oauth_token, app: other_app, user: other_user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> AuthHelper.put_session_token(token.token)
|
||||||
|
|> AuthHelper.put_session_user(user.id)
|
||||||
|
|> get(
|
||||||
|
"/oauth/authorize",
|
||||||
|
%{
|
||||||
|
"response_type" => "code",
|
||||||
|
"client_id" => other_app.client_id,
|
||||||
|
"redirect_uri" => OAuthController.default_redirect_uri(other_app),
|
||||||
|
"scope" => "read"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
assert html_response(conn, 200) =~ ~s(type="submit")
|
||||||
|
end
|
||||||
|
|
||||||
|
test "does not reuse expired tokens",
|
||||||
|
%{
|
||||||
|
app: app,
|
||||||
|
conn: conn
|
||||||
|
} do
|
||||||
|
|
||||||
|
user = insert(:user)
|
||||||
|
token = insert(:oauth_token, app: app, user: user)
|
||||||
|
|
||||||
|
other_app = insert(:oauth_app, redirect_uris: "https://other_redirect.url")
|
||||||
|
_authorization = insert(:oauth_authorization, user: user, app: other_app)
|
||||||
|
_reusable_token = insert(:oauth_token, app: other_app, user: user, valid_until: NaiveDateTime.add(NaiveDateTime.utc_now(), -100))
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> AuthHelper.put_session_token(token.token)
|
||||||
|
|> AuthHelper.put_session_user(user.id)
|
||||||
|
|> get(
|
||||||
|
"/oauth/authorize",
|
||||||
|
%{
|
||||||
|
"response_type" => "code",
|
||||||
|
"client_id" => other_app.client_id,
|
||||||
|
"redirect_uri" => OAuthController.default_redirect_uri(other_app),
|
||||||
|
"scope" => "read"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
assert html_response(conn, 200) =~ ~s(type="submit")
|
||||||
|
end
|
||||||
|
|
||||||
test "with existing authentication and non-OOB `redirect_uri`, redirects to app with `token` and `state` params",
|
test "with existing authentication and non-OOB `redirect_uri`, redirects to app with `token` and `state` params",
|
||||||
%{
|
%{
|
||||||
app: app,
|
app: app,
|
||||||
|
|
Loading…
Reference in a new issue