From 11df93fcb5939441c05c6da4c8db7c5de5ce8e52 Mon Sep 17 00:00:00 2001 From: Hannes Mannerheim Date: Wed, 20 Jan 2016 20:56:50 +0100 Subject: [PATCH] oembed discovery closer to spec (not working yet) --- QvitterPlugin.php | 3 +-- actions/apiqvitteroembednotice.php | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/QvitterPlugin.php b/QvitterPlugin.php index e32bc81..e1355b2 100644 --- a/QvitterPlugin.php +++ b/QvitterPlugin.php @@ -153,9 +153,8 @@ class QvitterPlugin extends Plugin { // route/reroute urls public function onRouterInitialized($m) { - $m->connect('api/qvitter/oembed_notice/:id.:format', + $m->connect('services/oembed.:format', array('action' => 'apiqvitteroembednotice', - 'id' => '[0-9]+', 'format' => '(xml|json)')); $m->connect('api/qvitter/check_email.json', array('action' => 'ApiQvitterCheckEmail')); diff --git a/actions/apiqvitteroembednotice.php b/actions/apiqvitteroembednotice.php index 2166e58..bfe9455 100644 --- a/actions/apiqvitteroembednotice.php +++ b/actions/apiqvitteroembednotice.php @@ -43,9 +43,8 @@ if (!defined('GNUSOCIAL')) { exit(1); } class ApiQvitterOembedNoticeAction extends ApiAction { - - var $id = null; var $format = null; + var $url = null; /** * Take arguments for running @@ -58,8 +57,8 @@ class ApiQvitterOembedNoticeAction extends ApiAction { parent::prepare($args); - $this->id = $this->arg('id'); $this->format = $this->arg('format'); + $this->url = $this->arg('url'); return true; } @@ -75,7 +74,23 @@ class ApiQvitterOembedNoticeAction extends ApiAction { parent::handle(); - $notice = Notice::getKV('id',$this->id); + $noticeurl = common_path('notice/', StatusNet::isHTTPS()); + $instanceurl = common_path('', StatusNet::isHTTPS()); + + // remove protocol for the comparison below + $noticeurl_wo_protocol = preg_replace('(^https?://)', '', $noticeurl); + $instanceurl_wo_protocol = preg_replace('(^https?://)', '', $instanceurl); + $url_wo_protocol = preg_replace('(^https?://)', '', $this->url); + + // find local notice + if(strpos($url_wo_protocol, $noticeurl_wo_protocol) === 0) { + $possible_notice_id = str_replace($noticeurl_wo_protocol,'',$url_wo_protocol); + if(ctype_digit($possible_notice_id)) { + $notice = Notice::getKV('id',$possible_notice_id);; + } else { + $this->clientError("Notice not found.", 404); + } + } if(!$notice instanceof Notice){ // TRANS: Client error displayed in oEmbed action when notice not found.