]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/RSSCloud/LoggingAggregator.php
merge 0.9.x into 1.0.x
[quix0rs-gnu-social.git] / plugins / RSSCloud / LoggingAggregator.php
index 2573d9343e2124522fc33562c0424f9d4b334c6c..26fde9c3e2e90983835aa428ecbde70fd64b7fe6 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * This test class pretends to be an RSS aggregator. It logs notifications
  * from the cloud.
@@ -33,8 +32,23 @@ if (!defined('STATUSNET')) {
     exit(1);
 }
 
+/**
+ * Dummy aggregator that acts as a proper notification handler. It
+ * doesn't do anything but respond correctly when notified via
+ * REST.  Mostly, this is just and action I used to develop the plugin
+ * and easily test things end-to-end. I'm leaving it in here as it
+ * may be useful for developing the plugin further.
+ *
+ * @category Plugin
+ * @package  StatusNet
+ * @author   Zach Copley <zach@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://status.net/
+ **/
 class LoggingAggregatorAction extends Action
 {
+    var $challenge = null;
+    var $url       = null;
 
     /**
      * Initialization.
@@ -46,40 +60,74 @@ class LoggingAggregatorAction extends Action
     function prepare($args)
     {
         parent::prepare($args);
+
+        $this->url       = $this->arg('url');
+        $this->challenge = $this->arg('challenge');
+
+        common_debug("args = " . var_export($this->args, true));
+        common_debug('url = ' . $this->url . ' challenge = ' . $this->challenge);
+
         return true;
     }
 
+    /**
+     * Handle the request
+     *
+     * @param array $args $_REQUEST data (unused)
+     *
+     * @return void
+     */
     function handle($args)
     {
         parent::handle($args);
 
-        if ($_SERVER['REQUEST_METHOD'] != 'POST') {
-                       $this->showError('This resource requires an HTTP POST.');
+        if (empty($this->url)) {
+            $this->showError(_m('A URL parameter is required.'));
+            return;
         }
 
-        $this->url = $this->arg('url');
+        if (!empty($this->challenge)) {
 
-        if (empty($this->url)) {
-            $this->showError('Hey, you have to provide a url parameter.');
-        }
+            // must be a GET
+            if ($_SERVER['REQUEST_METHOD'] != 'GET') {
+                $this->showError(_m('This resource requires an HTTP GET.'));
+                return;
+            }
 
-        $this->ip  = $_SERVER['REMOTE_ADDR'];
+            header('Content-Type: text/xml');
+            echo $this->challenge;
 
-        common_log(LOG_INFO, 'RSSCloud Logging Aggregator - ' . $this->ip . ' claims the feed at ' .
-                   $this->url . ' has been updated.');
+        } else {
 
-        header('Content-Type: text/xml');
-        echo '<notifyResult success=\'true\' msg=\'Thanks for the update.\' />' . "\n";
+            // must be a POST
+            if ($_SERVER['REQUEST_METHOD'] != 'POST') {
+                $this->showError(_m('This resource requires an HTTP POST.'));
+                return;
+            }
 
-       }
+            header('Content-Type: text/xml');
+            Echo "<notifyResult success='true' msg='Thanks for the update.' />\n";
+        }
+
+        $this->ip = $_SERVER['REMOTE_ADDR'];
 
+        common_log(LOG_INFO, 'RSSCloud Logging Aggregator - ' .
+                   $this->ip . ' claims the feed at ' .
+                   $this->url . ' has been updated.');
+    }
+
+    /**
+     * Show an XML error when things go badly
+     *
+     * @param string $msg the error message
+     *
+     * @return void
+     */
     function showError($msg)
     {
-        header('HTTP/1.1 403 Forbidden');
+        header('HTTP/1.1 400 Bad Request');
         header('Content-Type: text/xml');
         echo "<?xml version='1.0'?>\n";
         echo "<notifyResult success='false' msg='$msg' />\n";
-        exit();
     }
-
-}
\ No newline at end of file
+}