From 27b3101d6a60051cf16809fe0c0668376c3ea38f Mon Sep 17 00:00:00 2001 From: Laurent Bachelier Date: Fri, 26 Jul 2013 20:10:20 +0200 Subject: [PATCH] citelis: Login --- modules/citelis/__init__.py | 24 ++++++++++++++++ modules/citelis/backend.py | 52 +++++++++++++++++++++++++++++++++ modules/citelis/browser.py | 57 +++++++++++++++++++++++++++++++++++++ modules/citelis/pages.py | 41 ++++++++++++++++++++++++++ 4 files changed, 174 insertions(+) create mode 100644 modules/citelis/__init__.py create mode 100644 modules/citelis/backend.py create mode 100644 modules/citelis/browser.py create mode 100644 modules/citelis/pages.py diff --git a/modules/citelis/__init__.py b/modules/citelis/__init__.py new file mode 100644 index 00000000..42411098 --- /dev/null +++ b/modules/citelis/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- + +# Copyright(C) 2013 Laurent Bachelier +# +# This file is part of weboob. +# +# weboob is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# weboob is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with weboob. If not, see . + + +from .backend import CitelisBackend + + +__all__ = ['CitelisBackend'] diff --git a/modules/citelis/backend.py b/modules/citelis/backend.py new file mode 100644 index 00000000..13aa8500 --- /dev/null +++ b/modules/citelis/backend.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- + +# Copyright(C) 2013 Laurent Bachelier +# +# This file is part of weboob. +# +# weboob is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# weboob is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with weboob. If not, see . + + +from weboob.tools.backend import BaseBackend, BackendConfig +from weboob.tools.value import ValueBackendPassword +from weboob.capabilities.bank import ICapBank + +from .browser import CitelisBrowser + + +__all__ = ['CitelisBackend'] + + +class CitelisBackend(BaseBackend, ICapBank): + NAME = 'citelis' + DESCRIPTION = u'citelis website' + MAINTAINER = u'Laurent Bachelier' + EMAIL = 'laurent@bachelier.name' + LICENSE = 'AGPLv3+' + VERSION = '0.g' + + BROWSER = CitelisBrowser + + CONFIG = BackendConfig( + ValueBackendPassword('merchant_id', label='Merchant ID', masked=False), + ValueBackendPassword('login', label='Account ID', masked=False), + ValueBackendPassword('password', label='Password')) + + def create_default_browser(self): + return self.create_browser(self.config['merchant_id'].get(), + self.config['login'].get(), + self.config['password'].get()) + + def iter_accounts(self): + return self.browser.get_accounts_list() diff --git a/modules/citelis/browser.py b/modules/citelis/browser.py new file mode 100644 index 00000000..e8044020 --- /dev/null +++ b/modules/citelis/browser.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- + +# Copyright(C) 2013 Laurent Bachelier +# +# This file is part of weboob. +# +# weboob is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# weboob is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with weboob. If not, see . + + +from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword + +from .pages import LoginPage, SummaryPage, UselessPage + + +__all__ = ['CitelisBrowser'] + + +class CitelisBrowser(BaseBrowser): + PROTOCOL = 'https' + DOMAIN = 'adminpayment.citelis.fr' + ENCODING = 'UTF-8' + CERTHASH = 'a0ded00e08b1320b89329cc5e0b59aef13fbb1919290492f622834fa6cff2c68' + + PAGES = { + '%s://%s/userManager\.do\?reqCode=prepareLogin.*' % (PROTOCOL, DOMAIN): LoginPage, + '%s://%s//summarySearch\.do\?reqCode=search.*' % (PROTOCOL, DOMAIN): SummaryPage, + '%s://%s//userManager\.do\?reqCode=goToHomePage.+' % (PROTOCOL, DOMAIN): UselessPage, + } + + def __init__(self, merchant_id, *args, **kwargs): + self.merchant_id = merchant_id + BaseBrowser.__init__(self, *args, **kwargs) + + def login(self): + if not self.is_on_page(LoginPage): + self.location('%s://%s/userManager.do?reqCode=prepareLogin' % (self.PROTOCOL, self.DOMAIN)) + self.page.login(self.merchant_id, self.username, self.password) + if self.is_on_page(LoginPage): + raise BrowserIncorrectPassword() + + def is_logged(self): + return not self.is_on_page(LoginPage) + + def get_accounts_list(self): + self.location('%s://%s/summarySearch.do?reqCode=search' % (self.PROTOCOL, self.DOMAIN)) + # TODO diff --git a/modules/citelis/pages.py b/modules/citelis/pages.py new file mode 100644 index 00000000..901006f7 --- /dev/null +++ b/modules/citelis/pages.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +# Copyright(C) 2013 Laurent Bachelier +# +# This file is part of weboob. +# +# weboob is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# weboob is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with weboob. If not, see . + + +from weboob.tools.browser import BasePage + + +__all__ = ['LoginPage', 'SummaryPage', 'UselessPage'] + + +class LoginPage(BasePage): + def login(self, merchant_id, login, password): + self.browser.select_form(name='loginForm') + self.browser['merchant'] = merchant_id.encode(self.browser.ENCODING) + self.browser['login'] = login.encode(self.browser.ENCODING) + self.browser['password'] = password.encode(self.browser.ENCODING) + self.browser.submit() + + +class SummaryPage(BasePage): + pass + + +class UselessPage(BasePage): + pass