-
-
Save goofwear/9dedb22416f4c70cbcfc3e4aeaaa22c5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import argparse | |
import sys | |
try: | |
from defusedxml import ElementTree | |
except (ImportError, AttributeError): | |
from xml.etree import ElementTree | |
import requests | |
def fubar(killme=True): | |
print("NOTHING FOUND") | |
if killme: | |
raise SystemExit | |
def multi_csc(csccheck): | |
cscdict = {"OYV": ["BMC", "BWA", "CHR", "ESK", "FMC", "GLW", "KDO", "MTB", "RWC", "TLS", "VMC", "VTR", "XAC"], "OYM": ["AGC", "AIO", "ATT", "BST", "CCT", "GCF", "LRA", "SPR", "TFN", "TMB", "TMK", "USC", "VMU", "VZW", "XAA", "XAS"], "OYN": ["ACG", "ATT", "BST", "CCT", "GCF", "LRA", "SPR", "TFN", "TMB", "USC", "VMU", "VZW", "XAA", "XAS"], "OYA": ["BMC", "BWA", "CHR", "ESK", "FMC", "GLW", "KDO", "MTB", "RWC", "TLS", "VMC", "VTR", "XAC"], "OKR": ["KTC", "LUC", "SKC"], "UWE": ["BAT", "CWW", "DOR", "ICE", "IUS", "JDI", "PCW", "TDR", "UNE"], "UWC": ["CHE", "CHV", "CHX"], "UWB": ["ALE", "ANC", "BVO", "PNT", "PSN", "PSP", "PVT", "UPO", "UYO"], "OXM": ["ACR", "AFG", "AFR", "ARO", "ATO", "AUT", "BGL", "BNG", "BRI", "BTC", "BTU", "CAC", "CAM", "CEL", "CHO", "COO", "CPW", "DBT", "DKR", "ECT", "EGY", "EON", "ETL", "EUR", "GLB", "ILO", "INS", "ITV", "KSA", "LAO", "LUX", "LYS", "MAT", "MID", "MM1", "MWD", "MYM", "NEE", "NPL", "ORX", "PAK", "PCL", "PHE", "PHN", "PTR", "ROM", "SER", "SIN", "SKZ", "SLK", "SMA", "SMP", "STH", "TEB", "THL", "THR", "TMC", "TPA", "TPH", "TTT", "TUN", "TUR", "WTL", "XEF", "XEH", "XEO", "XEU", "XFA", "XFE", "XME", "XSG", "XSP", "XTC", "XXV", "ZTO", "MTZ", "SEB", "SEE", "SEK"], "OXJ": ["AME", "MEO", "SFR"], "OWT": ["CHT", "COB", "CRM", "EBE", "NBS", "PBS", "SAM", "TGU", "TMM", "UFN", "UFU", "ZVV"], "OWM": ["CGU", "COL", "CTE", "ETE", "TGP"], "OWA": ["CDR", "CHL", "COM", "CPA", "CRC", "CTI", "CTP", "CTU", "ECO", "PCT", "PET", "PGU", "TCE", "ZTA"], "OVF": ["ATL", "AVF", "CNX", "CYV", "MOB", "MTL", "OMN", "PRO", "SIM", "SWC", "TCL", "VD2", "VDC", "VDF", "VDH", "VDI", "VGR", "VIP", "VOD", "XFV"], "OTF": ["O2U", "XEC"], "OLN": ["NZC", "OPS", "PNG", "TEL", "TNZ", "VAU", "VFJ", "VNZ", "XNX", "XNZ", "XSA"], "OLE": ["XID"], "OGC": ["AMO", "FTM", "OPV", "ORO", "ORS"], "ODX": ["COA", "COS", "CRO", "DCO", "DHR", "DNL", "DPL", "DTM", "MAX", "MBM", "TMH", "TMS", "TMZ", "TNL", "TPL", "TRG"], "CKH": ["3IE", "DRE", "H3G", "HYS", "HUI"]} | |
if csccheck.upper() in cscdict: | |
return cscdict[csccheck.upper()], False | |
else: | |
return [csccheck.upper()], True | |
def grab(csc, hwid, test, killme=True): | |
fname = "version.test" if test else "version" | |
url = "http://fota-cloud-dn.ospserver.net/firmware/{0}/{1}/{2}.xml".format(csc, hwid, fname) | |
req = requests.get(url) | |
if req.status_code != 200: | |
fubar(killme) | |
else: | |
return req.text | |
def parse(data, killme=True, latest=False): | |
root = ElementTree.fromstring(data) | |
version = root.find("firmware").find("version") | |
lastver = version.find("latest").text | |
if latest: | |
return [lastver] | |
else: | |
upgrade = version.find("upgrade") | |
pastvers = [value.text for value in upgrade.findall("value")] | |
pastvers.insert(0, lastver) | |
if set(pastvers) == {None}: | |
fubar(killme) | |
return None | |
else: | |
splitvers = [ver.split("/") for ver in pastvers] | |
splitvers.sort(key=lambda x: x[1]) | |
allvers = ["/".join(ver) for ver in splitvers] | |
return allvers | |
def prettyprint(versions): | |
for version in versions: | |
print(version) | |
def main(hwid, csc, test=False, latest=False, killme=True): | |
if killme: | |
print("SAMSUNG UPDATE CHECKER") | |
print("DEVICE: {0}".format(hwid)) | |
print("CSC: {0}".format(csc)) | |
print("CHECKING...") | |
data = grab(csc, hwid, test, killme) | |
if data is None: | |
pass | |
else: | |
versions = parse(data, killme, latest) | |
if versions is None: | |
pass | |
else: | |
prettyprint(versions) | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser() | |
parser.add_argument("hwid") | |
parser.add_argument("csc") | |
parser.add_argument("-t", "--test", dest="test", action="store_true", default=False) | |
parser.add_argument("-l", "--latest", dest="latest", action="store_true", default=False) | |
parser.add_argument("-m", "--multi-csc", dest="multicsc", action="store_true", default=False) | |
args = parser.parse_args() | |
if args.multicsc: | |
multicsc, killme = multi_csc(args.csc.upper()) | |
if not killme: | |
print("SAMSUNG UPDATE CHECKER") | |
for csc in multicsc: | |
main(args.hwid.upper(), csc.upper(), args.test, args.latest, killme) | |
else: | |
main(args.hwid.upper(), args.csc.upper(), args.test, args.latest) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment