support several sub-banks of Credit du Nord
This commit is contained in:
parent
0644964e3c
commit
8cb1e8bbb9
2 changed files with 33 additions and 13 deletions
|
|
@ -21,7 +21,8 @@ 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.ordereddict import OrderedDict
|
||||||
|
from weboob.tools.value import ValueBackendPassword, Value
|
||||||
|
|
||||||
from .browser import CreditDuNordBrowser
|
from .browser import CreditDuNordBrowser
|
||||||
|
|
||||||
|
|
@ -36,12 +37,20 @@ class CreditDuNordBackend(BaseBackend, ICapBank):
|
||||||
VERSION = '0.f'
|
VERSION = '0.f'
|
||||||
DESCRIPTION = u'Crédit du Nord French bank website'
|
DESCRIPTION = u'Crédit du Nord French bank website'
|
||||||
LICENSE = 'AGPLv3+'
|
LICENSE = 'AGPLv3+'
|
||||||
CONFIG = BackendConfig(ValueBackendPassword('login', label='Account ID', masked=False),
|
website_choices = OrderedDict([(k, u'%s (%s)' % (v, k)) for k, v in sorted({
|
||||||
|
'www.credit-du-nord.fr': u'Crédit du Nord',
|
||||||
|
'www.banque-courtois.fr': u'Banque Courtois',
|
||||||
|
'www.tarneaud.fr': u'Tarneaud',
|
||||||
|
}.iteritems(), key=lambda (k, v): (v, k))])
|
||||||
|
CONFIG = BackendConfig(Value('website', label='Which bank', choices=website_choices, default='www.credit-du-nord.fr'),
|
||||||
|
ValueBackendPassword('login', label='Account ID', masked=False),
|
||||||
ValueBackendPassword('password', label='Password of account'))
|
ValueBackendPassword('password', label='Password of account'))
|
||||||
BROWSER = CreditDuNordBrowser
|
BROWSER = CreditDuNordBrowser
|
||||||
|
|
||||||
def create_default_browser(self):
|
def create_default_browser(self):
|
||||||
return self.create_browser(self.config['login'].get(), self.config['password'].get())
|
return self.create_browser(self.config['website'].get(),
|
||||||
|
self.config['login'].get(),
|
||||||
|
self.config['password'].get())
|
||||||
|
|
||||||
def iter_accounts(self):
|
def iter_accounts(self):
|
||||||
with self.browser:
|
with self.browser:
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@
|
||||||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
import re
|
||||||
import urllib
|
import urllib
|
||||||
|
|
||||||
from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword
|
from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword
|
||||||
|
|
@ -30,24 +31,27 @@ __all__ = ['CreditDuNordBrowser']
|
||||||
|
|
||||||
class CreditDuNordBrowser(BaseBrowser):
|
class CreditDuNordBrowser(BaseBrowser):
|
||||||
PROTOCOL = 'https'
|
PROTOCOL = 'https'
|
||||||
DOMAIN = 'www.credit-du-nord.fr'
|
|
||||||
CERTHASH = 'b2f8a8a7a03c54d7bb918f10eb4e141c3fb51bebf0eb8371aefb33a997efc600'
|
|
||||||
ENCODING = 'UTF-8'
|
ENCODING = 'UTF-8'
|
||||||
PAGES = {'https://www.credit-du-nord.fr/?': LoginPage,
|
PAGES = {'https://[^/]+/?': LoginPage,
|
||||||
'https://www.credit-du-nord.fr/vos-comptes/particuliers(\?.*)?': AccountsPage,
|
'https://[^/]+/.*\?.*_pageLabel=page_erreur_connexion': LoginPage,
|
||||||
'https://www.credit-du-nord.fr/vos-comptes/.*/transac/.*': TransactionsPage,
|
'https://[^/]+/vos-comptes/particuliers(\?.*)?': AccountsPage,
|
||||||
|
'https://[^/]+/vos-comptes/.*/transac/.*': TransactionsPage,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def __init__(self, website, *args, **kwargs):
|
||||||
|
self.DOMAIN = website
|
||||||
|
BaseBrowser.__init__(self, *args, **kwargs)
|
||||||
|
|
||||||
def is_logged(self):
|
def is_logged(self):
|
||||||
return self.page is not None and not self.is_on_page(LoginPage)
|
return self.page is not None and not self.is_on_page(LoginPage)
|
||||||
|
|
||||||
def home(self):
|
def home(self):
|
||||||
if self.is_logged():
|
if self.is_logged():
|
||||||
self.location('https://www.credit-du-nord.fr/vos-comptes/particuliers')
|
self.location(self.buildurl('/vos-comptes/particuliers'))
|
||||||
else:
|
else:
|
||||||
self.login()
|
self.login()
|
||||||
return
|
return
|
||||||
return self.location('https://www.credit-du-nord.fr/vos-comptes/particuliers')
|
return self.location(self.buildurl('/vos-comptes/particuliers'))
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
assert isinstance(self.username, basestring)
|
assert isinstance(self.username, basestring)
|
||||||
|
|
@ -56,21 +60,28 @@ class CreditDuNordBrowser(BaseBrowser):
|
||||||
# not necessary (and very slow)
|
# not necessary (and very slow)
|
||||||
#self.location('https://www.credit-du-nord.fr/', no_login=True)
|
#self.location('https://www.credit-du-nord.fr/', no_login=True)
|
||||||
|
|
||||||
data = {'bank': 'credit-du-nord',
|
m = re.match('www.([^\.]+).fr', self.DOMAIN)
|
||||||
|
if not m:
|
||||||
|
bank_name = 'credit-du-nord'
|
||||||
|
self.logger.error('Unable to find bank name for %s' % self.DOMAIN)
|
||||||
|
else:
|
||||||
|
bank_name = m.group(1)
|
||||||
|
|
||||||
|
data = {'bank': bank_name,
|
||||||
'pagecible': 'vos-comptes',
|
'pagecible': 'vos-comptes',
|
||||||
'password': self.password.encode(self.ENCODING),
|
'password': self.password.encode(self.ENCODING),
|
||||||
'pwAuth': 'Authentification+mot+de+passe',
|
'pwAuth': 'Authentification+mot+de+passe',
|
||||||
'username': self.username.encode(self.ENCODING),
|
'username': self.username.encode(self.ENCODING),
|
||||||
}
|
}
|
||||||
|
|
||||||
self.location('https://www.credit-du-nord.fr/saga/authentification', urllib.urlencode(data), no_login=True)
|
self.location(self.buildurl('/saga/authentification'), urllib.urlencode(data), no_login=True)
|
||||||
|
|
||||||
if not self.is_logged():
|
if not self.is_logged():
|
||||||
raise BrowserIncorrectPassword()
|
raise BrowserIncorrectPassword()
|
||||||
|
|
||||||
def get_accounts_list(self):
|
def get_accounts_list(self):
|
||||||
if not self.is_on_page(AccountsPage):
|
if not self.is_on_page(AccountsPage):
|
||||||
self.location('https://www.credit-du-nord.fr/vos-comptes/particuliers')
|
self.location(self.buildurl('/vos-comptes/particuliers'))
|
||||||
return self.page.get_list()
|
return self.page.get_list()
|
||||||
|
|
||||||
def get_account(self, id):
|
def get_account(self, id):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue