Add composer.json so we can validate php extension requirements
[surrogator.git] / www / avatar.php
index 16a95829aeaf12fc2d143158c5e01cd4f3b8b3d0..e20ddda763d5146881527b0bf178c8c4daef5bcc 100644 (file)
@@ -10,7 +10,7 @@
  * @package  Surrogator
  * @author   Christian Weiske <cweiske@cweiske.de>
  * @license  http://www.gnu.org/licenses/agpl.html AGPLv3 or later
- * @link     http://git.cweiske.de/?p=surrogator.git
+ * @link     https://sourceforge.net/p/surrogator/
  */
 namespace surrogator;
 $cfgFile = __DIR__ . '/../data/surrogator.config.php';
@@ -19,8 +19,8 @@ if (!file_exists($cfgFile)) {
     if (!file_exists($cfgFile)) {
         err(
             500,
-            "Configuration file does not exist.\n"
-            "Copy data/surrogator.config.php.dist to data/surrogator.config.php"
+            "Configuration file does not exist.",
+            "Copy data/surrogator.config.php.dist to data/surrogator.config.php"
         );
         exit(2);
     }
@@ -35,11 +35,11 @@ require $cfgFile;
  *
  * @return void
  */
-function err($statusCode, $msg)
+function err($statusCode, $msg, $more = '')
 {
     header('HTTP/1.0 ' . $statusCode . ' ' . $msg);
     header('Content-Type: text/plain');
-    echo $msg . "\n";
+    echo $msg . "\n" . $more;
     exit(1);
 }
 
@@ -83,8 +83,11 @@ if (isset($_GET['default'])) {
         if ($_GET['default'] == '404') {
             $defaultMode = '404';
             $default     = '404';
+        } else if ($_GET['default'] == 'mm') {
+            //mystery man fallback image
+            $defaultMode = 'local';
+            $default     = 'mm.png';
         } else {
-            //FIXME: support mm
             //local default image
             $defaultMode = 'local';
             $default     = 'default.png';
@@ -93,7 +96,19 @@ if (isset($_GET['default'])) {
         //url
         $defaultMode = 'redirect';
         $default     = $_GET['default'];
-        //FIXME: validate?
+
+        $allowed = false;
+        foreach ($trustedDefaultUrls ?? [] as $urlPrefix) {
+            if (substr($default, 0, strlen($urlPrefix))  == $urlPrefix) {
+                $allowed = true;
+                break;
+            }
+        }
+        if (!$allowed) {
+            header('X-Info: default parameter URL not allowed');
+            $defaultMode = 'local';
+            $default     = 'default.png';
+        }
     }
 }
 
@@ -146,4 +161,4 @@ header('Content-Type: image/png');
 header('Content-Length:' . $stat['size']);
 
 readfile($imgFile);
-?>
\ No newline at end of file
+?>