diff --git a/plugins/Linkback/LinkbackPlugin.php b/plugins/Linkback/LinkbackPlugin.php index e3519dac9e..2aeb8ea016 100644 --- a/plugins/Linkback/LinkbackPlugin.php +++ b/plugins/Linkback/LinkbackPlugin.php @@ -32,6 +32,7 @@ if (!defined('STATUSNET')) { } require_once('Auth/Yadis/Yadis.php'); +require_once(__DIR__ . '/lib/util.php'); define('LINKBACKPLUGIN_VERSION', '0.1'); @@ -306,6 +307,12 @@ class LinkbackPlugin extends Plugin } } + + public function onRouterInitialized(URLMapper $m) + { + $m->connect('main/linkback/webmention', array('action' => 'webmention')); + } + public function version() { return LINKBACKPLUGIN_VERSION; diff --git a/plugins/Linkback/actions/webmention.php b/plugins/Linkback/actions/webmention.php new file mode 100644 index 0000000000..30bc42cea9 --- /dev/null +++ b/plugins/Linkback/actions/webmention.php @@ -0,0 +1,73 @@ +. + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class WebmentionAction extends Action +{ + protected function handle() + { + GNUsocial::setApi(true); // Minimize error messages to aid in debugging + parent::handle(); + if ($this->isPost()) { + return $this->handlePost(); + } + + return false; + } + + function handlePost() + { + $source = $this->arg('source'); + $target = $this->arg('target'); + + header('Content-Type: text/plain; charset=utf-8'); + + if(!$source) { + echo _m('"source" is missing')."\n"; + throw new ServerException(_m('"source" is missing'), 400); + } + + if(!$target) { + echo _m('"target" is missing')."\n"; + throw new ServerException(_m('"target" is missing'), 400); + } + + $response = linkback_get_source($source, $target); + if(!$response) { + echo _m('Source does not link to target.')."\n"; + throw new ServerException(_m('Source does not link to target.'), 400); + } + + $notice = linkback_get_target($target); + if(!$notice) { + echo _m('Target not found')."\n"; + throw new ServerException(_m('Target not found'), 404); + } + + $url = linkback_save($source, $target, $response, $notice); + if(!$url) { + echo _m('An error occured while saving.')."\n"; + throw new ServerException(_m('An error occured while saving.'), 500); + } + + echo $url."\n"; + + return true; + } +}