diff options
Diffstat (limited to 'samloader/fusclient.py')
-rw-r--r-- | samloader/fusclient.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/samloader/fusclient.py b/samloader/fusclient.py new file mode 100644 index 0000000..6836923 --- /dev/null +++ b/samloader/fusclient.py @@ -0,0 +1,32 @@ +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2020 Nayil Mukhametshin + +# FUS request helper (automatically sign requests and update tokens) + +import requests + +from . import auth + +class FUSClient(object): + def __init__(self): + self.auth = "" + self.sessid = "" + self.makereq("NF_DownloadGenerateNonce.do") + def makereq(self, path, data=""): + authv = 'FUS nonce="", signature="' + self.auth + '", nc="", type="", realm="", newauth="1"' + r = requests.post("https://neofussvr.sslcs.cdngc.net/" + path, data=data, + headers={"Authorization": authv}, cookies={"JSESSIONID": self.sessid}) + if "NONCE" in r.headers: + self.encnonce = r.headers["NONCE"] + self.nonce = auth.decryptnonce(self.encnonce) + self.auth = auth.getauth(self.nonce) + if "JSESSIONID" in r.cookies: + self.sessid = r.cookies["JSESSIONID"] + r.raise_for_status() + return r.text + def downloadfile(self, filename): + authv = 'FUS nonce="' + self.encnonce + '", signature="' + self.auth + '", nc="", type="", realm="", newauth="1"' + r = requests.get("https://cloud-neofussvr.sslcs.cdngc.net/NF_DownloadBinaryForMass.do", + params={"file": filename}, headers={"Authorization": authv}, stream=True) + r.raise_for_status() + return r |