| 
						
						
						
					 | 
				
				 | 
				
					@ -1,6 +1,7 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					<?php namespace App\SupportedApps; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					class Deluge implements Contracts\Applications { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use GuzzleHttp\Exception\GuzzleException; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use GuzzleHttp\Client; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					class Deluge implements Contracts\Applications, Contracts\Livestats { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public function defaultColour() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return '#357'; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -9,4 +10,100 @@ class Deluge implements Contracts\Applications { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return 'supportedapps/deluge.png'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public function configDetails() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return 'deluge'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public function testConfig() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $res = $this->login()[0]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        switch($res->getStatusCode()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            case 200: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                $data = json_decode($res->getBody()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if(!isset($data->result) || is_null($data->result) || $data->result == false) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    echo 'Failed: Invalid Credentials'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    echo 'Successfully connected to the API'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            case 401: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                echo 'Failed: Invalid credentials'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            case 404: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                echo 'Failed: Please make sure your URL is correct and that there is a trailing slash'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            default: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                echo 'Something went wrong... Code: '.$res->getStatusCode(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public function executeConfig() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $html = ''; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $active = 'active'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $jar = $this->login()[1]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $res = $this->getDetails($jar); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $data = json_decode($res->getBody()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $download_rate = $data->result->stats->download_rate; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $upload_rate = $data->result->stats->upload_rate; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $seed_count = $data->result->filters->state[2]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $leech_count = $data->result->filters->state[1]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $html = ' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        <ul class="livestats"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            <li><span class="title"><i class="fas fa-arrow-down"></i> '.$this->formatBytes($download_rate).'</span></li> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            <li><span class="title"><i class="fas fa-arrow-up"></i> '.$this->formatBytes($upload_rate).'</span></li> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        </ul> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        <ul class="livestats"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            <li><span class="title">Leech: '.$leech_count[1].'</span></li> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            <li><span class="title">Seed: '.$seed_count[1].'</span></li> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        </ul> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        '; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return json_encode(['status' => $active, 'html' => $html]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public function getDetails($jar) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $config = $this->config; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $url = $config->url; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $url = rtrim($url, '/'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $api_url = $url.'/json'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $client = new Client(['http_errors' => false, 'timeout' => 15, 'connect_timeout' => 15]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $res = $client->request('POST', $api_url, [ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'body' => '{"method": "web.update_ui", "params": [["none"], {}], "id": 1}', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'cookies' => $jar, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'headers'  => ['content-type' => 'application/json', 'Accept' => 'application/json'] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return $res; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public function login() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $config = $this->config; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $url = $config->url; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $password = $config->password; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $url = rtrim($url, '/'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $api_url = $url.'/json'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $jar = new \GuzzleHttp\Cookie\CookieJar(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $client = new Client(['http_errors' => false, 'timeout' => 15, 'connect_timeout' => 15]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $res = $client->request('POST', $api_url, [ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'body' => '{"method": "auth.login", "params": ["'.$password.'"], "id": 1}', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'cookies' => $jar, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'headers'  => ['content-type' => 'application/json', 'Accept' => 'application/json'] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return array($res,$jar); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    function formatBytes($bytes, $precision = 2) {  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $units = array('B', 'KB', 'MB', 'GB', 'TB');  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $bytes = max($bytes, 0);  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $pow = floor(($bytes ? log($bytes) : 0) / log(1024));  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $pow = min($pow, count($units) - 1);  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // Uncomment one of the following alternatives | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $bytes /= pow(1024, $pow); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // $bytes /= (1 << (10 * $pow));  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return round($bytes, $precision) . ' ' . $units[$pow] . 'ps';  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} |