Explorar o código

Merge pull request #1060 from Alkarex/pshb-unsubscribe

PubSubHubbub unsubscribe request
Alexandre Alapetite %!s(int64=10) %!d(string=hai) anos
pai
achega
765319190f
Modificáronse 2 ficheiros con 13 adicións e 5 borrados
  1. 4 5
      app/Models/Feed.php
  2. 9 0
      p/api/pshb.php

+ 4 - 5
app/Models/Feed.php

@@ -451,6 +451,10 @@ class FreshRSS_Feed extends Minz_Model {
 				Minz_Log::warning('Invalid callback for PubSubHubbub: ' . $this->url);
 				return false;
 			}
+			if (!$state) {	//unsubscribe
+				$hubJson['lease_end'] = time() - 60;
+				file_put_contents($hubFilename, json_encode($hubJson));
+			}
 			$ch = curl_init();
 			curl_setopt_array($ch, array(
 				CURLOPT_URL => $this->hubUrl,
@@ -470,11 +474,6 @@ class FreshRSS_Feed extends Minz_Model {
 				'PubSubHubbub ' . ($state ? 'subscribe' : 'unsubscribe') . ' to ' . $this->selfUrl .
 				' with callback ' . $callbackUrl . ': ' . $info['http_code'] . ' ' . $response . "\n", FILE_APPEND);
 
-			if (!$state) {	//unsubscribe
-				$hubJson['lease_end'] = time() - 60;
-				file_put_contents($hubFilename, json_encode($hubJson));
-			}
-
 			if (substr($info['http_code'], 0, 1) == '2') {
 				return true;
 			} else {

+ 9 - 0
p/api/pshb.php

@@ -68,6 +68,15 @@ if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] === 'subscribe') {
 	exit(isset($_REQUEST['hub_challenge']) ? $_REQUEST['hub_challenge'] : '');
 }
 
+if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] === 'unsubscribe') {
+	if (empty($hubJson['lease_end']) || $hubJson['lease_end'] < time()) {
+		exit(isset($_REQUEST['hub_challenge']) ? $_REQUEST['hub_challenge'] : '');
+	} else {
+		header('HTTP/1.1 422 Unprocessable Entity');
+		die('We did not ask to unsubscribe!');
+	}
+}
+
 if ($ORIGINAL_INPUT == '') {
 	header('HTTP/1.1 422 Unprocessable Entity');
 	die('Missing XML payload!');