Skip to content
This repository was archived by the owner on Jun 11, 2025. It is now read-only.

Commit d79cbe1

Browse files
committed
Repair Live login flow with additional step
1 parent 8fd4d2b commit d79cbe1

File tree

1 file changed

+32
-3
lines changed

1 file changed

+32
-3
lines changed

skpy/conn.py

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,8 @@ def auth(self, user, pwd):
539539
"""
540540
# Do the authentication dance.
541541
params = self.getParams()
542-
t = self.sendCreds(user, pwd, params)
542+
params["opid"] = self.sendCreds(user, pwd, params)
543+
t = self.sendOpid(params)
543544
return self.getToken(t)
544545

545546
def getParams(self):
@@ -558,21 +559,49 @@ def getParams(self):
558559

559560
def sendCreds(self, user, pwd, params):
560561
# Now pass the login credentials over.
562+
loginResp = self.conn("POST", "{0}/ppsecure/post.srf".format(SkypeConnection.API_MSACC),
563+
params={"wa": "wsignin1.0", "wp": "MBI_SSL",
564+
"wreply": "https://lw.skype.com/login/oauth/proxy?client_id=578134&site_name="
565+
"lw.skype.com&redirect_uri=https%3A%2F%2Fweb.skype.com%2F"},
566+
cookies={"MSPRequ": params["MSPRequ"], "MSPOK": params["MSPOK"],
567+
"CkTst": "G{0}".format(int(time.time() * 1000))},
568+
data={"login": user, "passwd": pwd,
569+
"PPFT": params["PPFT"], "loginoptions": "3"})
570+
opid = re.search(r"""opid=([A-Z0-9]+)""", loginResp.text, re.I)
571+
if opid:
572+
return opid.group(1)
573+
loginPage = BeautifulSoup(loginResp.text, "html.parser")
574+
for form in loginPage.findAll("form"):
575+
if form["name"] == "fmHF":
576+
url = form["action"].split("?", 1)[0]
577+
raise SkypeAuthException("Account action required ({0}), login with a web browser first"
578+
.format(url), loginResp)
579+
else:
580+
raise SkypeApiException("Couldn't retrieve opid field from login response", loginResp)
581+
582+
def sendOpid(self, params):
583+
# Now repeat with the opid parameter.
561584
loginResp = self.conn("POST", "{0}/ppsecure/post.srf".format(SkypeConnection.API_MSACC),
562585
params={"wa": "wsignin1.0", "wp": "MBI_SSL",
563586
"wreply": "https://lw.skype.com/login/oauth/proxy?client_id=578134&site_name="
564587
"lw.skype.com&redirect_uri=https%3A%2F%2Fweb.skype.com%2F"},
565588
cookies={"MSPRequ": params["MSPRequ"],
566589
"MSPOK": params["MSPOK"],
567590
"CkTst": str(int(time.time() * 1000))},
568-
data={"login": user, "passwd": pwd, "PPFT": params["PPFT"]})
591+
data={"opid": params["opid"],
592+
"site_name": "lw.skype.com",
593+
"oauthPartner": "999",
594+
"client_id": "578134",
595+
"redirect_uri": "https://web.skype.com",
596+
"PPFT": params["PPFT"],
597+
"type": "28"})
569598
tField = BeautifulSoup(loginResp.text, "html.parser").find(id="t")
570599
if tField is None:
571600
err = re.search(r"sErrTxt:'([^'\\]*(\\.[^'\\]*)*)'", loginResp.text)
572601
errMsg = "Couldn't retrieve t field from login response"
573602
if err:
574603
errMsg = re.sub(r"<.*?>", "", err.group(1)).replace("\\'", "'").replace("\\\\", "\\")
575-
raise SkypeAuthException(errMsg, loginResp)
604+
raise SkypeApiException(errMsg, loginResp)
576605
return tField.get("value")
577606

578607
def getToken(self, t):

0 commit comments

Comments
 (0)