Skip to content

Commit d650946

Browse files
committed
Add act cookie on login
1 parent 8ac6dc4 commit d650946

1 file changed

Lines changed: 29 additions & 8 deletions

File tree

fbchat/_session.py

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,10 @@ def session_factory() -> requests.Session:
107107
return session
108108

109109

110+
def login_cookies(at: datetime.datetime):
111+
return {"act": "{}/0".format(_util.datetime_to_millis(at))}
112+
113+
110114
def client_id_factory() -> str:
111115
return hex(int(random.random() * 2 ** 31))[2:]
112116

@@ -143,23 +147,29 @@ def two_factor_helper(session: requests.Session, r, on_2fa_callback):
143147
while "approvals_code" in data:
144148
data["approvals_code"] = on_2fa_callback()
145149
log.info("Submitting 2FA code")
146-
r = session.post(url, data=data, allow_redirects=False)
150+
r = session.post(
151+
url, data=data, allow_redirects=False, cookies=login_cookies(_util.now())
152+
)
147153
log.debug("2FA location: %s", r.headers.get("Location"))
148154
url, data = find_form_request(r.content.decode("utf-8"))
149155

150156
# TODO: Can be missing if checkup flow was done on another device in the meantime?
151157
if "name_action_selected" in data:
152158
data["name_action_selected"] = "save_device"
153159
log.info("Saving browser")
154-
r = session.post(url, data=data, allow_redirects=False)
160+
r = session.post(
161+
url, data=data, allow_redirects=False, cookies=login_cookies(_util.now())
162+
)
155163
log.debug("2FA location: %s", r.headers.get("Location"))
156164
url = r.headers.get("Location")
157165
if url and url.startswith("https://www.messenger.com/login/auth_token/"):
158166
return url
159167
url, data = find_form_request(r.content.decode("utf-8"))
160168

161169
log.info("Starting Facebook checkup flow")
162-
r = session.post(url, data=data, allow_redirects=False)
170+
r = session.post(
171+
url, data=data, allow_redirects=False, cookies=login_cookies(_util.now())
172+
)
163173
log.debug("2FA location: %s", r.headers.get("Location"))
164174

165175
url, data = find_form_request(r.content.decode("utf-8"))
@@ -172,15 +182,19 @@ def two_factor_helper(session: requests.Session, r, on_2fa_callback):
172182
data["submit[This was me]"] = "[any value]"
173183
del data["submit[This wasn't me]"]
174184
log.info("Verifying login attempt")
175-
r = session.post(url, data=data, allow_redirects=False)
185+
r = session.post(
186+
url, data=data, allow_redirects=False, cookies=login_cookies(_util.now())
187+
)
176188
log.debug("2FA location: %s", r.headers.get("Location"))
177189

178190
url, data = find_form_request(r.content.decode("utf-8"))
179191
if "name_action_selected" not in data:
180192
raise _exception.ParseError("Could not fill out form properly (3)", data=data)
181193
data["name_action_selected"] = "save_device"
182194
log.info("Saving device again")
183-
r = session.post(url, data=data, allow_redirects=False)
195+
r = session.post(
196+
url, data=data, allow_redirects=False, cookies=login_cookies(_util.now())
197+
)
184198
log.debug("2FA location: %s", r.headers.get("Location"))
185199
return r.headers.get("Location")
186200

@@ -296,6 +310,7 @@ def login(
296310
"https://www.messenger.com/login/password/",
297311
data=data,
298312
allow_redirects=False,
313+
cookies=login_cookies(_util.now()),
299314
)
300315
except requests.RequestException as e:
301316
_exception.handle_requests_error(e)
@@ -319,18 +334,24 @@ def login(
319334
if not url.startswith("https://www.facebook.com/checkpoint/start/"):
320335
raise _exception.ParseError("Failed 2fa flow (1)", data=url)
321336

322-
r = session.get(url, allow_redirects=False)
337+
r = session.get(
338+
url, allow_redirects=False, cookies=login_cookies(_util.now())
339+
)
323340
url = r.headers.get("Location")
324341
if not url or not url.startswith("https://www.facebook.com/checkpoint/"):
325342
raise _exception.ParseError("Failed 2fa flow (2)", data=url)
326343

327-
r = session.get(url, allow_redirects=False)
344+
r = session.get(
345+
url, allow_redirects=False, cookies=login_cookies(_util.now())
346+
)
328347
url = two_factor_helper(session, r, on_2fa_callback)
329348

330349
if not url.startswith("https://www.messenger.com/login/auth_token/"):
331350
raise _exception.ParseError("Failed 2fa flow (3)", data=url)
332351

333-
r = session.get(url, allow_redirects=False)
352+
r = session.get(
353+
url, allow_redirects=False, cookies=login_cookies(_util.now())
354+
)
334355
url = r.headers.get("Location")
335356

336357
if url != "https://www.messenger.com/":

0 commit comments

Comments
 (0)