diff --git a/modules/hsbc/pages/login.py b/modules/hsbc/pages/login.py new file mode 100644 index 00000000..57cbf95b --- /dev/null +++ b/modules/hsbc/pages/login.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- + +# Copyright(C) 2012-2013 Romain Bignon +# +# 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 . + + +import re +import urllib +from mechanize import FormNotFoundError + +from weboob.tools.browser import BasePage, BrokenPageError + + +__all__ = ['LoginPage'] + + +class LoginPage(BasePage): + def on_loaded(self): + try: + self.browser.select_form(name="form1") + except FormNotFoundError: + pass + else: + self.browser.submit(nologin=True) + + def login(self, username, secret, password): + form_world = self.document.xpath('//form[@name="auth04"]') + url = form_world[0].attrib['action'] + datastr = "TF1;015;;;;;;;;;;;;;;;;;;;;;;Mozilla;Netscape;5.0%20%28X11%29;20100101;undefined;true;Linux%20x86_64;true;Linux%20x86_64;undefined;Mozilla/5.0%20%28X11%3B%20Linux%20x86_64%3B%20rv%3A19.0%29%20Gecko/20100101%20Firefox/19.0%20Iceweasel/19.0.2;en-US;undefined;www.hsbc.fr;undefined;undefined;undefined;undefined;true;true;1365177015380;1;Tue%2007%20Jun%202005%2009%3A33%3A44%20PM%20CEST;1280;1024;;11.2;;;;;123;-60;-120;Fri%2005%20Apr%202013%2005%3A50%3A15%20PM%20CEST;24;1280;1024;0;0;;;;;;Shockwave%20Flash%7CShockwave%20Flash%2011.2%20r202;;;;;;;;;;;;;17;" + data = {'FMNUserId': username, + 'memorableAnswer': secret, + 'password': '', + 'data': datastr, + '__data': datastr, + '__custtype': '', + 'form_variable': '', + + } + for i, field in enumerate(form_world[0].xpath('.//div[@class="formInput extFormStyle01"]/input[@type="password"]')): + if field.attrib['name'].startswith('RccibNumber'): + data[field.attrib['name']] = password[i] + data['password'] += password[i] + + + self.browser.location(url, urllib.urlencode(data), no_login=True) + + def get_error(self): + try: + return self.parser.tocleanstring(self.document.xpath('//font[@color="red"]')[0]) + except IndexError: + return None + + def get_session(self): + try: + frame = self.document.xpath('//frame[@name="FrameWork"]')[0] + except IndexError: + raise BrokenPageError('Unable to find session token') + + m = re.search('sessionid=([^& "]+)', frame.attrib['src']) + if not m: + raise BrokenPageError('Unable to find session token') + return m.group(1)