From 71ee3673674e7f535410bd91e09661b254ebb042 Mon Sep 17 00:00:00 2001 From: mkuba50 Date: Tue, 15 Jan 2019 21:28:57 +0100 Subject: [PATCH] Add option to get list of UUP without generation of links --- get.php | 254 +++++++++++++++++++++++++++++------------------- shared/main.php | 2 +- 2 files changed, 153 insertions(+), 103 deletions(-) diff --git a/get.php b/get.php index 3697dad..ea17f69 100644 --- a/get.php +++ b/get.php @@ -19,11 +19,21 @@ require_once dirname(__FILE__).'/shared/main.php'; require_once dirname(__FILE__).'/shared/requests.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( $updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6', $usePack = 0, $desiredEdition = 0, - $cacheRequests = 0 + $requestType = 0 ) { uupApiPrintBrand(); @@ -95,9 +105,6 @@ function uupGetFiles( break; } - $cacheHash = hash('sha1', strtolower("api-get-$updateId")); - $cached = 0; - $rev = 1; if(preg_match('/_rev\./', $updateId)) { $rev = preg_replace('/.*_rev\./', '', $updateId); @@ -108,6 +115,115 @@ function uupGetFiles( $updateBuild = (isset($info['build'])) ? $info['build'] : 'UNKNOWN'; $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) { $cache = @gzdecode(@file_get_contents('cache/'.$cacheHash.'.json.gz')); $cache = json_decode($cache, 1); @@ -224,103 +340,37 @@ function uupGetFiles( $files[$newName] = $temp; } } - unset($temp, $newName); - $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, - ); + return $files; +} + +function uupGetOfflineFiles($info) { + if(empty($info['files'])) return array(); + + consoleLogger('Parsing information...'); + foreach($info['files'] as $sha1 => $val) { + $name = $val['name']; + $size = $val['size']; + if(!isset($fileSizes[$name])) $fileSizes[$name] = 0; + + if($size > $fileSizes[$name]) { + $fileSizes[$name] = $size; + + $temp = array(); + $temp['sha1'] = $sha1; + $temp['size'] = $size; + $temp['url'] = null; + $temp['uuid'] = null; + $temp['expire'] = 0; + + $newName = preg_replace('/^cabs_|^metadataesd_|~31bf3856ad364e35/i', '', $name); + $newName = preg_replace('/~~\.|~\./', '.', $newName); + $newName = preg_replace('/~/', '-', $newName); + $newName = strtolower($newName); + + $files[$newName] = $temp; + } + } + + return $files; } diff --git a/shared/main.php b/shared/main.php index 6e697fd..98f233c 100644 --- a/shared/main.php +++ b/shared/main.php @@ -16,7 +16,7 @@ limitations under the License. */ function uupApiVersion() { - return '1.18.0'; + return '1.19.0'; } require_once dirname(__FILE__).'/auths.php';