]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Allow @localuser@mysite.example to be looked up as a mention
authorMikael Nordfeldth <mmn@hethane.se>
Fri, 29 Jan 2016 15:06:16 +0000 (16:06 +0100)
committerMikael Nordfeldth <mmn@hethane.se>
Fri, 29 Jan 2016 15:06:16 +0000 (16:06 +0100)
plugins/OStatus/OStatusPlugin.php
plugins/OStatus/classes/Ostatus_profile.php
plugins/OStatus/lib/ostatusshadowexception.php [new file with mode: 0644]

index 06aaa54ce6a1764378a591ebeb80b84c31064364..6f6a22bf4dd9ae17c0c52bbcc637bbaae9bd95d3 100644 (file)
@@ -293,26 +293,36 @@ class OStatusPlugin extends Plugin
             foreach ($wmatches[1] as $wmatch) {
                 list($target, $pos) = $wmatch;
                 $this->log(LOG_INFO, "Checking webfinger '$target'");
+                $profile = null;
                 try {
                     $oprofile = Ostatus_profile::ensureWebfinger($target);
-                    if ($oprofile instanceof Ostatus_profile && !$oprofile->isGroup()) {
-                        $profile = $oprofile->localProfile();
-                        $text = !empty($profile->nickname) && mb_strlen($profile->nickname) < mb_strlen($target) ?
-                                $profile->nickname : $target;
-                        $url = $profile->getUri();
-                        if (!common_valid_http_url($url)) {
-                            $url = $profile->getUrl();
-                        }
-                        $matches[$pos] = array('mentioned' => array($profile),
-                                               'type' => 'mention',
-                                               'text' => $text,
-                                               'position' => $pos,
-                                               'length' => mb_strlen($target),
-                                               'url' => $url);
+                    if (!$oprofile instanceof Ostatus_profile || !$oprofile->isPerson()) {
+                        continue;
                     }
+                    $profile = $oprofile->localProfile();
+                } catch (OStatusShadowException $e) {
+                    // This means we got a local user in the webfinger lookup
+                    $profile = $e->profile;
                 } catch (Exception $e) {
                     $this->log(LOG_ERR, "Webfinger check failed: " . $e->getMessage());
+                    continue;
+                }
+
+                assert($profile instanceof Profile);
+
+                $text = !empty($profile->nickname) && mb_strlen($profile->nickname) < mb_strlen($target)
+                        ? $profile->getNickname()   // TODO: we could do getFancyName() or getFullname() here
+                        : $target;
+                $url = $profile->getUri();
+                if (!common_valid_http_url($url)) {
+                    $url = $profile->getUrl();
                 }
+                $matches[$pos] = array('mentioned' => array($profile),
+                                       'type' => 'mention',
+                                       'text' => $text,
+                                       'position' => $pos,
+                                       'length' => mb_strlen($target),
+                                       'url' => $url);
             }
         }
 
index d08f91330920bf3dd657709faa26ef67174de8ae..6b62c6f47f6b1e450e793e00257c568c31b08ee4 100644 (file)
@@ -1859,23 +1859,3 @@ class Ostatus_profile extends Managed_DataObject
         $this->subscribe();
     }
 }
-
-/**
- * Exception indicating we've got a remote reference to a local user,
- * not a remote user!
- *
- * If we can ue a local profile after all, it's available as $e->profile.
- */
-class OStatusShadowException extends Exception
-{
-    public $profile;
-
-    /**
-     * @param Profile $profile
-     * @param string $message
-     */
-    function __construct($profile, $message) {
-        $this->profile = $profile;
-        parent::__construct($message);
-    }
-}
diff --git a/plugins/OStatus/lib/ostatusshadowexception.php b/plugins/OStatus/lib/ostatusshadowexception.php
new file mode 100644 (file)
index 0000000..1748f2e
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+
+if (!defined('GNUSOCIAL')) { exit(1); }
+
+/**
+ * @package OStatusPlugin
+ * @maintainer Mikael Nordfeldth <mmn@hethane.se>
+ */
+
+/**
+ * Exception indicating we've got a remote reference to a local user,
+ * not a remote user!
+ *
+ * If we can ue a local profile after all, it's available as $e->profile.
+ */
+class OStatusShadowException extends Exception
+{
+    public $profile;
+
+    /**
+     * @param Profile $profile
+     * @param string $message
+     */
+    function __construct(Profile $profile, $message) {
+        $this->profile = $profile;
+        parent::__construct($message);
+    }
+}