From 910d3d26647ff3499d9b105543ebbf95b50c1e18 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Sun, 30 Dec 2018 19:56:38 +0100 Subject: [PATCH] OAuth2Mixin: redirect_uri has to be supplied --- weboob/browser/browsers.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/weboob/browser/browsers.py b/weboob/browser/browsers.py index c03996d14d..ce3658a314 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'], -- GitLab