Add option to get list of UUP without generation of links

This commit is contained in:
mkuba50 2019-01-15 21:28:57 +01:00
parent eeb779eca9
commit 71ee367367
2 changed files with 153 additions and 103 deletions

234
get.php
View File

@ -19,11 +19,21 @@ require_once dirname(__FILE__).'/shared/main.php';
require_once dirname(__FILE__).'/shared/requests.php'; require_once dirname(__FILE__).'/shared/requests.php';
require_once dirname(__FILE__).'/shared/packs.php'; require_once dirname(__FILE__).'/shared/packs.php';
/*
$updateId = Update Identifier
$usePack = Desired language
$desiredEdition = Desired edition
$requestType = 0 = uncached request,;
1 = use cache if available;
2 = offline information retrieval
*/
function uupGetFiles( function uupGetFiles(
$updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6', $updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6',
$usePack = 0, $usePack = 0,
$desiredEdition = 0, $desiredEdition = 0,
$cacheRequests = 0 $requestType = 0
) { ) {
uupApiPrintBrand(); uupApiPrintBrand();
@ -95,9 +105,6 @@ function uupGetFiles(
break; break;
} }
$cacheHash = hash('sha1', strtolower("api-get-$updateId"));
$cached = 0;
$rev = 1; $rev = 1;
if(preg_match('/_rev\./', $updateId)) { if(preg_match('/_rev\./', $updateId)) {
$rev = preg_replace('/.*_rev\./', '', $updateId); $rev = preg_replace('/.*_rev\./', '', $updateId);
@ -108,6 +115,115 @@ function uupGetFiles(
$updateBuild = (isset($info['build'])) ? $info['build'] : 'UNKNOWN'; $updateBuild = (isset($info['build'])) ? $info['build'] : 'UNKNOWN';
$updateName = (isset($info['title'])) ? $info['title'] : 'Unknown update: '.$updateId; $updateName = (isset($info['title'])) ? $info['title'] : 'Unknown update: '.$updateId;
if($requestType < 2) {
$files = uupGetOnlineFiles($updateId, $rev, $info, $requestType);
} else {
$files = uupGetOfflineFiles($info);
}
$baseless = preg_grep('/^baseless_|-baseless\....$/i', array_keys($files));
foreach($baseless as $val) {
if(isset($files[$val])) unset($files[$val]);
}
$psf = array_keys($files);
$psf = preg_grep('/\.psf$/i', $psf);
$removeFiles = array();
foreach($psf as $val) {
$name = preg_replace('/\.psf$/i', '', $val);
$removeFiles[] = $name;
unset($files[$val]);
}
unset($index, $name, $psf);
$temp = preg_grep('/'.$updateArch.'_.*|arm64.arm_.*/i', $removeFiles);
foreach($temp as $key => $val) {
if(isset($files[$val.'.cab'])) unset($files[$val.'.cab']);
unset($removeFiles[$key]);
}
unset($temp);
foreach($removeFiles as $val) {
if(isset($files[$val.'.esd'])) {
if(isset($files[$val.'.cab'])) unset($files[$val.'.cab']);
}
}
unset($removeFiles);
$filesKeys = array_keys($files);
switch($fileListSource) {
case 'UPDATEONLY':
$skipPackBuild = 1;
$removeFiles = preg_grep('/Windows10\.0-KB.*-EXPRESS/i', $filesKeys);
foreach($removeFiles as $val) {
if(isset($files[$val])) unset($files[$val]);
}
unset($removeFiles, $temp);
$filesKeys = array_keys($files);
$filesKeys = preg_grep('/Windows10\.0-KB/i', $filesKeys);
if(count($filesKeys) == 0) {
return array('error' => 'NOT_CUMULATIVE_UPDATE');
}
break;
case 'WUBFILE':
$skipPackBuild = 1;
$filesKeys = preg_grep('/WindowsUpdateBox.exe/i', $filesKeys);
break;
}
if($fileListSource == 'GENERATEDPACKS') {
$temp = preg_grep('/Windows10\.0-KB.*-EXPRESS/i', $filesKeys, PREG_GREP_INVERT);
$temp = preg_grep('/Windows10\.0-KB/i', $temp);
$filesList = array_merge($filesList, $temp);
$newFiles = array();
foreach($filesList as $val) {
$name = preg_replace('/~31bf3856ad364e35/', '', $val);
$name = preg_replace('/~~\.|~\./', '.', $name);
$name = preg_replace('/~/', '-', $name);
$name = strtolower($name);
if(isset($files[$name])) {
$newFiles[$name] = $files[$name];
}
}
$files = $newFiles;
$filesKeys = array_keys($files);
}
if(empty($filesKeys)) {
return array('error' => 'NO_FILES');
}
foreach($filesKeys as $val) {
$filesNew[$val] = $files[$val];
}
$files = $filesNew;
ksort($files);
consoleLogger('Successfully parsed the information.');
return array(
'apiVersion' => uupApiVersion(),
'updateName' => $updateName,
'arch' => $updateArch,
'build' => $updateBuild,
'files' => $files,
);
}
function uupGetOnlineFiles($updateId, $rev, $info, $cacheRequests) {
$cacheHash = hash('sha1', strtolower("api-get-${updateId}_rev.$rev"));
$cached = 0;
if(file_exists('cache/'.$cacheHash.'.json.gz') && $cacheRequests == 1) { if(file_exists('cache/'.$cacheHash.'.json.gz') && $cacheRequests == 1) {
$cache = @gzdecode(@file_get_contents('cache/'.$cacheHash.'.json.gz')); $cache = @gzdecode(@file_get_contents('cache/'.$cacheHash.'.json.gz'));
$cache = json_decode($cache, 1); $cache = json_decode($cache, 1);
@ -224,103 +340,37 @@ function uupGetFiles(
$files[$newName] = $temp; $files[$newName] = $temp;
} }
} }
unset($temp, $newName);
$baseless = preg_grep('/^baseless_|-baseless\....$/i', array_keys($files)); return $files;
foreach($baseless as $val) {
if(isset($files[$val])) unset($files[$val]);
} }
$psf = array_keys($files); function uupGetOfflineFiles($info) {
$psf = preg_grep('/\.psf$/i', $psf); if(empty($info['files'])) return array();
$removeFiles = array(); consoleLogger('Parsing information...');
foreach($psf as $val) { foreach($info['files'] as $sha1 => $val) {
$name = preg_replace('/\.psf$/i', '', $val); $name = $val['name'];
$removeFiles[] = $name; $size = $val['size'];
unset($files[$val]); if(!isset($fileSizes[$name])) $fileSizes[$name] = 0;
}
unset($index, $name, $psf);
$temp = preg_grep('/'.$updateArch.'_.*|arm64.arm_.*/i', $removeFiles); if($size > $fileSizes[$name]) {
foreach($temp as $key => $val) { $fileSizes[$name] = $size;
if(isset($files[$val.'.cab'])) unset($files[$val.'.cab']);
unset($removeFiles[$key]);
}
unset($temp);
foreach($removeFiles as $val) { $temp = array();
if(isset($files[$val.'.esd'])) { $temp['sha1'] = $sha1;
if(isset($files[$val.'.cab'])) unset($files[$val.'.cab']); $temp['size'] = $size;
} $temp['url'] = null;
} $temp['uuid'] = null;
unset($removeFiles); $temp['expire'] = 0;
$filesKeys = array_keys($files); $newName = preg_replace('/^cabs_|^metadataesd_|~31bf3856ad364e35/i', '', $name);
$newName = preg_replace('/~~\.|~\./', '.', $newName);
$newName = preg_replace('/~/', '-', $newName);
$newName = strtolower($newName);
switch($fileListSource) { $files[$newName] = $temp;
case 'UPDATEONLY':
$skipPackBuild = 1;
$removeFiles = preg_grep('/Windows10\.0-KB.*-EXPRESS/i', $filesKeys);
foreach($removeFiles as $val) {
if(isset($files[$val])) unset($files[$val]);
}
unset($removeFiles, $temp);
$filesKeys = array_keys($files);
$filesKeys = preg_grep('/Windows10\.0-KB/i', $filesKeys);
if(count($filesKeys) == 0) {
return array('error' => 'NOT_CUMULATIVE_UPDATE');
}
break;
case 'WUBFILE':
$skipPackBuild = 1;
$filesKeys = preg_grep('/WindowsUpdateBox.exe/i', $filesKeys);
break;
}
if($fileListSource == 'GENERATEDPACKS') {
$temp = preg_grep('/Windows10\.0-KB.*-EXPRESS/i', $filesKeys, PREG_GREP_INVERT);
$temp = preg_grep('/Windows10\.0-KB/i', $temp);
$filesList = array_merge($filesList, $temp);
$newFiles = array();
foreach($filesList as $val) {
$name = preg_replace('/~31bf3856ad364e35/', '', $val);
$name = preg_replace('/~~\.|~\./', '.', $name);
$name = preg_replace('/~/', '-', $name);
$name = strtolower($name);
if(isset($files[$name])) {
$newFiles[$name] = $files[$name];
} }
} }
$files = $newFiles; return $files;
$filesKeys = array_keys($files);
}
if(empty($filesKeys)) {
return array('error' => 'NO_FILES');
}
foreach($filesKeys as $val) {
$filesNew[$val] = $files[$val];
}
$files = $filesNew;
ksort($files);
consoleLogger('Successfully parsed the information.');
return array(
'apiVersion' => uupApiVersion(),
'updateName' => $updateName,
'arch' => $updateArch,
'build' => $updateBuild,
'files' => $files,
);
} }

View File

@ -16,7 +16,7 @@ limitations under the License.
*/ */
function uupApiVersion() { function uupApiVersion() {
return '1.18.0'; return '1.19.0';
} }
require_once dirname(__FILE__).'/auths.php'; require_once dirname(__FILE__).'/auths.php';