diff --git a/fetchupd.php b/fetchupd.php index 78f0bc0..ac9165f 100644 --- a/fetchupd.php +++ b/fetchupd.php @@ -21,6 +21,33 @@ require_once dirname(__FILE__).'/shared/cache.php'; require_once dirname(__FILE__).'/shared/fileinfo.php'; require_once dirname(__FILE__).'/listid.php'; +function uupApiPrivateParseFlags($str) { + $split = explode('+', $str); + $flags = []; + + if(isset($split[1])) + $flags = explode(',', strtolower($split[1])); + + return [$split[0], $flags]; +} + +function uupApiPrivateGetLatestBuild() { + $builds = array('22000.1'); + + $ids = uupListIds(); + if(isset($ids['error'])) { + $ids['builds'] = array(); + } + + if(empty($ids['builds'])) { + $build = $builds[0]; + } else { + $build = $ids['builds'][0]['build']; + } + + return $build; +} + function uupFetchUpd( $arch = 'amd64', $ring = 'WIF', @@ -38,20 +65,11 @@ function uupFetchUpd( $flight = ucwords(strtolower($flight)); $flight = 'Active'; + $buildWithFlags = $build; + [$build, $flags] = uupApiPrivateParseFlags($build); + if($build == 'latest' || (!$build)) { - $builds = array('22000.1'); - - $ids = uupListIds(); - if(isset($ids['error'])) { - $ids['builds'] = array(); - } - - if(empty($ids['builds'])) { - $build = $builds[0]; - } else { - $build = $ids['builds'][0]['build']; - } - unset($builds, $ids); + $build = uupApiPrivateGetLatestBuild(); } $build = explode('.', $build); @@ -96,13 +114,13 @@ function uupFetchUpd( $type = 'Production'; } - $res = "api-fetch-$arch-$ring-$flight-$build-$minor-$sku-$type"; + $res = "api-fetch-$arch-$ring-$flight-$buildWithFlags-$minor-$sku-$type"; $cache = new UupDumpCache($res); $fromCache = $cache->get(); if($fromCache !== false) return $fromCache; consoleLogger('Fetching information from the server...'); - $composerArgs = [$arch, $flight, $ring, $build, $sku, $type]; + $composerArgs = [$arch, $flight, $ring, $build, $sku, $type, $flags]; $out = sendWuPostRequestHelper('client', 'composeFetchUpdRequest', $composerArgs); if($out['error'] != 200) { consoleLogger('The request has failed'); @@ -130,7 +148,7 @@ function uupFetchUpd( $num++; consoleLogger("Checking build information for update {$num} of {$updatesNum}..."); - $info = parseFetchUpdate($val, $out, $arch, $ring, $flight, $build, $sku, $type); + $info = parseFetchUpdate($val, $out, $arch, $ring, $flight, $build, $sku, $type, $flags); if(isset($info['error'])) { $errorCount++; continue; @@ -160,7 +178,7 @@ function uupFetchUpd( return $data; } -function parseFetchUpdate($updateInfo, $out, $arch, $ring, $flight, $build, $sku, $type) { +function parseFetchUpdate($updateInfo, $out, $arch, $ring, $flight, $build, $sku, $type, $flags) { $updateNumId = preg_replace('/|<\/ID>.*/i', '', $updateInfo); $updates = preg_replace('//', "\n", $out); @@ -351,6 +369,10 @@ function parseFetchUpdate($updateInfo, $out, $arch, $ring, $flight, $build, $sku $temp['releasetype'] = $type; } + if(!empty($flags)) { + $temp['flags'] = $flags; + } + $temp['created'] = time(); $temp['sha256ready'] = true; $temp['files'] = $shaArray; diff --git a/shared/main.php b/shared/main.php index 655c417..ee39aa2 100644 --- a/shared/main.php +++ b/shared/main.php @@ -16,7 +16,7 @@ limitations under the License. */ function uupApiVersion() { - return '1.42.1'; + return '1.43.0-dev'; } require_once dirname(__FILE__).'/auths.php'; diff --git a/shared/requests.php b/shared/requests.php index 2465f43..e4cfb5e 100644 --- a/shared/requests.php +++ b/shared/requests.php @@ -16,7 +16,7 @@ limitations under the License. */ // Composes DeviceAttributes parameter needed to fetch data -function composeDeviceAttributes($flight, $ring, $build, $arch, $sku, $type) { +function composeDeviceAttributes($flight, $ring, $build, $arch, $sku, $type, $flags) { $branch = branchFromBuild($build); $blockUpgrades = 0; $flightEnabled = 1; @@ -216,11 +216,11 @@ function composeDeviceAttributes($flight, $ring, $build, $arch, $sku, $type) { 'WuClientVer='.$build, ); - if(uupApiConfigIsTrue('fetch_sync_current_only')) { + if(in_array('thisonly', $flags)) { $attrib[] = 'MediaBranch='.$branch; } - if($ring == 'MSIT' && uupApiConfigIsTrue('allow_corpnet')) { + if(in_array('corpnet', $flags) && uupApiConfigIsTrue('allow_corpnet')) { $attrib[] = 'DUInternal=1'; } @@ -316,7 +316,8 @@ function composeFileGetRequest($updateId, $info, $rev = 1, $type = 'Production') isset($info['checkBuild']) ? $info['checkBuild'] : '10.0.19041.1', isset($info['arch']) ? $info['arch'] : 'amd64', isset($info['sku']) ? $info['sku'] : 48, - $type + $type, + isset($info['flags']) ? $info['flags'] : [], ); return << @@ -575,7 +576,7 @@ function composeFetchUpdRequest($arch, $flight, $ring, $build, $sku = 48, $type - $syncCurrentStr + $syncCurrent $deviceAttributes $callerAttrib $products