Files
GNX-mailEnterprise/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/pocket/client.py
Iliyan Angelov c67067a2a4 Mail
2025-09-14 23:24:25 +03:00

92 lines
3.2 KiB
Python

import requests
from urllib.parse import urlencode
from django.http import HttpResponseRedirect
from django.utils.translation import gettext as _
from allauth.socialaccount.providers.oauth.client import (
OAuthClient,
OAuthError,
get_token_prefix,
)
from allauth.utils import build_absolute_uri
class PocketOAuthClient(OAuthClient):
def _get_request_token(self):
"""
Obtain a temporary request token to authorize an access token and to
sign the request to obtain the access token
"""
if self.request_token is None:
redirect_url = build_absolute_uri(self.request, self.callback_url)
headers = {
"X-Accept": "application/json",
}
data = {
"consumer_key": self.consumer_key,
"redirect_uri": redirect_url,
}
response = requests.post(
url=self.request_token_url,
json=data,
headers=headers,
)
if response.status_code != 200:
raise OAuthError(
_("Invalid response while obtaining request token" ' from "%s".')
% get_token_prefix(self.request_token_url)
)
self.request_token = response.json()["code"]
self.request.session[
"oauth_%s_request_token" % get_token_prefix(self.request_token_url)
] = self.request_token
return self.request_token
def get_redirect(self, authorization_url, extra_params):
"""
Returns a ``HttpResponseRedirect`` object to redirect the user
to the Pocket authorization URL.
"""
request_token = self._get_request_token()
params = {
"request_token": request_token,
"redirect_uri": self.request.build_absolute_uri(self.callback_url),
}
params.update(extra_params)
url = authorization_url + "?" + urlencode(params)
return HttpResponseRedirect(url)
def get_access_token(self):
"""
Obtain the access token to access private resources at the API
endpoint.
"""
if self.access_token is None:
request_token = self._get_rt_from_session()
url = self.access_token_url
headers = {
"X-Accept": "application/json",
}
data = {
"consumer_key": self.consumer_key,
"code": request_token,
}
response = requests.post(url=url, headers=headers, json=data)
if response.status_code != 200:
raise OAuthError(
_("Invalid response while obtaining access token" ' from "%s".')
% get_token_prefix(self.request_token_url)
)
r = response.json()
self.access_token = {
"oauth_token": request_token,
"oauth_token_secret": r["access_token"],
"username": r["username"],
}
self.request.session[
"oauth_%s_access_token" % get_token_prefix(self.request_token_url)
] = self.access_token
return self.access_token