import plistlib import requests import logging logger = logging.getLogger("bags") OLD_APNS_BAG = None def apns_init_bag_old(): global OLD_APNS_BAG if OLD_APNS_BAG is not None: return OLD_APNS_BAG r = requests.get("https://init.push.apple.com/bag", verify=False) if r.status_code != 200: raise Exception("Failed to get APNs init bag") # Parse the config as a plist bag = plistlib.loads(r.content) logger.debug("Received APNs old-style init bag") OLD_APNS_BAG = bag return bag # This is the same as the above, but the response has a signature which we unwrap APNS_BAG = None def apns_init_bag(): global APNS_BAG if APNS_BAG is not None: return APNS_BAG r = requests.get("http://init-p01st.push.apple.com/bag", verify=False) if r.status_code != 200: raise Exception("Failed to get APNs init bag 2") content = plistlib.loads(r.content) bag = plistlib.loads(content["bag"]) logger.debug("Received APNs new init bag") APNS_BAG = bag return bag IDS_BAG = None def ids_bag(): global IDS_BAG if IDS_BAG is not None: return IDS_BAG r = requests.get( "https://init.ess.apple.com/WebObjects/VCInit.woa/wa/getBag?ix=3", verify=False ) if r.status_code != 200: raise Exception("Failed to get IDS bag") # Parse the config as a plist content = plistlib.loads(r.content) # Load the inner bag bag = plistlib.loads(content["bag"]) logger.debug("Recieved IDS bag") IDS_BAG = bag return bag GRANDSLAM_BAG = None def grandslam_bag(): global GRANDSLAM_BAG if GRANDSLAM_BAG is not None: return GRANDSLAM_BAG import gsa r = requests.get( "https://gsa.apple.com/grandslam/GsService2/lookup", verify=False, headers = { # We have to provide client info so that the server knows which version of the bag to give us "X-Mme-Client-Info": gsa.build_client(), "User-Agent": gsa.USER_AGENT, } ) if r.status_code != 200: raise Exception("Failed to get Grandslam bag: " + r.status_code) GRANDSLAM_BAG = plistlib.loads(r.content) return GRANDSLAM_BAG if __name__ == "__main__": # config = get_config() # print(config) # print(apns_init_bag_2()) # print(apns_init_bag_2() == apns_init_bag()) print(grandslam_bag())