verify that target URL may receive pingbacks
authorChristian Weiske <cweiske@cweiske.de>
Sat, 15 Jun 2013 15:10:36 +0000 (17:10 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Sat, 15 Jun 2013 15:10:36 +0000 (17:10 +0200)
build.xml
data/tables.sql
src/stapibas/Pingback/DbStorage.php

index 5af1b9c1cdf0f2cdcaafdcd5cda4635c9cf84c66..5b7513cc65cf33326bd1dce86d0f47ff4a4b1b66 100644 (file)
--- a/build.xml
+++ b/build.xml
@@ -2,6 +2,6 @@
 <project name="stapibas" default="dist">
 
  <target name="dump-db" description="Update data/tables.sql">
-  <exec command="mysqldump --no-data --skip-set-charset -ustapibas -pstapibas stapibas|grep -v '/*!40' |grep -v '^--' |sed 's/AUTO_INCREMENT=[0-9]*//' > data/tables.sql" />
+  <exec command="mysqldump --no-data --skip-add-drop-table --skip-set-charset -ustapibas -pstapibas stapibas|grep -v '/*!40' |grep -v '^--' |sed 's/AUTO_INCREMENT=[0-9]*//' > data/tables.sql" />
  </target>
 </project>
index db96c659e74182a7179343e165839f272d86ce31..c73e2f1c3981ff3d42ac03d4b1f11d5c31447357 100644 (file)
@@ -1,6 +1,5 @@
 
 
-DROP TABLE IF EXISTS `feedentries`;
 CREATE TABLE `feedentries` (
   `fe_id` int(11) NOT NULL AUTO_INCREMENT,
   `fe_f_id` int(11) NOT NULL,
@@ -12,7 +11,6 @@ CREATE TABLE `feedentries` (
 ) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
 
 
-DROP TABLE IF EXISTS `feedentryurls`;
 CREATE TABLE `feedentryurls` (
   `feu_id` int(11) NOT NULL AUTO_INCREMENT,
   `feu_fe_id` int(11) NOT NULL,
@@ -30,7 +28,6 @@ CREATE TABLE `feedentryurls` (
 ) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
 
 
-DROP TABLE IF EXISTS `feeds`;
 CREATE TABLE `feeds` (
   `f_id` int(11) NOT NULL AUTO_INCREMENT,
   `f_url` varchar(2048) CHARACTER SET utf8 NOT NULL,
@@ -41,7 +38,6 @@ CREATE TABLE `feeds` (
 ) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
 
 
-DROP TABLE IF EXISTS `pingbacks`;
 CREATE TABLE `pingbacks` (
   `p_id` int(11) NOT NULL AUTO_INCREMENT,
   `p_source` varchar(1024) CHARACTER SET latin1 NOT NULL,
@@ -50,8 +46,19 @@ CREATE TABLE `pingbacks` (
   `p_client_ip` varchar(40) CHARACTER SET latin1 NOT NULL,
   `p_client_agent` varchar(128) CHARACTER SET latin1 NOT NULL,
   `p_client_referer` varchar(1024) CHARACTER SET latin1 NOT NULL,
+  `p_needs_review` tinyint(1) NOT NULL,
+  `p_use` tinyint(1) NOT NULL,
+  `p_needs_update` tinyint(1) NOT NULL,
   PRIMARY KEY (`p_id`),
   UNIQUE KEY `p_id` (`p_id`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
 
 
+CREATE TABLE `pingbacktargets` (
+  `pt_id` int(11) NOT NULL AUTO_INCREMENT,
+  `pt_url` varchar(2048) NOT NULL,
+  PRIMARY KEY (`pt_id`),
+  UNIQUE KEY `pt_id` (`pt_id`)
+) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='List of pages that may receive pingbacks';
+
+
index 61c374ec5c217d2fa7618901f9ab4fb2a97f538e..4fa45a6ef66bf303daf701eb89fbe418b05810b8 100644 (file)
@@ -3,13 +3,40 @@ namespace stapibas;
 
 class Pingback_DbStorage
     implements \PEAR2\Services\Pingback\Server\Callback\IStorage,
-    \PEAR2\Services\Pingback\Server\Callback\ILink
+    \PEAR2\Services\Pingback\Server\Callback\ILink,
+    \PEAR2\Services\Pingback\Server\Callback\ITarget
 {
     public function __construct(PDO $db)
     {
         $this->db = $db;
     }
 
+    /**
+     * Verifies that the given target URI exists in our system.
+     *
+     * @param string $target Target URI that got linked to
+     *
+     * @return boolean True if the target URI exists, false if not
+     *
+     * @throws Exception When something fatally fails
+     */
+    public function verifyTargetExists($target)
+    {
+        $res = $this->db->query(
+            'SELECT COUNT(*) as count FROM pingbacktargets'
+            . ' WHERE ' . $this->db->quote($target) . ' LIKE pt_url'
+        );
+        $answer = $res->fetch(\PDO::FETCH_OBJ);
+        if ($answer->count == 0) {
+            throw new \Exception(
+                'The specified target URI cannot be used as a target.',
+                33
+            );
+        }
+
+        return true;
+    }
+
     public function storePingback(
         $target, $source, $sourceBody, \HTTP_Request2_Response $res
     ) {