]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/Salmon.php
Merge pull request #8261 from MrPetovan/task/8251-use-about-for-pdesc
[friendica.git] / src / Protocol / Salmon.php
index 29abd77d06f607890fe040276d1cc896c14cfbf1..0d234b53f0151340494bfede168276e4382dcbd9 100644 (file)
@@ -1,17 +1,36 @@
 <?php
 /**
- * @file src/Protocol/Salmon.php
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
  */
+
 namespace Friendica\Protocol;
 
 use Friendica\Core\Logger;
 use Friendica\Network\Probe;
 use Friendica\Util\Crypto;
 use Friendica\Util\Network;
+use Friendica\Util\Strings;
 use Friendica\Util\XML;
 
 /**
- * @brief Salmon Protocol class
+ * Salmon Protocol class
+ *
  * The Salmon Protocol is a message exchange protocol running over HTTP designed to decentralize commentary
  * and annotations made against newsfeed articles such as blog posts.
  */
@@ -21,6 +40,7 @@ class Salmon
         * @param string $uri     Uniform Resource Identifier
         * @param string $keyhash encoded key
         * @return mixed
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public static function getKey($uri, $keyhash)
        {
@@ -51,7 +71,7 @@ class Salmon
                                        } else {
                                                $ret[$x] = substr($ret[$x], 5);
                                        }
-                               } elseif (normalise_link($ret[$x]) == 'http://') {
+                               } elseif (Strings::normaliseLink($ret[$x]) == 'http://') {
                                        $ret[$x] = Network::fetchUrl($ret[$x]);
                                }
                        }
@@ -70,7 +90,7 @@ class Salmon
                        return $ret[0];
                } else {
                        foreach ($ret as $a) {
-                               $hash = base64url_encode(hash('sha256', $a));
+                               $hash = Strings::base64UrlEncode(hash('sha256', $a));
                                if ($hash == $keyhash) {
                                        return $a;
                                }
@@ -85,6 +105,7 @@ class Salmon
         * @param string $url   url
         * @param string $slap  slap
         * @return integer
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public static function slapper($owner, $url, $slap)
        {
@@ -104,22 +125,22 @@ class Salmon
 
                // create a magic envelope
 
-               $data      = base64url_encode($slap);
+               $data      = Strings::base64UrlEncode($slap);
                $data_type = 'application/atom+xml';
                $encoding  = 'base64url';
                $algorithm = 'RSA-SHA256';
-               $keyhash   = base64url_encode(hash('sha256', self::salmonKey($owner['spubkey'])), true);
+               $keyhash   = Strings::base64UrlEncode(hash('sha256', self::salmonKey($owner['spubkey'])), true);
 
-               $precomputed = '.' . base64url_encode($data_type) . '.' . base64url_encode($encoding) . '.' . base64url_encode($algorithm);
+               $precomputed = '.' . Strings::base64UrlEncode($data_type) . '.' . Strings::base64UrlEncode($encoding) . '.' . Strings::base64UrlEncode($algorithm);
 
                // GNU Social format
-               $signature   = base64url_encode(Crypto::rsaSign($data . $precomputed, $owner['sprvkey']));
+               $signature   = Strings::base64UrlEncode(Crypto::rsaSign($data . $precomputed, $owner['sprvkey']));
 
                // Compliant format
-               $signature2  = base64url_encode(Crypto::rsaSign(str_replace('=', '', $data . $precomputed), $owner['sprvkey']));
+               $signature2  = Strings::base64UrlEncode(Crypto::rsaSign(str_replace('=', '', $data . $precomputed), $owner['sprvkey']));
 
                // Old Status.net format
-               $signature3  = base64url_encode(Crypto::rsaSign($data, $owner['sprvkey']));
+               $signature3  = Strings::base64UrlEncode(Crypto::rsaSign($data, $owner['sprvkey']));
 
                // At first try the non compliant method that works for GNU Social
                $xmldata = ["me:env" => ["me:data" => $data,
@@ -204,10 +225,11 @@ class Salmon
        /**
         * @param string $pubkey public key
         * @return string
+        * @throws \Exception
         */
        public static function salmonKey($pubkey)
        {
                Crypto::pemToMe($pubkey, $m, $e);
-               return 'RSA' . '.' . base64url_encode($m, true) . '.' . base64url_encode($e, true);
+               return 'RSA' . '.' . Strings::base64UrlEncode($m, true) . '.' . Strings::base64UrlEncode($e, true);
        }
 }