From af824fde0fa81574684d3691528b90dc556d822e Mon Sep 17 00:00:00 2001 From: Laurent Bachelier Date: Wed, 24 Jul 2013 15:02:04 +0200 Subject: [PATCH] sgpe: Proper handling of login failure Would create an infinite loop --- modules/societegenerale/sgpe/browser.py | 11 ++++++----- modules/societegenerale/sgpe/pages.py | 5 +++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/societegenerale/sgpe/browser.py b/modules/societegenerale/sgpe/browser.py index e98a1ee5..bd5bd5bb 100644 --- a/modules/societegenerale/sgpe/browser.py +++ b/modules/societegenerale/sgpe/browser.py @@ -21,7 +21,7 @@ from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword from weboob.tools.ordereddict import OrderedDict -from .pages import LoginPage, AccountsPage, HistoryPage +from .pages import LoginPage, ErrorPage, AccountsPage, HistoryPage __all__ = ['SGProfessionalBrowser', 'SGEnterpriseBrowser'] @@ -35,6 +35,7 @@ class SGPEBrowser(BaseBrowser): self.PAGES = OrderedDict(( ('%s://%s/Pgn/.+PageID=SoldeV3&.+' % (self.PROTOCOL, self.DOMAIN), AccountsPage), ('%s://%s/Pgn/.+PageID=ReleveCompteV3&.+' % (self.PROTOCOL, self.DOMAIN), HistoryPage), + ('%s://%s/authent\.html' % (self.PROTOCOL, self.DOMAIN), ErrorPage), ('%s://%s/' % (self.PROTOCOL, self.DOMAIN), LoginPage), )) BaseBrowser.__init__(self, *args, **kwargs) @@ -61,12 +62,12 @@ class SGPEBrowser(BaseBrowser): # force page change if not self.is_on_page(AccountsPage): - self.accounts() - if self.is_on_page(LoginPage): + self.accounts(no_login=True) + if not self.is_logged(): raise BrowserIncorrectPassword() - def accounts(self): - self.location('/Pgn/NavigationServlet?PageID=SoldeV3&MenuID=%s&Classeur=1&NumeroPage=1' % self.MENUID) + def accounts(self, no_login=False): + self.location('/Pgn/NavigationServlet?PageID=SoldeV3&MenuID=%s&Classeur=1&NumeroPage=1' % self.MENUID, no_login=no_login) def history(self, _id, page=1): if page > 1: diff --git a/modules/societegenerale/sgpe/pages.py b/modules/societegenerale/sgpe/pages.py index 0a9033c2..473b1279 100644 --- a/modules/societegenerale/sgpe/pages.py +++ b/modules/societegenerale/sgpe/pages.py @@ -48,6 +48,11 @@ class SGPEPage(BasePage): return err[0].text.strip() +class ErrorPage(SGPEPage): + def get_error(self): + return SGPEPage.get_error(self) or 'Unknown error' + + class LoginPage(SGPEPage): def login(self, login, password): DOMAIN = self.browser.DOMAIN