support international accounts
This commit is contained in:
parent
0aa4fd3ede
commit
ad7c2c535b
2 changed files with 41 additions and 5 deletions
|
|
@ -21,7 +21,7 @@ from __future__ import with_statement
|
||||||
|
|
||||||
from weboob.capabilities.bank import ICapBank, AccountNotFound
|
from weboob.capabilities.bank import ICapBank, AccountNotFound
|
||||||
from weboob.tools.backend import BaseBackend, BackendConfig
|
from weboob.tools.backend import BaseBackend, BackendConfig
|
||||||
from weboob.tools.value import ValueBackendPassword
|
from weboob.tools.value import ValueBackendPassword, Value
|
||||||
|
|
||||||
from .browser import HSBC
|
from .browser import HSBC
|
||||||
|
|
||||||
|
|
@ -37,12 +37,14 @@ class HSBCBackend(BaseBackend, ICapBank):
|
||||||
LICENSE = 'AGPLv3+'
|
LICENSE = 'AGPLv3+'
|
||||||
DESCRIPTION = 'HSBC France bank website'
|
DESCRIPTION = 'HSBC France bank website'
|
||||||
CONFIG = BackendConfig(ValueBackendPassword('login', label='Account ID', masked=False),
|
CONFIG = BackendConfig(ValueBackendPassword('login', label='Account ID', masked=False),
|
||||||
ValueBackendPassword('password', label='Password', regexp='^(\d+|)$'))
|
ValueBackendPassword('password', label='Password'),
|
||||||
|
Value( 'secret', label='Secret (optional)', default=''))
|
||||||
BROWSER = HSBC
|
BROWSER = HSBC
|
||||||
|
|
||||||
def create_default_browser(self):
|
def create_default_browser(self):
|
||||||
return self.create_browser(self.config['login'].get(),
|
return self.create_browser(self.config['login'].get(),
|
||||||
self.config['password'].get())
|
self.config['password'].get(),
|
||||||
|
self.config['secret'].get())
|
||||||
|
|
||||||
def iter_accounts(self):
|
def iter_accounts(self):
|
||||||
for account in self.browser.get_accounts_list():
|
for account in self.browser.get_accounts_list():
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import re
|
||||||
from weboob.tools.date import LinearDateGuesser
|
from weboob.tools.date import LinearDateGuesser
|
||||||
from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword, BasePage, BrokenPageError
|
from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword, BasePage, BrokenPageError
|
||||||
from .pages.accounts import AccountsListPage, CPTHistoryPage, CardHistoryPage
|
from .pages.accounts import AccountsListPage, CPTHistoryPage, CardHistoryPage
|
||||||
|
from .pages.login import LoginPage
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['HSBC']
|
__all__ = ['HSBC']
|
||||||
|
|
@ -43,21 +44,34 @@ class HSBC(BaseBrowser):
|
||||||
'https://client.hsbc.fr/cgi-bin/emcgi\?.*debr=COMPTES_PAN': AccountsListPage,
|
'https://client.hsbc.fr/cgi-bin/emcgi\?.*debr=COMPTES_PAN': AccountsListPage,
|
||||||
'https://client.hsbc.fr/cgi-bin/emcgi\?.*CPT_IdPrestation=.*': CPTHistoryPage,
|
'https://client.hsbc.fr/cgi-bin/emcgi\?.*CPT_IdPrestation=.*': CPTHistoryPage,
|
||||||
'https://client.hsbc.fr/cgi-bin/emcgi\?.*CB_IdPrestation=.*': CardHistoryPage,
|
'https://client.hsbc.fr/cgi-bin/emcgi\?.*CB_IdPrestation=.*': CardHistoryPage,
|
||||||
|
'https://www.hsbc.fr/.*': LoginPage,
|
||||||
|
'https://client.hsbc.fr/cgi-bin/emcgi': LoginPage,
|
||||||
}
|
}
|
||||||
|
|
||||||
_session = None
|
_session = None
|
||||||
|
|
||||||
|
def __init__(self, username, password, secret, *args, **kwargs):
|
||||||
|
self.secret = secret
|
||||||
|
BaseBrowser.__init__(self, username, password, *args, **kwargs)
|
||||||
|
|
||||||
def home(self):
|
def home(self):
|
||||||
self.login()
|
self.login()
|
||||||
|
|
||||||
def is_logged(self):
|
def is_logged(self):
|
||||||
return self._session is not None and not self.is_on_page(NotLoggedPage)
|
return self._session is not None and not self.is_on_page((NotLoggedPage,LoginPage))
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
assert isinstance(self.username, basestring)
|
assert isinstance(self.username, basestring)
|
||||||
assert isinstance(self.password, basestring)
|
assert isinstance(self.password, basestring)
|
||||||
assert self.password.isdigit()
|
|
||||||
|
|
||||||
|
self._ua_handlers['_cookies'].cookiejar.clear()
|
||||||
|
|
||||||
|
if len(self.username) == 11 and self.username.isdigit():
|
||||||
|
self.login_france()
|
||||||
|
else:
|
||||||
|
self.login_world()
|
||||||
|
|
||||||
|
def login_france(self):
|
||||||
data = {'Ident': self.username}
|
data = {'Ident': self.username}
|
||||||
r = self.readurl('https://client.hsbc.fr/cgi-bin/emcgi?Appl=WEBACC', urllib.urlencode(data), if_fail='raise')
|
r = self.readurl('https://client.hsbc.fr/cgi-bin/emcgi?Appl=WEBACC', urllib.urlencode(data), if_fail='raise')
|
||||||
m = re.search('sessionid=([^ "]+)', r, flags=re.MULTILINE)
|
m = re.search('sessionid=([^ "]+)', r, flags=re.MULTILINE)
|
||||||
|
|
@ -74,8 +88,28 @@ class HSBC(BaseBrowser):
|
||||||
m = re.search('url = "/cgi-bin/emcgi\?sessionid=([^& "]+)&debr="', r, flags=re.MULTILINE)
|
m = re.search('url = "/cgi-bin/emcgi\?sessionid=([^& "]+)&debr="', r, flags=re.MULTILINE)
|
||||||
if not m:
|
if not m:
|
||||||
raise BrokenPageError('Unable to find session token')
|
raise BrokenPageError('Unable to find session token')
|
||||||
|
|
||||||
self._session = m.group(1)
|
self._session = m.group(1)
|
||||||
|
|
||||||
|
def login_world(self):
|
||||||
|
data = {'Appl': 'WEBACC',
|
||||||
|
'CODE_ABONNE': self.username,
|
||||||
|
'Ident': self.username,
|
||||||
|
'ifr': 0,
|
||||||
|
'nextPage': 'localsso.hbfr.Redirect',
|
||||||
|
'secret': '',
|
||||||
|
'userid': self.username,
|
||||||
|
}
|
||||||
|
self.location('https://www.hsbc.fr/1/2/?idv_cmd=idv.Authentication', urllib.urlencode(data), no_login=True)
|
||||||
|
|
||||||
|
self.page.login(self.username, self.secret, self.password)
|
||||||
|
|
||||||
|
error = self.page.get_error()
|
||||||
|
if error is not None:
|
||||||
|
raise BrowserIncorrectPassword(error)
|
||||||
|
|
||||||
|
self._session = self.page.get_session()
|
||||||
|
|
||||||
def get_accounts_list(self):
|
def get_accounts_list(self):
|
||||||
self.location(self.buildurl('/cgi-bin/emcgi', sessionid=self._session, debr='COMPTES_PAN'))
|
self.location(self.buildurl('/cgi-bin/emcgi', sessionid=self._session, debr='COMPTES_PAN'))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue