mirror of
https://github.com/MustardChef/WSABuilds.git
synced 2024-11-11 06:05:13 +01:00
91 lines
3.3 KiB
Python
91 lines
3.3 KiB
Python
|
#!/usr/bin/python
|
||
|
|
||
|
import sys
|
||
|
|
||
|
import requests
|
||
|
from xml.dom import minidom
|
||
|
import html
|
||
|
import warnings
|
||
|
import re
|
||
|
import zipfile
|
||
|
import os
|
||
|
import urllib.request
|
||
|
from pathlib import Path
|
||
|
|
||
|
warnings.filterwarnings("ignore")
|
||
|
|
||
|
arch = sys.argv[1]
|
||
|
release_type_map = {"retail": "Retail", "release preview": "RP",
|
||
|
"insider slow": "WIS", "insider fast": "WIF"}
|
||
|
release_type = release_type_map[sys.argv[2]] if sys.argv[2] != "" else "Retail"
|
||
|
|
||
|
cat_id = '858014f3-3934-4abe-8078-4aa193e74ca8'
|
||
|
print("arch=" + arch + " release_type=" + release_type)
|
||
|
|
||
|
with open(Path.cwd().parent / ("xml/GetCookie.xml"), "r") as f:
|
||
|
cookie_content = f.read()
|
||
|
|
||
|
out = requests.post(
|
||
|
'https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx',
|
||
|
data=cookie_content,
|
||
|
headers={'Content-Type': 'application/soap+xml; charset=utf-8'},
|
||
|
verify=False
|
||
|
)
|
||
|
doc = minidom.parseString(out.text)
|
||
|
cookie = doc.getElementsByTagName('EncryptedData')[0].firstChild.nodeValue
|
||
|
|
||
|
print(cookie)
|
||
|
|
||
|
with open(Path.cwd().parent / "xml/WUIDRequest.xml", "r") as f:
|
||
|
cat_id_content = f.read().format(cookie, cat_id, release_type)
|
||
|
|
||
|
out = requests.post(
|
||
|
'https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx',
|
||
|
data=cat_id_content,
|
||
|
headers={'Content-Type': 'application/soap+xml; charset=utf-8'},
|
||
|
verify=False
|
||
|
)
|
||
|
|
||
|
doc = minidom.parseString(html.unescape(out.text))
|
||
|
|
||
|
filenames = {}
|
||
|
for node in doc.getElementsByTagName('Files'):
|
||
|
filenames[node.parentNode.parentNode.getElementsByTagName(
|
||
|
'ID')[0].firstChild.nodeValue] = f"{node.firstChild.attributes['InstallerSpecificIdentifier'].value}_{node.firstChild.attributes['FileName'].value}"
|
||
|
pass
|
||
|
|
||
|
identities = []
|
||
|
for node in doc.getElementsByTagName('SecuredFragment'):
|
||
|
filename = filenames[node.parentNode.parentNode.parentNode.getElementsByTagName('ID')[
|
||
|
0].firstChild.nodeValue]
|
||
|
update_identity = node.parentNode.parentNode.firstChild
|
||
|
identities += [(update_identity.attributes['UpdateID'].value,
|
||
|
update_identity.attributes['RevisionNumber'].value, filename)]
|
||
|
|
||
|
with open(Path.cwd().parent / "xml/FE3FileUrl.xml", "r") as f:
|
||
|
file_content = f.read()
|
||
|
if not os.path.exists(Path.cwd().parent / "download"):
|
||
|
os.makedirs(Path.cwd().parent / "download")
|
||
|
for i, v, f in identities:
|
||
|
if re.match(f"Microsoft\.UI\.Xaml\..*_{arch}_.*\.appx", f):
|
||
|
out_file = Path.cwd().parent / "download/xaml.appx"
|
||
|
elif re.match(f"Microsoft\.VCLibs\..*_{arch}_.*\.appx", f):
|
||
|
out_file = Path.cwd().parent / "download/vclibs.appx"
|
||
|
elif re.match(f"MicrosoftCorporationII\.WindowsSubsystemForAndroid_.*\.msixbundle", f):
|
||
|
out_file = Path.cwd().parent / "download/wsa.zip"
|
||
|
else:
|
||
|
continue
|
||
|
out = requests.post(
|
||
|
'https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx/secured',
|
||
|
data=file_content.format(i, v, release_type),
|
||
|
headers={'Content-Type': 'application/soap+xml; charset=utf-8'},
|
||
|
verify=False
|
||
|
)
|
||
|
doc = minidom.parseString(out.text)
|
||
|
for l in doc.getElementsByTagName("FileLocation"):
|
||
|
url = l.getElementsByTagName("Url")[0].firstChild.nodeValue
|
||
|
if len(url) != 99:
|
||
|
if not os.path.isfile(out_file):
|
||
|
print(f"downloading link: {url} to {out_file}", flush=True)
|
||
|
urllib.request.urlretrieve(url, out_file)
|