commit 67900d33a0813c06a973050fb54ddb9fd93b329b Author: Nemo Date: Thu Jul 15 23:50:42 2021 +0530 Initial commit :boom: diff --git a/HACKING.md b/HACKING.md new file mode 100644 index 0000000..8d4b05c --- /dev/null +++ b/HACKING.md @@ -0,0 +1,11 @@ +# HACKING + +`fingerprint.php` does all the work. Just run it. versions.txt is generated from a list of all usable tags on the electron repo. + +This includes all releases that were not: + +1. nightly releases +2. beta releases +3. older than 0.24.0 (electron was called atom-shell before that) + +All generated hashes are kept in `hashes/`. \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5709178 --- /dev/null +++ b/LICENSE @@ -0,0 +1,13 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2021 Abhay Rana + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..d1d2f7e --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# electron-fingerprints + +Generates fingerprints for electron version detection by downloading electron releases and generating checksums of the files contained in each release. + +## why + +You can use this to guess which electron version is being used in a given application. +A given electron version is (almost always) tightly bound to a node and chrome release as well, so +you get a better sense of what the application is running. + +Written as the backend for [`which-electon`][we]. + +## usage + +This is just the raw data files, see [which-electron][we] for a usable package. + +## LICENSE + +Released under WTFPL. + +[we]: https://github.com/captn3m0/which-electron \ No newline at end of file diff --git a/fingerprint.php b/fingerprint.php new file mode 100644 index 0000000..9c7cd7d --- /dev/null +++ b/fingerprint.php @@ -0,0 +1,69 @@ +setFlags(RecursiveDirectoryIterator::SKIP_DOTS); + $ite = new RecursiveIteratorIterator($dir); + + foreach($ite as $file) { + yield $file->getPathName(); + } +} + +function generateFingerprint($version, $output, $hash_file) { + $manifest = []; + + $manifest['version'] = $version; + foreach(rsearch($output) as $file) { + $path = substr($file, strlen($output) + 1); + $manifest[$path] = sha1_file($file); + } + $json = json_encode($manifest, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES); + file_put_contents($hash_file, $json); +} + +function download_release($url, $output) { + @unlink($output); + system("wget --quiet --max-redirect=5 '$url' -O /dev/shm/test.zip", $ret); + + return ($ret === 0); +} + +function extract_release($input, $output) { + $zip = new ZipArchive(); + if (!$zip->open($input)) { + die("Download failed?"); + } + `rm -rf $output`; + mkdir($output); + + if(!$zip->extractTo($output)) { + die("Failed extraction"); + } + + $zip->close(); +} + +$archs = ['x64']; +$oses = ['linux', 'darwin', 'win32']; + +foreach(file('versions.txt', FILE_IGNORE_NEW_LINES) as $version) { + foreach($oses as $os) { + foreach($archs as $arch) { + $hash_file = "hashes/$os-$arch-$version.json"; + if (!file_exists($hash_file)) { + $zipfile = '/dev/shm/test.zip'; + $output = '/dev/shm/electron'; + $url = "https://github.com/electron/electron/releases/download/$version/electron-$version-$os-$arch.zip"; + echo $url . PHP_EOL; + + if (download_release($url, $zipfile)) { + extract_release($zipfile, $output); + generateFingerprint($version, $output, $hash_file); + } else { + echo "[DL:FAIL] $version\n"; + } + } + } + } +} diff --git a/versions.txt b/versions.txt new file mode 100644 index 0000000..292f90c --- /dev/null +++ b/versions.txt @@ -0,0 +1,441 @@ +v0.24.0 +v0.25.0 +v0.25.1 +v0.25.2 +v0.25.3 +v0.26.0 +v0.26.1 +v0.27.0 +v0.27.1 +v0.27.2 +v0.27.3 +v0.28.0 +v0.28.1 +v0.28.2 +v0.28.3 +v0.29.0 +v0.29.1 +v0.29.2 +v0.30.0 +v0.30.1 +v0.30.2 +v0.30.3 +v0.30.4 +v0.30.5 +v0.30.6 +v0.30.7 +v0.30.8 +v0.31.0 +v0.31.1 +v0.31.2 +v0.32.0 +v0.32.1 +v0.32.2 +v0.32.3 +v0.33.0 +v0.33.1 +v0.33.2 +v0.33.3 +v0.33.4 +v0.33.5 +v0.33.6 +v0.33.7 +v0.33.8 +v0.33.9 +v0.34.0 +v0.34.1 +v0.34.2 +v0.34.3 +v0.34.4 +v0.34.5 +v0.35.0 +v0.35.1 +v0.35.2 +v0.35.3 +v0.35.4 +v0.35.5 +v0.35.6 +v0.36.0 +v0.36.1 +v0.36.10 +v0.36.11 +v0.36.12 +v0.36.2 +v0.36.3 +v0.36.4 +v0.36.5 +v0.36.6 +v0.36.7 +v0.36.8 +v0.36.9 +v0.37.0 +v0.37.1 +v0.37.2 +v0.37.3 +v0.37.4 +v0.37.5 +v0.37.6 +v0.37.7 +v0.37.8 +v1.0.0 +v1.0.1 +v1.0.2 +v1.1.0 +v1.1.1 +v1.1.2 +v1.1.3 +v1.2.0 +v1.2.1 +v1.2.2 +v1.2.3 +v1.2.4 +v1.2.5 +v1.2.6 +v1.2.7 +v1.2.8 +v1.3.0 +v1.3.1 +v1.3.10 +v1.3.11 +v1.3.12 +v1.3.13 +v1.3.14 +v1.3.15 +v1.3.2 +v1.3.3 +v1.3.4 +v1.3.5 +v1.3.6 +v1.3.7 +v1.3.8 +v1.3.9 +v1.4.0 +v1.4.1 +v1.4.10 +v1.4.11 +v1.4.12 +v1.4.13 +v1.4.14 +v1.4.15 +v1.4.16 +v1.4.2 +v1.4.3 +v1.4.4 +v1.4.5 +v1.4.6 +v1.4.7 +v1.4.8 +v1.4.9 +v1.5.0 +v1.5.1 +v1.6.0 +v1.6.1 +v1.6.10 +v1.6.11 +v1.6.12 +v1.6.13 +v1.6.14 +v1.6.15 +v1.6.16 +v1.6.17 +v1.6.18 +v1.6.2 +v1.6.3 +v1.6.4 +v1.6.5 +v1.6.6 +v1.6.7 +v1.6.8 +v1.6.9 +v1.7.0 +v1.7.1 +v1.7.10 +v1.7.11 +v1.7.12 +v1.7.13 +v1.7.14 +v1.7.15 +v1.7.16 +v1.7.2 +v1.7.3 +v1.7.4 +v1.7.5 +v1.7.6 +v1.7.7 +v1.7.8 +v1.7.9 +v1.8.0 +v1.8.1 +v1.8.2 +v1.8.3 +v1.8.4 +v1.8.5 +v1.8.6 +v1.8.7 +v1.8.8 +v10.0.0 +v10.0.1 +v10.1.0 +v10.1.1 +v10.1.2 +v10.1.3 +v10.1.4 +v10.1.5 +v10.1.6 +v10.1.7 +v10.2.0 +v10.3.0 +v10.3.1 +v10.3.2 +v10.4.0 +v10.4.1 +v10.4.2 +v10.4.3 +v10.4.4 +v10.4.5 +v10.4.6 +v10.4.7 +v11.0.0 +v11.0.1 +v11.0.2 +v11.0.3 +v11.0.4 +v11.0.5 +v11.1.0 +v11.1.1 +v11.2.0 +v11.2.1 +v11.2.2 +v11.2.3 +v11.3.0 +v11.4.0 +v11.4.1 +v11.4.10 +v11.4.2 +v11.4.3 +v11.4.4 +v11.4.5 +v11.4.6 +v11.4.7 +v11.4.8 +v11.4.9 +v12.0.0 +v12.0.1 +v12.0.10 +v12.0.11 +v12.0.12 +v12.0.13 +v12.0.14 +v12.0.15 +v12.0.2 +v12.0.3 +v12.0.4 +v12.0.5 +v12.0.6 +v12.0.7 +v12.0.8 +v12.0.9 +v13.0.0 +v13.0.1 +v13.1.0 +v13.1.1 +v13.1.2 +v13.1.3 +v13.1.4 +v13.1.5 +v13.1.6 +v13.1.7 +v2.0.0 +v2.0.1 +v2.0.10 +v2.0.11 +v2.0.12 +v2.0.13 +v2.0.14 +v2.0.15 +v2.0.16 +v2.0.17 +v2.0.18 +v2.0.2 +v2.0.3 +v2.0.4 +v2.0.5 +v2.0.6 +v2.0.7 +v2.0.8 +v2.0.9 +v2.1.0-unsupported-20180809 +v2.1.0-unsupported.20180809 +v3.0.0 +v3.0.1 +v3.0.10 +v3.0.11 +v3.0.12 +v3.0.13 +v3.0.14 +v3.0.15 +v3.0.16 +v3.0.2 +v3.0.3 +v3.0.4 +v3.0.5 +v3.0.6 +v3.0.7 +v3.0.8 +v3.0.9 +v3.1.0 +v3.1.1 +v3.1.10 +v3.1.11 +v3.1.12 +v3.1.13 +v3.1.2 +v3.1.3 +v3.1.4 +v3.1.5 +v3.1.6 +v3.1.7 +v3.1.8 +v3.1.9 +v4.0.0 +v4.0.1 +v4.0.2 +v4.0.3 +v4.0.4 +v4.0.5 +v4.0.6 +v4.0.7 +v4.0.8 +v4.1.0 +v4.1.1 +v4.1.2 +v4.1.3 +v4.1.4 +v4.1.5 +v4.2.0 +v4.2.1 +v4.2.10 +v4.2.11 +v4.2.12 +v4.2.2 +v4.2.3 +v4.2.4 +v4.2.5 +v4.2.6 +v4.2.7 +v4.2.8 +v4.2.9 +v5.0.0 +v5.0.1 +v5.0.10 +v5.0.11 +v5.0.12 +v5.0.13 +v5.0.2 +v5.0.3 +v5.0.4 +v5.0.5 +v5.0.6 +v5.0.7 +v5.0.8 +v5.0.9 +v6.0.0 +v6.0.1 +v6.0.10 +v6.0.11 +v6.0.12 +v6.0.2 +v6.0.3 +v6.0.4 +v6.0.5 +v6.0.6 +v6.0.7 +v6.0.8 +v6.0.9 +v6.1.0 +v6.1.1 +v6.1.10 +v6.1.11 +v6.1.12 +v6.1.2 +v6.1.3 +v6.1.4 +v6.1.5 +v6.1.6 +v6.1.7 +v6.1.8 +v6.1.9 +v7.0.0 +v7.0.1 +v7.1.0 +v7.1.1 +v7.1.10 +v7.1.11 +v7.1.12 +v7.1.13 +v7.1.14 +v7.1.2 +v7.1.3 +v7.1.4 +v7.1.5 +v7.1.6 +v7.1.7 +v7.1.8 +v7.1.9 +v7.2.0 +v7.2.1 +v7.2.2 +v7.2.3 +v7.2.4 +v7.3.0 +v7.3.1 +v7.3.2 +v7.3.3 +v8.0.0 +v8.0.1 +v8.0.2 +v8.0.3 +v8.1.0 +v8.1.1 +v8.2.0 +v8.2.1 +v8.2.2 +v8.2.3 +v8.2.4 +v8.2.5 +v8.3.0 +v8.3.1 +v8.3.2 +v8.3.3 +v8.3.4 +v8.4.0 +v8.4.1 +v8.5.0 +v8.5.1 +v8.5.2 +v8.5.3 +v8.5.4 +v8.5.5 +v9.0.0 +v9.0.1 +v9.0.2 +v9.0.3 +v9.0.4 +v9.0.5 +v9.0.6 +v9.1.0 +v9.1.1 +v9.1.2 +v9.2.0 +v9.2.1 +v9.3.0 +v9.3.1 +v9.3.2 +v9.3.3 +v9.3.4 +v9.3.5 +v9.4.0 +v9.4.1 +v9.4.2 +v9.4.3 +v9.4.4