diff --git a/docs/api.rst b/docs/api.rst index 7d5f840..97783e9 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -58,3 +58,6 @@ Exceptions .. autoclass:: flask_discord.Unauthorized :members: + +.. autoclass:: flask_discord.AccessDenied + :members: diff --git a/flask_discord/client.py b/flask_discord/client.py index b723b7e..1538cee 100644 --- a/flask_discord/client.py +++ b/flask_discord/client.py @@ -2,7 +2,7 @@ import jwt import typing import discord -from . import configs, _http, models, utils +from . import configs, _http, models, utils, exceptions from oauthlib.common import add_params_to_uri from flask import request, session, redirect, current_app @@ -144,8 +144,12 @@ class DiscordOAuth2Session(_http.DiscordOAuth2HttpClient): `session `_ object. """ - if request.values.get("error"): - return request.values["error"] + error = request.values.get("error") + if error: + if error == "access_denied": + raise exceptions.AccessDenied() + raise exceptions.HttpException(error) + state = self.__get_state() token = self._fetch_token(state) self.save_authorization_token(token) diff --git a/flask_discord/exceptions.py b/flask_discord/exceptions.py index 58407b6..3b057bc 100644 --- a/flask_discord/exceptions.py +++ b/flask_discord/exceptions.py @@ -42,3 +42,7 @@ class RateLimited(HttpException): class Unauthorized(HttpException): """A HTTP Exception raised when user is not authorized.""" + + +class AccessDenied(HttpException): + """Exception raised when user cancels OAuth authorization grant."""