瀏覽代碼

Always ask for auth when anonymous read and write is disabled

bohwaz 2 年之前
父節點
當前提交
cff0f429b9
共有 2 個文件被更改,包括 46 次插入14 次删除
  1. 24 8
      index.php
  2. 22 6
      server.php

+ 24 - 8
index.php

@@ -1784,14 +1784,30 @@ namespace PicoDAV
 			return $out;
 		}
 
-		function error(WebDAV_Exception $e)
+		public function route(?string $uri = null): bool
 		{
-			if ($e->getCode() == 403 && !$this->storage->auth() && count($this->storage->users)) {
-				$user = $_SERVER['PHP_AUTH_USER'] ?? null;
+			if (!ANONYMOUS_WRITE && !ANONYMOUS_READ) {
+				$this->requireAuth();
+				return true;
+			}
+
+			return parent::route($uri);
+		}
+
+		protected function requireAuth(): void
+		{
+			if ($this->storage->auth()) {
+				return;
+			}
 
-				http_response_code(401);
-				header('WWW-Authenticate: Basic realm="Please login"');
-				echo '<h2>Error 401</h2><h1>You need to login to access this.</h1>';
+			http_response_code(401);
+			header('WWW-Authenticate: Basic realm="Please login"');
+			echo '<h2>Error 401</h2><h1>You need to login to access this.</h1>';
+		}
+
+		public function error(WebDAV_Exception $e)
+		{
+			if ($e->getCode() == 403 && !$this->storage->auth() && count($this->storage->users)) {
 				return;
 			}
 
@@ -1851,11 +1867,11 @@ RewriteRule ^.*$ /index.php [END]
 		$fp = fopen(__FILE__, 'r');
 
 		if ($relative_uri == '.webdav/webdav.js') {
-			fseek($fp, 49803, SEEK_SET);
+			fseek($fp, 50046, SEEK_SET);
 			echo fread($fp, 27769);
 		}
 		else {
-			fseek($fp, 49803 + 27769, SEEK_SET);
+			fseek($fp, 50046 + 27769, SEEK_SET);
 			echo fread($fp, 6988);
 		}
 

+ 22 - 6
server.php

@@ -508,14 +508,30 @@ namespace PicoDAV
 			return $out;
 		}
 
-		function error(WebDAV_Exception $e)
+		public function route(?string $uri = null): bool
 		{
-			if ($e->getCode() == 403 && !$this->storage->auth() && count($this->storage->users)) {
-				$user = $_SERVER['PHP_AUTH_USER'] ?? null;
+			if (!ANONYMOUS_WRITE && !ANONYMOUS_READ) {
+				$this->requireAuth();
+				return true;
+			}
 
-				http_response_code(401);
-				header('WWW-Authenticate: Basic realm="Please login"');
-				echo '<h2>Error 401</h2><h1>You need to login to access this.</h1>';
+			return parent::route($uri);
+		}
+
+		protected function requireAuth(): void
+		{
+			if ($this->storage->auth()) {
+				return;
+			}
+
+			http_response_code(401);
+			header('WWW-Authenticate: Basic realm="Please login"');
+			echo '<h2>Error 401</h2><h1>You need to login to access this.</h1>';
+		}
+
+		public function error(WebDAV_Exception $e)
+		{
+			if ($e->getCode() == 403 && !$this->storage->auth() && count($this->storage->users)) {
 				return;
 			}