mirror of
https://github.com/Sneed-Group/pypush-plus-plus
synced 2024-12-23 11:22:42 -06:00
Add gateway_fetch code
This commit is contained in:
parent
34447a11d6
commit
a58d5e3c89
1 changed files with 80 additions and 0 deletions
80
gateway_fetch.py
Normal file
80
gateway_fetch.py
Normal file
|
@ -0,0 +1,80 @@
|
|||
import requests, random, plistlib, zipfile
|
||||
from io import BytesIO
|
||||
|
||||
appleplist = None
|
||||
|
||||
def getMasterList():
|
||||
global appleplist
|
||||
if (appleplist is None):
|
||||
appleplist = plistlib.loads(requests.get("https://itunes.apple.com/WebObjects/MZStore.woa/wa/com.apple.jingle.appserver.client.MZITunesClientCheck/version?languageCode=en").content)
|
||||
return appleplist
|
||||
|
||||
def getGatewayMCCMNC(MCCMNC):
|
||||
gateways = getGatewaysMCCMNC(MCCMNC)
|
||||
if gateways is None:
|
||||
return None
|
||||
return gateways[random.randrange(0, len(gateways))]
|
||||
|
||||
def getGatewaysMCCMNC(MCCMNC):
|
||||
bundles = getBundlesMCCMNC(MCCMNC)
|
||||
gateway = None
|
||||
if bundles is None:
|
||||
return
|
||||
for bundle in bundles:
|
||||
gateway = getGatewayFromBundle(parseBundle(bundle["Bundle"]))
|
||||
if gateway is not None:
|
||||
break
|
||||
return gateway
|
||||
|
||||
def getBundlesMCCMNC(MCCMNC):
|
||||
appleplist = getMasterList()
|
||||
bundlelist = []
|
||||
if MCCMNC in appleplist["MobileDeviceCarriersByMccMnc"]:
|
||||
mmo = appleplist["MobileDeviceCarriersByMccMnc"][MCCMNC]
|
||||
if "BundleName" in mmo:
|
||||
bundle = getBundleByName(mmo["BundleName"])
|
||||
if bundle is not None:
|
||||
bundlelist.append({"Name": mmo["BundleName"], "Bundle": bundle})
|
||||
if "MVNOs" in mmo:
|
||||
for mv in mmo["MVNOs"]:
|
||||
if "BundleName" in mv:
|
||||
bundle = getBundleByName(mv["BundleName"])
|
||||
if bundle is not None:
|
||||
bundlelist.append({"Name": mv["BundleName"], "Bundle": bundle})
|
||||
return bundlelist
|
||||
else:
|
||||
return None
|
||||
|
||||
def getGatewayFromBundle(bundledict):
|
||||
applecarrierplist = bundledict
|
||||
if "PhoneNumberRegistrationGatewayAddress" in applecarrierplist:
|
||||
regnum = applecarrierplist["PhoneNumberRegistrationGatewayAddress"]
|
||||
if (type(regnum) == str):
|
||||
regnum = [regnum]
|
||||
return regnum
|
||||
return None
|
||||
|
||||
def parseBundle(bundle):
|
||||
bundlebytes = BytesIO(bundle)
|
||||
bundlezip = zipfile.ZipFile(bundlebytes)
|
||||
carrierpath = [path for path in bundlezip.namelist() if path.startswith("Payload/") and path.endswith("/carrier.plist")][0]
|
||||
applecarrierplist = plistlib.load(bundlezip.open(carrierpath, "r"))
|
||||
return applecarrierplist
|
||||
|
||||
def getBundleByName(BundleName):
|
||||
appleplist = getMasterList()
|
||||
if BundleName in appleplist["MobileDeviceCarrierBundlesByProductVersion"]:
|
||||
x = BundleName
|
||||
greatestver = "0"
|
||||
for y in appleplist["MobileDeviceCarrierBundlesByProductVersion"][x]:
|
||||
try:
|
||||
inty = float(y)
|
||||
except:
|
||||
continue
|
||||
if (inty > float(greatestver)):
|
||||
greatestver = y
|
||||
if greatestver != "0":
|
||||
return requests.get(appleplist["MobileDeviceCarrierBundlesByProductVersion"][x][greatestver]["BundleURL"]).content
|
||||
else:
|
||||
return None
|
||||
return None
|
Loading…
Reference in a new issue