From fa3b05f9aa8007d50dbb254a080b6c852c9df97f Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Sat, 15 Jun 2013 17:10:36 +0200 Subject: [PATCH] verify that target URL may receive pingbacks --- build.xml | 2 +- data/tables.sql | 15 +++++++++++---- src/stapibas/Pingback/DbStorage.php | 29 ++++++++++++++++++++++++++++- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/build.xml b/build.xml index 5af1b9c..5b7513c 100644 --- a/build.xml +++ b/build.xml @@ -2,6 +2,6 @@ - + diff --git a/data/tables.sql b/data/tables.sql index db96c65..c73e2f1 100644 --- a/data/tables.sql +++ b/data/tables.sql @@ -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'; + + diff --git a/src/stapibas/Pingback/DbStorage.php b/src/stapibas/Pingback/DbStorage.php index 61c374e..4fa45a6 100644 --- a/src/stapibas/Pingback/DbStorage.php +++ b/src/stapibas/Pingback/DbStorage.php @@ -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 ) { -- 2.30.2