From 388655d19b29524f7f501b092e56ece6bd05d19c Mon Sep 17 00:00:00 2001
From: Mikael Nordfeldth <mmn@hethane.se>
Date: Sun, 16 Apr 2017 11:01:16 +0200
Subject: [PATCH] Handle normalized acct: URIs in ostatussub

Mastodon sent the proper acct: URI and not just 'user@domain' when
using the remote subscribe functionality.
---
 plugins/OStatus/actions/ostatussub.php      | 4 ++--
 plugins/OStatus/classes/Ostatus_profile.php | 6 ++++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/plugins/OStatus/actions/ostatussub.php b/plugins/OStatus/actions/ostatussub.php
index 75c75c54c6..a8039ae565 100644
--- a/plugins/OStatus/actions/ostatussub.php
+++ b/plugins/OStatus/actions/ostatussub.php
@@ -242,9 +242,9 @@ class OStatusSubAction extends Action
     function pullRemoteProfile()
     {
         $validate = new Validate();
-        $this->profile_uri = $this->trimmed('profile');
+        $this->profile_uri = Discovery::normalize($this->trimmed('profile'));
         try {
-            if ($validate->email($this->profile_uri)) {
+            if (Discovery::isAcct($this->profile_uri) && $validate->email(mb_substr($this->profile_uri, 5))) {
                 $this->oprofile = Ostatus_profile::ensureWebfinger($this->profile_uri);
             } else if ($validate->uri($this->profile_uri)) {
                 $this->oprofile = Ostatus_profile::ensureProfileURL($this->profile_uri);
diff --git a/plugins/OStatus/classes/Ostatus_profile.php b/plugins/OStatus/classes/Ostatus_profile.php
index 8c7be80a60..5de311107c 100644
--- a/plugins/OStatus/classes/Ostatus_profile.php
+++ b/plugins/OStatus/classes/Ostatus_profile.php
@@ -1561,8 +1561,10 @@ class Ostatus_profile extends Managed_DataObject
      */
     public static function ensureWebfinger($addr)
     {
-        // First, try the cache
+        // Normalize $addr, i.e. add 'acct:' if missing
+        $addr = Discovery::normalize($addr);
 
+        // Try the cache
         $uri = self::cacheGet(sprintf('ostatus_profile:webfinger:%s', $addr));
 
         if ($uri !== false) {
@@ -1578,7 +1580,7 @@ class Ostatus_profile extends Managed_DataObject
         }
 
         // Try looking it up
-        $oprofile = Ostatus_profile::getKV('uri', Discovery::normalize($addr));
+        $oprofile = Ostatus_profile::getKV('uri', $addr);
 
         if ($oprofile instanceof Ostatus_profile) {
             self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->getUri());
-- 
2.39.5