]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Magic.php
Merge pull request #5329 from tobiasd/20180707-cs
[friendica.git] / src / Module / Magic.php
index 1b364a33194ea067d6254ab2257a61d080c412a4..ce41f228d32f8845c036eb87602b54e8e07f2383 100644 (file)
@@ -5,9 +5,8 @@
 namespace Friendica\Module;
 
 use Friendica\BaseModule;
-use Friendica\Database\DBM;
-use Friendica\Network\Probe;
-use Friendica\Util\HTTPSig;
+use Friendica\Model\Contact;
+use Friendica\Util\HTTPSignature;
 use Friendica\Util\Network;
 
 use dba;
@@ -35,32 +34,28 @@ class Magic extends BaseModule
                // NOTE: I guess $dest isn't just the profile url (could be also 
                // other profile pages e.g. photo). We need to find a solution
                // to be able to redirct to other pages than the contact profile.
-               $fields = ["id", "nurl", "url"];
-               $condition = ["nurl" => normalise_link($dest)];
+               $cid = Contact::getIdForURL($dest);
 
-               $contact = dba::selectFirst("contact", $fields, $condition);
-
-               if (!DBM::is_result($contact)) {
-                       // If we don't have a contact record, try to probe it.
-                       /// @todo: Also check against the $addr.
-                       Probe::uri($dest, '', -1, true, true);
-                       $contact = dba::selectFirst("contact", $fields, $condition);
+               if (!$cid && !empty($addr)) {
+                       $cid = Contact::getIdForURL($addr);
                }
 
-               if (!DBM::is_result($contact)) {
-                       logger("No contact record found: " . print_r($_REQUEST, true), LOGGER_DEBUG);
+               if (!$cid) {
+                       logger('No contact record found: ' . print_r($_REQUEST, true), LOGGER_DEBUG);
                        goaway($dest);
                }
 
+               $contact = dba::selectFirst('contact', ['id', 'nurl', 'url'], ['id' => $cid]);
+
                // Redirect if the contact is already authenticated on this site.
-               if (array_key_exists("id", $a->contact) && strpos($contact['nurl'], normalise_link(self::getApp()->get_baseurl())) !== false) {
+               if (array_key_exists('id', $a->contact) && strpos($contact['nurl'], normalise_link(self::getApp()->get_baseurl())) !== false) {
                        if($test) {
                                $ret['success'] = true;
                                $ret['message'] .= 'Local site - you are already authenticated.' . EOL;
                                return $ret;
                        }
 
-                       logger("Contact is already authenticated", LOGGER_DEBUG);
+                       logger('Contact is already authenticated', LOGGER_DEBUG);
                        goaway($dest);
                }
 
@@ -73,7 +68,7 @@ class Magic extends BaseModule
                                // NOTE: we need another solution because this does only work
                                // for friendica contacts :-/ . We should have the basepath
                                // of a contact also in the contact table.
-                               $exp = explode("/profile/", $contact['url']);
+                               $exp = explode('/profile/', $contact['url']);
                                $basepath = $exp[0];
 
                                $headers = [];
@@ -81,14 +76,14 @@ class Magic extends BaseModule
                                $headers['X-Open-Web-Auth'] = random_string();
 
                                // Create a header that is signed with the local users private key.
-                               $headers = HTTPSig::createSig(
-                                                       '',
-                                                       $headers,
-                                                       $user['prvkey'],
-                                                       'acct:' . $user['nickname'] . '@' . $a->get_hostname() . ($a->path ? '/' . $a->path : ''),
-                                                       false,
-                                                       true,
-                                                       'sha512'
+                               $headers = HTTPSignature::createSig(
+                                       '',
+                                       $headers,
+                                       $user['prvkey'],
+                                       'acct:' . $user['nickname'] . '@' . $a->get_hostname() . ($a->path ? '/' . $a->path : ''),
+                                       false,
+                                       true,
+                                       'sha512'
                                );
 
                                // Try to get an authentication token from the other instance.