]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Make oEmbed handle our http/https setting better.
authorMikael Nordfeldth <mmn@hethane.se>
Thu, 10 Mar 2016 13:20:21 +0000 (14:20 +0100)
committerMikael Nordfeldth <mmn@hethane.se>
Thu, 10 Mar 2016 13:20:21 +0000 (14:20 +0100)
lib/util.php
plugins/Oembed/actions/oembed.php

index e65097c32b915d8a253ee72b93c6924f5f89fd1d..bc4898f847db955a3dc1f65e7c77bcb621bcb3e9 100644 (file)
@@ -1689,10 +1689,15 @@ function common_profile_url($nickname)
 
 /**
  * Should make up a reasonable root URL
+ *
+ * @param   bool    $tls    true or false to force TLS scheme, null to use server configuration
  */
-function common_root_url($ssl=false)
+function common_root_url($tls=null)
 {
-    $url = common_path('', $ssl, false);
+    if (is_null($tls)) {
+        $tls = GNUsocial::useHTTPS();
+    }
+    $url = common_path('', $tls, false);
     $i = strpos($url, '?');
     if ($i !== false) {
         $url = substr($url, 0, $i);
index af181ad58686bad5ceb1170a2b8786e914c31585..c374b8b34f72c9cea758726e5108660ab3fe0391 100644 (file)
@@ -44,21 +44,20 @@ class OembedAction extends Action
         parent::handle();
 
         $url = $this->trimmed('url');
-        if (substr(strtolower($url),0,strlen(common_root_url())) !== strtolower(common_root_url())) {
+        $tls = parse_url($url, PHP_URL_SCHEME) == 'https';
+        $root_url = common_root_url($tls);
+
+        if (substr(strtolower($url),0,mb_strlen($root_url)) !== strtolower($root_url)) {
             // TRANS: Error message displaying attachments. %s is the site's base URL.
-            $this->clientError(sprintf(_('oEmbed data will only be provided for %s URLs.'), common_root_url()), 400);
+            throw new ClientException(sprintf(_('oEmbed data will only be provided for %s URLs.'), $root_url));
         }
 
-        $path = substr($url,strlen(common_root_url()));
+        $path = substr($url,strlen($root_url));
 
         $r = Router::get();
 
+        // $r->map will throw ClientException 404 if it fails to find a mapping
         $proxy_args = $r->map($path);
-        if (!$proxy_args) {
-            // TRANS: Client error displayed in oEmbed action when path not found.
-            // TRANS: %s is a path.
-            $this->clientError(sprintf(_('"%s" not found.'),$path), 404);
-        }
 
         $oembed=array();
         $oembed['version']='1.0';
@@ -68,18 +67,12 @@ class OembedAction extends Action
         switch ($proxy_args['action']) {
         case 'shownotice':
             $oembed['type']='link';
-            $id = $proxy_args['notice'];
-            $notice = Notice::getKV($id);
-            if(empty($notice)){
-                // TRANS: Client error displayed in oEmbed action when notice not found.
-                // TRANS: %s is a notice.
-                $this->clientError(sprintf(_("Notice %s not found."),$id), 404);
+            try {
+                $notice = Notice::getByID($proxy_args['notice']);
+            } catch (NoResultException $e) {
+                throw new ClientException($e->getMessage(), 404);
             }
             $profile = $notice->getProfile();
-            if (empty($profile)) {
-                // TRANS: Server error displayed in oEmbed action when notice has not profile.
-                $this->serverError(_('Notice has no profile.'), 500);
-            }
             $authorname = $profile->getFancyName();
             // TRANS: oEmbed title. %1$s is the author name, %2$s is the creation date.
             $oembed['title'] = sprintf(_('%1$s\'s status on %2$s'),
@@ -256,4 +249,4 @@ class OembedAction extends Action
     {
         return true;
     }
-}
\ No newline at end of file
+}