Browse Source

added test connection to jackett (#1800)

CauseFX 4 years ago
parent
commit
e7a3c584ec
3 changed files with 69 additions and 7 deletions
  1. 46 6
      api/homepage/jackett.php
  2. 22 0
      api/v2/routes/connectionTester.php
  3. 1 1
      js/functions.js

+ 46 - 6
api/homepage/jackett.php

@@ -30,11 +30,15 @@ trait JackettHomepageItem
 				'Options' => [
 					$this->settingsOption('switch', 'homepageJackettBackholeDownload', ['label' => 'Prefer black hole download', 'help' => 'Prefer black hole download link instead of direct/magnet download']),
 				],
+				'Test Connection' => [
+					$this->settingsOption('blank', null, ['label' => 'Please Save before Testing']),
+					$this->settingsOption('test', 'jackett'),
+				]
 			]
 		];
 		return array_merge($homepageInformation, $homepageSettings);
 	}
-	
+
 	public function jackettHomepagePermissions($key = null)
 	{
 		$permissions = [
@@ -49,11 +53,20 @@ trait JackettHomepageItem
 					'jackettURL',
 					'jackettToken'
 				]
+			],
+			'test' => [
+				'auth' => [
+					'homepageJackettAuth'
+				],
+				'not_empty' => [
+					'jackettURL',
+					'jackettToken'
+				]
 			]
 		];
 		return $this->homepageCheckKeyPermissions($key, $permissions);
 	}
-	
+
 	public function homepageOrderJackett()
 	{
 		if ($this->homepageItemPermissions($this->jackettHomepagePermissions('main'))) {
@@ -69,7 +82,35 @@ trait JackettHomepageItem
 				';
 		}
 	}
-	
+
+	public function testConnectionJackett()
+	{
+		if (!$this->homepageItemPermissions($this->jackettHomepagePermissions('test'), true)) {
+			return false;
+		}
+		$apiURL = $this->qualifyURL($this->config['jackettURL']);
+		$endpoint = $apiURL . '/api/v2.0/indexers/all/results?apikey=' . $this->config['jackettToken'] . '&Query=this-is-just-a-test-for-organizr';
+		try {
+			$headers = [];
+			$options = $this->requestOptions($apiURL, 120, $this->config['jackettDisableCertCheck'], $this->config['jackettUseCustomCertificate']);
+			$response = Requests::get($endpoint, $headers, $options);
+			if ($response->success) {
+				$apiData = json_decode($response->body, true);
+				$api['content'] = $apiData;
+				unset($apiData);
+			} else {
+				$this->setResponse(403, 'Error connecting to Jackett');
+				return false;
+			}
+		} catch (Requests_Exception $e) {
+			$this->setResponse(500, $e->getMessage());
+			return false;
+		};
+		$api['content'] = $api['content'] ?? false;
+		$this->setResponse(200, null, $api);
+		return $api;
+	}
+
 	public function searchJackettIndexers($query = null)
 	{
 		if (!$this->homepageItemPermissions($this->jackettHomepagePermissions('main'), true)) {
@@ -91,15 +132,14 @@ trait JackettHomepageItem
 				unset($apiData);
 			}
 		} catch (Requests_Exception $e) {
-			$this->writeLog('error', 'Weather And Air Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
-			$this->setAPIResponse('error', $e->getMessage(), 500);
+			$this->setResponse(500, $e->getMessage());
 			return false;
 		};
 		$api['content'] = isset($api['content']) ? $api['content'] : false;
 		$this->setAPIResponse('success', null, 200, $api);
 		return $api;
 	}
-	
+
 	public function performJackettBackHoleDownload($url = null)
 	{
 		if (!$this->homepageItemPermissions($this->jackettHomepagePermissions('main'), true)) {

+ 22 - 0
api/v2/routes/connectionTester.php

@@ -644,4 +644,26 @@ $app->post('/test/database', function ($request, $response, $args) {
 	return $response
 		->withHeader('Content-Type', 'application/json;charset=UTF-8')
 		->withStatus($GLOBALS['responseCode']);
+});
+$app->post('/test/jackett', function ($request, $response, $args) {
+	/**
+	 * @OA\Post(
+	 *     security={{ "api_key":{} }},
+	 *     tags={"test connection"},
+	 *     path="/api/v2/test/jackett",
+	 *     summary="Test connection to Jackett",
+	 *     @OA\Response(response="200",description="Success",@OA\JsonContent(ref="#/components/schemas/success-message")),
+	 *     @OA\Response(response="401",description="Unauthorized",@OA\JsonContent(ref="#/components/schemas/unauthorized-message")),
+	 *     @OA\Response(response="422",description="Error",@OA\JsonContent(ref="#/components/schemas/error-message")),
+	 *     @OA\Response(response="500",description="Error",@OA\JsonContent(ref="#/components/schemas/error-message")),
+	 * )
+	 */
+	$Organizr = ($request->getAttribute('Organizr')) ?? new Organizr();
+	if ($Organizr->qualifyRequest(1, true)) {
+		$Organizr->testConnectionJackett();
+	}
+	$response->getBody()->write(jsonE($GLOBALS['api']));
+	return $response
+		->withHeader('Content-Type', 'application/json;charset=UTF-8')
+		->withStatus($GLOBALS['responseCode']);
 });

+ 1 - 1
js/functions.js

@@ -7959,7 +7959,7 @@ function homepageRequests(service, timeout){
 	delete timeout;
 }
 function testAPIConnection(service, data = ''){
-    messageSingle('',' Testing now...',activeInfo.settings.notifications.position,'#FFF','info','10000');
+    messageSingle('',' Testing now...',activeInfo.settings.notifications.position,'#FFF','info','60000');
     organizrAPI2('POST','api/v2/test/' + service,data).success(function(data) {
         try {
             let response = data.response;