<?php /* Copyright 2019 whatever127 Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ function sortBySize($a, $b) { global $files; if ($files[$a]['size'] == $files[$b]['size']) { return 0; } return ($files[$a]['size'] < $files[$b]['size']) ? -1 : 1; } //Create aria2 download package with conversion script function createUupConvertPackage( $url, $archiveName, $virtualEditions = 0, $desiredVE = array('Enterprise'), $moreOptions = [], $app = null ) { $updates = isset($moreOptions['updates']) ? $moreOptions['updates'] : 0; $cleanup = isset($moreOptions['cleanup']) ? $moreOptions['cleanup'] : 0; $netfx = isset($moreOptions['netfx']) ? $moreOptions['netfx'] : 0; $esd = isset($moreOptions['esd']) ? $moreOptions['esd'] : 0; $type = $esd ? 'esd' : 'wim'; $currDir = dirname(__FILE__).'/..'; $time = gmdate("Y-m-d H:i:s T", time()); $downloadapp = ""; if(!empty($app)) { $downloadapp = <<<TEXT :DOWNLOAD_APPS echo Retrieving aria2 script for Apps... "%aria2%" --no-conf --log-level=info --log="aria2_download.log" -o"%aria2Script%" --allow-overwrite=true --auto-file-renaming=false "$app" if %ERRORLEVEL% GTR 0 call :DOWNLOAD_ERROR & exit /b 1 for /F "tokens=2 delims=:" %%i in ('findstr #UUPDUMP_ERROR: "%aria2Script%"') do set DETECTED_ERROR=%%i if NOT [%DETECTED_ERROR%] == [] ( echo Unable to retrieve data from Windows Update servers. Reason: %DETECTED_ERROR% echo If this problem persists, most likely the set you are attempting to download was removed from Windows Update servers. echo. pause goto :EOF ) echo Attempting to download Apps files... "%aria2%" --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j25 -c -R -d"%destDir%" -i"%aria2Script%" if %ERRORLEVEL% GTR 0 goto :DOWNLOAD_APPS TEXT; } $cmdScript = <<<SCRIPT @echo off rem Generated on $time :: Proxy configuration :: If you need to configure a proxy to be able to connect to the internet, :: then you can do this by configuring the all_proxy environment variable. :: By default this variable is commented out, configuring aria2c to use :: the proxy settings specified by the system. :: :: Usage: set "all_proxy=proxy_address" :: For example: set "all_proxy=127.0.0.1:8888" :: :: More information how to use this can be found at: :: https://aria2.github.io/manual/en/html/aria2c.html#cmdoption-all-proxy :: https://aria2.github.io/manual/en/html/aria2c.html#environment :: Uncomment the following line to override the proxy settings specified :: by the system. :: :: set "all_proxy=" :: End of proxy configuration cd /d "%~dp0" if NOT "%cd%"=="%cd: =%" ( echo Current directory contains spaces in its path. echo Please move or rename the directory to one not containing spaces. echo. pause goto :EOF ) if "[%1]" == "[49127c4b-02dc-482e-ac4f-ec4d659b7547]" goto :START_PROCESS REG QUERY HKU\S-1-5-19\Environment >NUL 2>&1 && goto :START_PROCESS set command="""%~f0""" 49127c4b-02dc-482e-ac4f-ec4d659b7547 SETLOCAL ENABLEDELAYEDEXPANSION set "command=!command:'=''!" powershell -NoProfile Start-Process -FilePath '%COMSPEC%' ^ -ArgumentList '/c """!command!"""' -Verb RunAs 2>NUL IF %ERRORLEVEL% GTR 0 ( echo ===================================================== echo This script needs to be executed as an administrator. echo ===================================================== echo. pause ) SETLOCAL DISABLEDELAYEDEXPANSION goto :EOF :START_PROCESS set "aria2=files\\aria2c.exe" set "a7z=files\\7zr.exe" set "uupConv=files\\uup-converter-wimlib.7z" set "aria2Script=files\\aria2_script.%random%.txt" set "destDir=UUPs" powershell -NoProfile -ExecutionPolicy Unrestricted .\\files\\depends_win.ps1 || (pause & exit /b 1) echo. if NOT EXIST ConvertConfig.ini goto :NO_FILE_ERROR if NOT EXIST %a7z% goto :NO_FILE_ERROR if NOT EXIST %uupConv% goto :NO_FILE_ERROR echo Extracting UUP converter... "%a7z%" -x!ConvertConfig.ini -y x "%uupConv%" >NUL echo. $downloadapp :DOWNLOAD_UUPS echo Retrieving aria2 script... "%aria2%" --no-conf --log-level=info --log="aria2_download.log" -o"%aria2Script%" --allow-overwrite=true --auto-file-renaming=false "$url" if %ERRORLEVEL% GTR 0 call :DOWNLOAD_ERROR & exit /b 1 echo. for /F "tokens=2 delims=:" %%i in ('findstr #UUPDUMP_ERROR: "%aria2Script%"') do set DETECTED_ERROR=%%i if NOT [%DETECTED_ERROR%] == [] ( echo Unable to retrieve data from Windows Update servers. Reason: %DETECTED_ERROR% echo If this problem persists, most likely the set you are attempting to download was removed from Windows Update servers. echo. pause goto :EOF ) echo Attempting to download files... "%aria2%" --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j5 -c -R -d"%destDir%" -i"%aria2Script%" if %ERRORLEVEL% GTR 0 goto :DOWNLOAD_UUPS & exit /b 1 if EXIST convert-UUP.cmd goto :START_CONVERT pause goto :EOF :START_CONVERT call convert-UUP.cmd goto :EOF :NO_FILE_ERROR echo We couldn't find one of needed files for this script. pause goto :EOF :DOWNLOAD_ERROR echo. echo We have encountered an error while downloading files. pause goto :EOF :EOF SCRIPT; $shellScript = <<<SCRIPT #!/bin/bash #Generated on $time # Proxy configuration # If you need to configure a proxy to be able to connect to the internet, # then you can do this by configuring the all_proxy environment variable. # By default this variable is empty, configuring aria2c to not use any proxy. # # Usage: export all_proxy="proxy_address" # For example: export all_proxy="127.0.0.1:8888" # # More information how to use this can be found at: # https://aria2.github.io/manual/en/html/aria2c.html#cmdoption-all-proxy # https://aria2.github.io/manual/en/html/aria2c.html#environment export all_proxy="" # End of proxy configuration for prog in aria2c cabextract wimlib-imagex chntpw; do which \$prog &>/dev/null 2>&1 && continue; echo "\$prog does not seem to be installed" echo "Check the readme.unix.md for details" exit 1 done mkiso_present=0 which genisoimage &>/dev/null && mkiso_present=1 which mkisofs &>/dev/null && mkiso_present=1 if [ \$mkiso_present -eq 0 ]; then echo "genisoimage nor mkisofs does seem to be installed" echo "Check the readme.unix.md for details" exit 1 fi destDir="UUPs" tempScript="aria2_script.\$RANDOM.txt" echo "Downloading converters..." aria2c --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j5 --allow-overwrite=true --auto-file-renaming=false -d"files" -i"files/converter_multi" if [ $? != 0 ]; then echo "We have encountered an error while downloading files." exit 1 fi echo "" echo "Retrieving aria2 script..." aria2c --no-conf --log-level=info --log="aria2_download.log" -o"\$tempScript" --allow-overwrite=true --auto-file-renaming=false "$url" if [ $? != 0 ]; then echo "Failed to retrieve aria2 script" exit 1 fi detectedError=`grep '#UUPDUMP_ERROR:' "\$tempScript" | sed 's/#UUPDUMP_ERROR://g'` if [ ! -z \$detectedError ]; then echo "Unable to retrieve data from Windows Update servers. Reason: \$detectedError" echo "If this problem persists, most likely the set you are attempting to download was removed from Windows Update servers." exit 1 fi echo "" echo "Attempting to download files..." aria2c --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j5 -c -R -d"\$destDir" -i"\$tempScript" if [ $? != 0 ]; then echo "We have encountered an error while downloading files." exit 1 fi echo "" if [ -e ./files/convert.sh ]; then chmod +x ./files/convert.sh ./files/convert.sh $type "\$destDir" $virtualEditions fi SCRIPT; $desiredVirtualEditions = ''; $desiredVirtualEditionsLinux = ''; $index = 0; foreach($desiredVE as $edition) { if($index > 0) { $desiredVirtualEditions .= ','; $desiredVirtualEditionsLinux .= ' '; } $desiredVirtualEditions .= $edition; $desiredVirtualEditionsLinux .= $edition; $index++; } $convertConfig = <<<CONFIG [convert-UUP] AutoStart =1 AddUpdates =$updates Cleanup =$cleanup ResetBase =0 NetFx3 =$netfx StartVirtual =$virtualEditions wim2esd =$esd wim2swm =0 SkipISO =0 SkipWinRE =0 LCUwinre =0 UpdtBootFiles=0 ForceDism =0 RefESD =0 SkipLCUmsu =0 SkipEdge =0 AutoExit =0 DisableUpdatingUpgrade=0 [Store_Apps] SkipApps =0 AppsLevel =0 StubAppsFull =0 CustomList =0 [create_virtual_editions] vAutoStart =1 vDeleteSource=0 vPreserve =0 vwim2esd =$esd vwim2swm =0 vSkipISO =0 vAutoEditions=$desiredVirtualEditions CONFIG; $convertConfigLinux = <<<CONFIG VIRTUAL_EDITIONS_LIST='$desiredVirtualEditionsLinux' CONFIG; $cmdScript = str_replace(["\r\n", "\r"], "\n", $cmdScript); $convertConfig = str_replace(["\r\n", "\r"], "\n", $convertConfig); $shellScript = str_replace(["\r\n", "\r"], "\n", $shellScript); $convertConfigLinux = str_replace(["\r\n", "\r"], "\n", $convertConfigLinux); $cmdScript = str_replace("\n", "\r\n", $cmdScript); $convertConfig = str_replace("\n", "\r\n", $convertConfig); $zip = new ZipArchive; $archive = @tempnam($currDir.'/tmp', 'zip'); $open = $zip->open($archive, ZipArchive::CREATE+ZipArchive::OVERWRITE); if($open !== TRUE) { echo 'Failed to create archive.'; die(); } $zip->addFromString('uup_download_windows.cmd', $cmdScript); $zip->addFromString('uup_download_linux.sh', $shellScript); $zip->addFromString('uup_download_macos.sh', $shellScript); $zip->addFromString('ConvertConfig.ini', $convertConfig); $zip->addFromString('files/convert_config_linux', $convertConfigLinux); $zip->addFromString('files/convert_config_macos', $convertConfigLinux); $zip->addFile($currDir.'/contrib/autodl_files/readme.unix.md', 'readme.unix.md'); $zip->addFile($currDir.'/contrib/autodl_files/converter_multi', 'files/converter_multi'); $zip->addFile($currDir.'/contrib/autodl_files/depends_win.ps1', 'files/depends_win.ps1'); $zip->close(); if($virtualEditions) { $suffix = '_virtual'; } else { $suffix = ''; } header('Content-Type: archive/zip'); header('Content-Disposition: attachment; filename="'.$archiveName."_convert$suffix.zip\""); header('Content-Length: '.filesize($archive)); $content = file_get_contents($archive); unlink($archive); echo $content; } //Create aria2 download package only function createAria2Package($url, $archiveName, $app = null) { $currDir = dirname(__FILE__).'/..'; $time = gmdate("Y-m-d H:i:s T", time()); $ariacmd = <<<TEXT "%aria2%" --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j5 -c -R -d"%destDir%" -i"%aria2Script%" TEXT; $ariabash = <<<TEXT aria2c --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j5 -c -R -d"\$destDir" -i"\$tempScript" TEXT; if(strpos($archiveName, "_app")) { $ariacmd = <<<TEXT "%aria2%" --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j25 -c -R -d"%destDir%" -i"%aria2Script%" TEXT; $ariabash = <<<TEXT aria2c --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j25 -c -R -d"\$destDir" -i"\$tempScript" TEXT; } $downloadapp = ""; if(!empty($app)) { $downloadapp = <<<TEXT :DOWNLOAD_APPS echo Retrieving aria2 script for Apps... "%aria2%" --no-conf --log-level=info --log="aria2_download.log" -o"%aria2Script%" --allow-overwrite=true --auto-file-renaming=false "$app" if %ERRORLEVEL% GTR 0 call :DOWNLOAD_ERROR & exit /b 1 for /F "tokens=2 delims=:" %%i in ('findstr #UUPDUMP_ERROR: "%aria2Script%"') do set DETECTED_ERROR=%%i if NOT [%DETECTED_ERROR%] == [] ( echo Unable to retrieve data from Windows Update servers. Reason: %DETECTED_ERROR% echo If this problem persists, most likely the set you are attempting to download was removed from Windows Update servers. echo. pause goto :EOF ) echo Attempting to download Apps files... "%aria2%" --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j25 -c -R -d"%destDir%" -i"%aria2Script%" if %ERRORLEVEL% GTR 0 goto :DOWNLOAD_APPS TEXT; } $cmdScript = <<<SCRIPT @echo off rem Generated on $time :: Proxy configuration :: If you need to configure a proxy to be able to connect to the internet, :: then you can do this by configuring the all_proxy environment variable. :: By default this variable is empty, configuring aria2c to not use any proxy. :: :: Usage: set "all_proxy=proxy_address" :: For example: set "all_proxy=127.0.0.1:8888" :: :: More information how to use this can be found at: :: https://aria2.github.io/manual/en/html/aria2c.html#cmdoption-all-proxy :: https://aria2.github.io/manual/en/html/aria2c.html#environment set "all_proxy=" :: End of proxy configuration set "aria2=files\\aria2c.exe" set "aria2Script=files\\aria2_script.%random%.txt" set "destDir=UUPs" cd /d "%~dp0" powershell -NoProfile -ExecutionPolicy Unrestricted .\\files\\depends_win.ps1 -ForDownload || (pause & exit /b 1) echo. $downloadapp :DOWNLOAD_UUPS echo Retrieving aria2 script... "%aria2%" --no-conf --log-level=info --log="aria2_download.log" -o"%aria2Script%" --allow-overwrite=true --auto-file-renaming=false "$url" if %ERRORLEVEL% GTR 0 call :DOWNLOAD_ERROR & exit /b 1 for /F "tokens=2 delims=:" %%i in ('findstr #UUPDUMP_ERROR: "%aria2Script%"') do set DETECTED_ERROR=%%i if NOT [%DETECTED_ERROR%] == [] ( echo Unable to retrieve data from Windows Update servers. Reason: %DETECTED_ERROR% echo If this problem persists, most likely the set you are attempting to download was removed from Windows Update servers. echo. pause goto :EOF ) echo Attempting to download files... $ariacmd if %ERRORLEVEL% GTR 0 goto :DOWNLOAD_UUPS & exit /b 1 pause goto EOF :DOWNLOAD_ERROR echo. echo We have encountered an error while downloading files. pause goto EOF :EOF SCRIPT; $shellScript = <<<SCRIPT #!/bin/bash #Generated on $time # Proxy configuration # If you need to configure a proxy to be able to connect to the internet, # then you can do this by configuring the all_proxy environment variable. # By default this variable is empty, configuring aria2c to not use any proxy. # # Usage: export all_proxy="proxy_address" # For example: export all_proxy="127.0.0.1:8888" # # More information how to use this can be found at: # https://aria2.github.io/manual/en/html/aria2c.html#cmdoption-all-proxy # https://aria2.github.io/manual/en/html/aria2c.html#environment export all_proxy="" # End of proxy configuration which aria2c &>/dev/null || { echo "aria2c does not seem to be installed" echo "Check the readme.unix.md for details" exit 1 } destDir="UUPs" tempScript="aria2_script.\$RANDOM.txt" echo "Retrieving aria2 script..." aria2c --no-conf --log-level=info --log="aria2_download.log" -o"\$tempScript" --allow-overwrite=true --auto-file-renaming=false "$url" if [ $? != 0 ]; then echo "Failed to retrieve aria2 script" exit 1 fi detectedError=`grep '#UUPDUMP_ERROR:' "\$tempScript" | sed 's/#UUPDUMP_ERROR://g'` if [ ! -z \$detectedError ]; then echo "Unable to retrieve data from Windows Update servers. Reason: \$detectedError" echo "If this problem persists, most likely the set you are attempting to download was removed from Windows Update servers." exit 1 fi echo "" echo "Attempting to download files..." $ariabash if [ $? != 0 ]; then echo "We have encountered an error while downloading files." exit 1 fi SCRIPT; $cmdScript = str_replace(["\r\n", "\r"], "\n", $cmdScript); $shellScript = str_replace(["\r\n", "\r"], "\n", $shellScript); $cmdScript = str_replace("\n", "\r\n", $cmdScript); $zip = new ZipArchive; $archive = @tempnam($currDir.'/tmp', 'zip'); $open = $zip->open($archive, ZipArchive::CREATE+ZipArchive::OVERWRITE); if($open === TRUE) { $zip->addFromString('uup_download_windows.cmd', $cmdScript); $zip->addFromString('uup_download_linux.sh', $shellScript); $zip->addFromString('uup_download_macos.sh', $shellScript); $zip->addFile($currDir.'/contrib/autodl_files/readme.unix.md', 'readme.unix.md'); $zip->addFile($currDir.'/contrib/autodl_files/depends_win.ps1', 'files/depends_win.ps1'); $zip->close(); } else { echo 'Failed to create archive.'; die(); } header('Content-Type: archive/zip'); header('Content-Disposition: attachment; filename="'.$archiveName.'.zip"'); header('Content-Length: '.filesize($archive)); $content = file_get_contents($archive); unlink($archive); echo $content; }