diff --git a/composer.json b/composer.json index 2b677b8..aac9222 100644 --- a/composer.json +++ b/composer.json @@ -1,12 +1,14 @@ { "name": "sikofitt/tor-spider", "description": "Tor Spider", - "type": "library", + "type": "project", "license": "GPL-3.0", "authors": [ { "name": "sikofitt", - "email": "sikofitt@gmail.com" + "email": "sikofitt@gmail.com", + "role": "Developer", + "homepage": "http://rewiv.com" } ], "autoload": { @@ -16,8 +18,9 @@ }, "require": { "php": ">=5.5", - "megahertz/guzzle-tor": "^1.0", + "ext-curl":"*", "guzzlehttp/guzzle": "^6.2", + "megahertz/guzzle-tor": "^1.0", "symfony/browser-kit": "^2.8", "symfony/css-selector": "^2.8", "symfony/process": "^2.8", diff --git a/composer.lock b/composer.lock index 3dfc3cf..e0d6083 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "7a82807babab3d996722517a360f1566", - "content-hash": "c31f2eb8e902c95a35f2557762156959", + "hash": "f32953690bad3de29ca6b2542acc1b29", + "content-hash": "149eb0993f5007ea0ffa28c7f9762f3b", "packages": [ { "name": "guzzlehttp/guzzle", @@ -2219,7 +2219,8 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=5.5" + "php": ">=5.5", + "ext-curl": "*" }, "platform-dev": [], "platform-overrides": { diff --git a/src/Sikofitt/OS/OSReleaseProber.php b/src/Sikofitt/OS/OSReleaseProber.php index e21a134..3f80c13 100644 --- a/src/Sikofitt/OS/OSReleaseProber.php +++ b/src/Sikofitt/OS/OSReleaseProber.php @@ -10,13 +10,29 @@ namespace Sikofitt\OS; class OSReleaseProber { + const DEBIAN_DIST = 1; + const GENTOO_DIST = 2; + const REDHAT_DIST = 3; + const WINDOWS = 4; + private $releaseType; public function getReleaseFile() { - + if(in_array(PHP_OS, array('WIN', 'WINNT'), false)) { + return self::WINDOWS; + } + if(file_exists('/etc/gentoo-release')) { + return self::GENTOO_DIST; + } + if(file_exists('/etc/redhat-release')) { + return self::REDHAT_DIST; + } + if(file_exists('/etc/debian-release')) { + return self::DEBIAN_DIST; + } } - public function ParseReleaseFile() + private function parseReleaseFile() { } diff --git a/src/Sikofitt/Tor/Console/Command/TorDownloadCommand.php b/src/Sikofitt/Tor/Console/Command/TorDownloadCommand.php index 3bfce0f..8bab0d9 100644 --- a/src/Sikofitt/Tor/Console/Command/TorDownloadCommand.php +++ b/src/Sikofitt/Tor/Console/Command/TorDownloadCommand.php @@ -9,6 +9,7 @@ namespace Sikofitt\Tor\Console\Command; use GuzzleHttp\Client; +use Sikofitt\OS\OSReleaseProber; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; @@ -29,7 +30,7 @@ class TorDownloadCommand extends Command { const TOR_APT_COMMAND = 'apt-get install tor -y'; //etc/os-release const TOR_EMERGE_COMMAND = 'emerge -v net-misc/tor'; //etc/os-release const TOR_YUM_COMMAND = 'yum install tor'; //etc/redhat-release - + const TOR_WINDOWS_COMMAND = '\tor-win32-0.2.8.11\Tor\tor.exe'; private $downloadUrls = [ 'linux' => [ 'file' => 'https://www.torproject.org/dist/tor-0.2.9.8.tar.gz', @@ -38,7 +39,8 @@ class TorDownloadCommand extends Command { 'b64' => 'LS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KCmlRSWNCQUFCQWdBR0JRSllWL043QUFvSkVHcis1dFNla3JZQkxPMFAvMGpxYU5GbW0vOVQxOGlUWFE1eWg1SWcKZVNqRENWZndvSFhCSXFjTC9GbGc0dkxGOWlaSEFDNWhTVU5BTjA1VVcrSWRFcllpb1lNSGFpdW5EbGJEdEh3Nwp2N2FRTDY0eHMxaWxJamh5Q0VlWXdqYXU0L0gwci9kVFNvREw1eFozOGpsOFlMY21MVXBmaDFmcWxxb1prbENTCnZDdHc5dDhsb2ppSlVZK1pyNVZCd1hrL2h4LzdEM2tSVzcxRzJBYTh6ODMxMFN3Q1JjRy8xTnh6dElQdlJWczAKeDZFYlorMTk1Zk1CMUwyL0FHeHFDSmdyeGQrekNqRGp2dGh6S0wrbldrTkQrUUk0MStmRTNiWUdFVHRkZ1B0Tgp0WkVlQU9sUVV3Ujl5RW5FbjlQYlpyQzdVZktCaFBtV0hFM3BSNzltUzNVa0ZVcWJXSUVkUVJrcDIvODh4RFpWCi9hbUtMMWdoVCtOUStCMXUrenJQamhvSGFHZzZRaUp0eGQzTTVMdHZjdytjUU1KblZKeFlTdXRYVXA4Y0c0WUIKN2UrQVhyM2szWTg5OTV1MUJ5UC9uYzd6ekdtSnJTZitSV3RuYnN6d01kK0x1RWpjajQ1TUY4MU84WHdlbXVtcwp2anorWGpzWUJPMDJuSXpYVUNKWER6QURGSlJTbEtRWDh2Y0haTXVtOVg2Rnl4eUp6MXF6TFlBL1dkWUtKMjdFCk11Yk9pSzZua3BmR3dRY1pFbFNCcjI3M1hvR01zRlFTTlZ0SHJnNEtiT2wyVm5ha2lObFVJZVlteFdadlkraisKUll3allpcVk4SjVCSDBId1pYcFBNU0MvSGV1d3I4K1o2bFJ2bXVoVDBpQU03cXNYdHJ2YzYwdCtVQ1RQSTU4cgp5L0t1NDI1VThIa1BuSkRpVVdGQwo9THZtOQotLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0K', ], 'windows' => [ - 'file' => 'https://www.torproject.org/dist/torbrowser/6.0.8/tor-win32-0.2.8.11.zip', + 'file' => 'http://www.torproject.org/dist/torbrowser/6.0.8/tor-win32-0.2.8.11.zip', + 'filename' => 'tor-win32-0.2.8.11.zip', 'sig' => 'https://www.torproject.org/dist/torbrowser/6.0.8/tor-win32-0.2.8.11.zip.asc', 'b64' => 'LS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KCmlRSWNCQUFCQ2dBR0JRSllUKzF6QUFvSkVDNGF4bzdVQ0JUZ2ZTa1Avamk3aUtMTlR3UUNzNis3eEVDZFc5MkUKbU5QaFNpQ3pqS25nM0E5RCt0Sy9LQlVxOHVueDYvRll5WUQ0UFRpNU50clgvV3BPVU9xU1FZT3VFQmFaTnFuMgovemg0R0o3bi93bHQ0Y3Z0MHZvRXhRanhYMUFwS1lGNGJDb1hJcis2ZkloVlM3Z0ZJREtIVHBOQkZDQy85TExUCjNwbVkwbkhaQkk1SU11R2Jaell6THJWUEU4aWFEa0wzdVNkYUVBT3p3WW5wM29yY1Q4SlJnK04xS1o1MjZ2WGYKaml5NFF1MEV2RVZ6NmtGTmdqV3hTaitldVhlc081b2MvdjZtT1JsVWN4SURybDRGZnBmbjdsS0t3SnhQWS92cQpKc0M2Mlp0cFRjK0luWTJMV1dkVHhRMnpzdEo0bDZGZGxjSFNJd09SZDVKU1M0Um8rZjlBWEh5YjUvNW5nUnZ6CkR2eHRpV29tYTdzTkM2dWVSeHN6STIxRWtNZHdicXd2TWdTNG43R2U3d3ZWY1Z0WFByeEpJL3dITit1SnJYWkIKbmZaVUhaZkdqbENxdkhDS2ZWemVjamFLaVpSYjNiQzZadHNNWkF5UG9RbjlUUzhHTmtweGN4bG4ycHM1cUFqaAp6K0ttemxvTU1jWE93LzJRZ2pDMnJBeWdubTY1N0hHTFRQRFBzdDkwRkdvZmlpdExLVGJBRVpKZktKeTg3U1VvCnRYejhLSGE3WHBqRVhDSG85dVI1STJTMkUvL1o3aUZ6T1JXaTBYUms0S2FPOHNtNlNJK29BKzhUcSsrT2M0OSsKcmN5RlJzdG5QdXF6c1poZXgrZmwwWk9tN3c5RG5VWkpXWUtHak83b0RWQlJzSzZUVi9kZnFVdTVjdVU1ekVWLwpBbTNSRjJHQU5vUUg4TzVFS0Z1Vgo9ZnBPOQotLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0K', ], @@ -57,20 +59,41 @@ class TorDownloadCommand extends Command { public function execute(InputInterface $input, OutputInterface $output) { - if(false === file_exists($this->baseDir . '/' . $this->downloadUrls['linux']['filename'])) - { - $guzzle = new Client(); - $file = $guzzle->get($this->downloadUrls['linux']['file']); - file_put_contents($this->baseDir . '/' . $this->downloadUrls['linux']['filename'], $file->getBody()->getContents()); - } + $prober = new OSReleaseProber(); + $dist = $prober->getReleaseFile(); + switch($dist) { + case OSReleaseProber::DEBIAN_DIST; + default: + $command = self::TOR_APT_COMMAND; + break; + case OSReleaseProber::REDHAT_DIST; + $command = self::TOR_YUM_COMMAND; + break; + case OSReleaseProber::GENTOO_DIST; + $command = self::TOR_EMERGE_COMMAND; + break; + case OSReleaseProber::WINDOWS; + $command = self::TOR_WINDOWS_COMMAND; + break; + } + if($command !== self::TOR_WINDOWS_COMMAND) { + print 'run ' . $command . ' to install tor'; + exit; + } + $fileData = $this->downloadUrls['windows']; - $tar = new ProcessBuilder(); - $tar->setPrefix('/bin/tar') - ->setWorkingDirectory($this->baseDir) - ->setArguments(array('-zxvf', $this->downloadUrls['linux']['filename'])); - $process = $tar->getProcess(); - $process->run(); + if(false === file_exists($this->baseDir . '/' . $this->downloadUrls['windows']['filename'])) { + $guzzle = new Client(['verify' => false]); + $file = $guzzle->get($this->downloadUrls['windows']['file']); + + file_put_contents($this->baseDir . '/' . $this->downloadUrls['windows']['filename'], $file->getBody()->getContents()); + } + $zip = new \ZipArchive($this->baseDir . '/' . $this->downloadUrls['windows']['filename']); + + $zip->open($this->baseDir . '/' . $this->downloadUrls['windows']['filename']); + $zip->extractTo($this->baseDir . '/tor'); + $zip->close(); } } \ No newline at end of file diff --git a/tor b/tor deleted file mode 120000 index 7016519..0000000 --- a/tor +++ /dev/null @@ -1 +0,0 @@ -tor.php \ No newline at end of file