diff --git a/modules/bnporc/pp/browser.py b/modules/bnporc/pp/browser.py index 35773c91..364de533 100644 --- a/modules/bnporc/pp/browser.py +++ b/modules/bnporc/pp/browser.py @@ -24,8 +24,9 @@ from weboob.browser import LoginBrowser, URL, need_login from weboob.capabilities.base import find_object from weboob.capabilities.bank import AccountNotFound from weboob.tools.json import json +from weboob.exceptions import BrowserPasswordExpired -from .pages import LoginPage, AccountsPage, AccountsIBANPage, HistoryPage, TransferInitPage +from .pages import LoginPage, AccountsPage, AccountsIBANPage, HistoryPage, TransferInitPage, ConnectionThresholdPage __all__ = ['BNPParibasBrowser'] @@ -67,6 +68,7 @@ class BNPParibasBrowser(CompatMixin, JsonBrowserMixin, LoginBrowser): 'SEEA-pa01/devServer/seeaserver', 'https://mabanqueprivee.bnpparibas.net/fr/espace-prive/comptes-et-contrats\?u=%2FSEEA-pa01%2FdevServer%2Fseeaserver', LoginPage) + con_threshold = URL(r'/fr/connexion/100-connexions', ConnectionThresholdPage) accounts = URL('udc-wspl/rest/getlstcpt', AccountsPage) ibans = URL('rib-wspl/rpc/comptes', AccountsIBANPage) history = URL('rop-wspl/rest/releveOp', HistoryPage) @@ -81,6 +83,8 @@ class BNPParibasBrowser(CompatMixin, JsonBrowserMixin, LoginBrowser): self.login.go(timestamp=timestamp()) if self.login.is_here(): self.page.login(self.username, self.password) + if self.con_threshold.is_here(): + raise BrowserPasswordExpired(u'Vous avez atteint le seuil de 100 connexions avec le même code secret. Par mesure de sécurité, veuillez le changer.') @need_login def get_accounts_list(self): diff --git a/modules/bnporc/pp/pages.py b/modules/bnporc/pp/pages.py index af004b23..25fb1e86 100644 --- a/modules/bnporc/pp/pages.py +++ b/modules/bnporc/pp/pages.py @@ -23,7 +23,7 @@ from cStringIO import StringIO from random import randint from decimal import Decimal -from weboob.browser.pages import JsonPage, LoggedPage +from weboob.browser.pages import JsonPage, LoggedPage, HTMLPage from weboob.tools.captcha.virtkeyboard import GridVirtKeyboard from weboob.capabilities.bank import Account from weboob.tools.capabilities.bank.transactions import FrenchTransaction @@ -32,6 +32,9 @@ from weboob.tools.json import json from weboob.tools.date import parse_french_date as Date +class ConnectionThresholdPage(HTMLPage): + pass + def cast(x, typ, default=None): try: return typ(x or default) @@ -88,7 +91,7 @@ class LoginPage(JsonPage): if error: msg = self.get('message') - if error == 201 or error == 21510: + if error == 201 or error == 21510 or error == 203: raise BrowserIncorrectPassword(msg) self.logger.debug('Unexpected error at login: "%s" (code=%s)' % (msg, error))