diff --git a/weboob/browser/browsers.py b/weboob/browser/browsers.py index c03996d14de5452b57c67fcff9a232d8731f864a..ce3658a314423e095688ff96f0aec9217ce4196f 100644 --- a/weboob/browser/browsers.py +++ b/weboob/browser/browsers.py @@ -49,7 +49,7 @@ from weboob.exceptions import BrowserHTTPSDowngrade, ModuleInstallError, BrowserRedirect, BrowserIncorrectPassword from weboob.tools.log import getLogger -from weboob.tools.compat import basestring, unicode, urlparse, urljoin, quote_plus, parse_qsl +from weboob.tools.compat import basestring, unicode, urlparse, urljoin, urlencode, parse_qsl from weboob.tools.json import json from .cookies import WeboobCookieJar @@ -996,11 +996,18 @@ def do_login(self): else: self.request_authorization() + def build_authorization_parameters(self): + return {'redirect_uri': self.redirect_uri, + 'scope': self.SCOPE, + 'client_id': self.client_id, + 'response_type': 'code', + } + def build_authorization_uri(self): - return self.AUTHORIZATION_URI % {'redirect_uri': quote_plus(self.redirect_uri), - 'scope': quote_plus(self.SCOPE), - 'client_id': quote_plus(self.client_id) - } + p = urlparse(self.AUTHORIZATION_URI) + q = dict(parse_qsl(p.query)) + q.update(self.build_authorization_parameters()) + return p._replace(query=urlencode(q)).geturl() def request_authorization(self): raise BrowserRedirect(self.build_authorization_uri()) @@ -1062,11 +1069,11 @@ def code_challenge(self, verifier): digest = sha256(verifier).hexdigest() return base64.urlsafe_b64encode(digest) - def build_authorization_uri(self): - return self.AUTHORIZATION_URI % {'redirect_uri': (self.redirect_uri), - 'pkce_challenge': quote_plus(self.pkce_challenge), - 'client_id': quote_plus(self.client_id) - } + def build_authorization_parameters(self): + return {'redirect_uri': self.redirect_uri, + 'code_challenge': self.pkce_challenge, + 'client_id': self.client_id + } def build_access_token_parameters(self, values): return {'code': values['code'],