diff --git a/modules/ameli/browser.py b/modules/ameli/browser.py index 84a6bc32536e022421bcca94525260b076a21b3f..1ef59e1555cc4454b8d69dcc17b9c509b554949a 100644 --- a/modules/ameli/browser.py +++ b/modules/ameli/browser.py @@ -26,7 +26,10 @@ from weboob.browser import LoginBrowser, URL, need_login from weboob.exceptions import ActionNeeded -from .pages import ErrorPage, LoginPage, RedirectPage, CguPage, SubscriptionPage, DocumentsPage +from .pages import ( + ErrorPage, LoginPage, RedirectPage, CguPage, + SubscriptionPage, DocumentsPage, CtPage, +) class AmeliBrowser(LoginBrowser): @@ -38,10 +41,13 @@ class AmeliBrowser(LoginBrowser): cgu_page = URL(r'/PortailAS/appmanager/PortailAS/assure\?_nfpb=true&_pageLabel=as_conditions_generales_page.*', CguPage) subscription_page = URL(r'/PortailAS/appmanager/PortailAS/assure\?_nfpb=true&_pageLabel=as_info_perso_page.*', SubscriptionPage) documents_page = URL(r'/PortailAS/paiements.do', DocumentsPage) + ct_page = URL(r'/PortailAS/JavaScriptServlet', CtPage) def do_login(self): self.login_page.go() - self.page.login(self.username, self.password) + # _ct value is necessary for the login + _ct = self.ct_page.open(method='POST', headers={'FETCH-CSRF-TOKEN': '1'}).get_ct_value() + self.page.login(self.username, self.password, _ct) if self.cgu_page.is_here(): raise ActionNeeded(self.page.get_cgu_message()) diff --git a/modules/ameli/pages.py b/modules/ameli/pages.py index 977791787474e8cb813003a8441fd63425635c94..33864ead430f5b8369876dc0b10af986bf7dabb5 100644 --- a/modules/ameli/pages.py +++ b/modules/ameli/pages.py @@ -19,11 +19,12 @@ from __future__ import unicode_literals +import re from weboob.browser.elements import method, ListElement, ItemElement from weboob.browser.filters.html import Link from weboob.browser.filters.standard import CleanText, Regexp, CleanDecimal, Currency, Field, Format, Env -from weboob.browser.pages import LoggedPage, HTMLPage, PartialHTMLPage +from weboob.browser.pages import LoggedPage, HTMLPage, PartialHTMLPage, RawPage from weboob.capabilities.bill import Subscription, Bill from weboob.exceptions import BrowserUnavailable from weboob.tools.date import parse_french_date @@ -31,13 +32,20 @@ class LoginPage(HTMLPage): - def login(self, username, password): + def login(self, username, password, _ct): form = self.get_form(id='connexioncompte_2connexionCompteForm') form['connexioncompte_2numSecuriteSociale'] = username form['connexioncompte_2codeConfidentiel'] = password + form['_ct'] = _ct form.submit() +class CtPage(RawPage): + # the page contains only _ct value + def get_ct_value(self): + return re.search(r'_ct:(.*)', self.text).group(1) + + class RedirectPage(LoggedPage, HTMLPage): REFRESH_MAX = 0 REFRESH_XPATH = '//meta[@http-equiv="refresh"]'