35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
import requests
|
|
|
|
from allauth.socialaccount.providers.oauth2.client import (
|
|
OAuth2Client,
|
|
OAuth2Error,
|
|
)
|
|
|
|
|
|
class DingTalkOAuth2Client(OAuth2Client):
|
|
def get_access_token(self, code, pkce_code_verifier=None):
|
|
data = {
|
|
"clientId": self.consumer_key,
|
|
"clientSecret": self.consumer_secret,
|
|
"code": code,
|
|
"grantType": "authorization_code",
|
|
}
|
|
params = None
|
|
if pkce_code_verifier:
|
|
data["code_verifier"] = pkce_code_verifier
|
|
self._strip_empty_keys(data)
|
|
url = self.access_token_url
|
|
if self.access_token_method == "GET":
|
|
params = data
|
|
data = None
|
|
resp = requests.request(self.access_token_method, url, params=params, json=data)
|
|
resp.raise_for_status()
|
|
access_token = resp.json()
|
|
if not access_token or "accessToken" not in access_token:
|
|
raise OAuth2Error("Error retrieving access token: %s" % resp.content)
|
|
|
|
access_token["access_token"] = access_token.pop("accessToken")
|
|
access_token["refresh_token"] = access_token.pop("refreshToken")
|
|
access_token["expires_in"] = access_token.pop("expireIn")
|
|
return access_token
|