1
0
Prechádzať zdrojové kódy

Convert links in function

Sunny 2 rokov pred
rodič
commit
ee6d15734e
4 zmenil súbory, kde vykonal 47 pridanie a 24 odobranie
  1. 3 1
      pages/artist.php
  2. 16 11
      pages/index.php
  3. 3 12
      pages/search.php
  4. 25 0
      utilities/link.php

+ 3 - 1
pages/artist.php

@@ -7,6 +7,7 @@
 ?>
 
 <?php include "../elements/header.php" ?>
+<?php include "../utilities/link.php" ?>
 
 <?php
   echo "<div class=\"results\">";
@@ -18,12 +19,13 @@
 
     $image = $release->find("img");
     $image = $image->hasAttr("data-original") ? $image->attr("data-original") : $image->attr("src");
-    $image = "image.php?file=" . basename($image);
+    $image = convert_link($image);
 
     $link = $release->find("a")->attr("href");
     if (!filter_var($link, FILTER_VALIDATE_URL)) {
       $link = "https://" . urlencode($_GET["name"]) . ".bandcamp.com" . $link;
     };
+    $link = convert_link($link);
 
     echo "<a href=\"" . $link . "\">";
     echo "<div>";

+ 16 - 11
pages/index.php

@@ -1,12 +1,5 @@
 <?php include "../elements/header.php" ?>
-
-<?php
-  $scheme = $_SERVER["REQUEST_SCHEME"];
-  $host = $_SERVER["HTTP_HOST"];
-  $uri = $_SERVER["REQUEST_URI"];
-
-  $url = $scheme . "://" . $host . str_replace("/index.php", "/", $uri);
-?>
+<?php include "../utilities/link.php" ?>
 
 <h1><?= $config["title"] ?></h1>
 <p>
@@ -37,9 +30,21 @@
 <h2>How do I set up Redirector?</h2>
 <p>To set up a redirection extension, create the following rules:</p>
 <ul>
-  <li><code>https://bandcamp.com/search?q=$1</code> → <code><?= $url ?>search.php?query=$1</code></li>
-  <li><code>https://$1.bandcamp.com/</code> → <code><?= $url ?>artist.php?name=$1</code></li>
-  <li><code>https://f4.bcbits.com/img/$1</code> → <code><?= $url ?>image.php?file=$1</code></li>
+  <?php
+    $rules = [
+      "https://bandcamp.com/search?q=$1",
+      "https://$1.bandcamp.com/",
+      "https://f4.bcbits.com/img/$1"
+    ];
+
+    foreach ($rules as $rule) {
+      echo "<li>";
+      echo "<code>" . $rule . "</code>";
+      echo " → ";
+      echo "<code>" . convert_link($rule) . "</code>";
+      echo "</li>";
+    };
+  ?>
 </ul>
 
 <?php include "../elements/footer.php" ?>

+ 3 - 12
pages/search.php

@@ -3,6 +3,7 @@
 ?>
 
 <?php include "../elements/header.php" ?>
+<?php include "../utilities/link.php" ?>
 
 <?php
   $ch = curl_init("https://bandcamp.com/api/bcsearch_public_api/1/autocomplete_elastic");
@@ -21,21 +22,11 @@
 
   foreach ($results as $result) {
     $link = $result->item_url_path ?? $result->item_url_root;
-
-    switch ($result->type) {
-      case "b":
-        $domain = explode(".", parse_url($result->item_url_root, PHP_URL_HOST));
-        if (end($domain) === "com" && prev($domain) === "bandcamp")
-          /* TODO: Some artists and labels use custom domains for their pages.
-                   Blindly sending requests to them could be a security risk.
-                   Is there a good way to support these? */
-          $link = "artist.php?name=" . prev($domain);
-        break;
-    };
+    $link = convert_link($link);
 
     echo "<a href=\"" . $link . "\">";
     echo "<div>";
-    echo "<img src=\"image.php?file=" . basename($result->img) . "\">";
+    echo "<img src=\"" . convert_link($result->img) . "\">";
     echo "<p>";
     echo htmlspecialchars($result->name);
 

+ 25 - 0
utilities/link.php

@@ -0,0 +1,25 @@
+<?php
+
+function convert_link($link) {
+  $scheme = $_SERVER["REQUEST_SCHEME"];
+  $host = $_SERVER["HTTP_HOST"];
+  $uri = strtok($_SERVER["REQUEST_URI"], "?");
+
+  $base = $scheme . "://" . $host . preg_replace("/\/.*.php/", "/", $uri);
+
+  $host = parse_url($link, PHP_URL_HOST);
+  $path = parse_url($link, PHP_URL_PATH);
+  parse_str(parse_url($link, PHP_URL_QUERY), $query);
+
+  if ($host === "bandcamp.com" && $path === "/search") {
+    return $base . "search.php?query=" . $query["q"];
+  } elseif (str_ends_with($host, ".bandcamp.com") && !$path) {
+    return $base . "artist.php?name=" . explode(".", $host)[0];
+  } elseif ($host === "f4.bcbits.com") {
+    return $base . "image.php?file=" . basename($link);
+  } else {
+    return $link;
+  };
+};
+
+?>