Browse Source

Implement quota hard cap (refusal if over)

- Added quota logging for debugging/monitoring
- Hard-coded for now to 25000 KB, should be configurable in settings.php in the future.
wolfbeast 8 years ago
parent
commit
1d840ef750
1 changed files with 30 additions and 2 deletions
  1. 30 2
      weave_utils.php

+ 30 - 2
weave_utils.php

@@ -20,6 +20,7 @@
 #
 # Contributor(s):
 #   Daniel Triendl <daniel@pew.cc>
+#   Mark Straver <moonchild@palemoon.org>
 #
 # Alternatively, the contents of this file may be used under the terms of
 # either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -49,9 +50,23 @@
 	define ('WEAVE_ERROR_FUNCTION_NOT_SUPPORTED', 11);
 	define ('WEAVE_ERROR_NO_EMAIL', 12);
 	define ('WEAVE_ERROR_INVALID_COLLECTION', 13);
+	define ('WEAVE_ERROR_OVER_QUOTA', 14);
 
 
     define ('LOG_THE_ERROR', 0);
+    define ('LOG_QUOTAS', 1);
+
+    function log_quota($msg) 
+    {   
+        if ( LOG_QUOTAS == 1 ) 
+        {
+            $datei = fopen("/tmp/FSyncMS-quota.log","a");
+            $fmsg = sprintf("$msg\n");
+            fputs($datei,$fmsg);
+            // fputs($datei,"Server ".print_r( $_SERVER, true));
+            fclose($datei);
+        }
+    }
 
     function log_error($msg) 
     {   
@@ -60,7 +75,7 @@
             $datei = fopen("/tmp/FSyncMS-error.txt","a");
             $fmsg = sprintf("$msg\n");
             fputs($datei,$fmsg);
-            fputs($datei,"Server ".print_r( $_SERVER, true));
+            // fputs($datei,"Server ".print_r( $_SERVER, true));
             fclose($datei);
         }
     }
@@ -242,7 +257,20 @@
 
 	function check_quota(&$db)
 	{
-		return;
+	   // Checks the quota and if over limit, returns "over quota" to the user.
+	   $auth_user = array_key_exists('PHP_AUTH_USER', $_SERVER) ? $_SERVER['PHP_AUTH_USER'] : null;
+	   try {
+		$quota_used = $db->get_storage_total();
+		log_quota("Debug quota: ".$auth_user." @ ".$quota_used." KB.");
+		} catch (Exception $e) {
+		  log_error($e->getMessage(), $e->getCode());
+		}
+      
+	   if ($quota_used > 25000) {
+	      log_quota("[!!] Over quota: ".$auth_user." @ ".$quota_used." KB.");
+	      // HTTP 400 with body error code 14 means over quota.
+	      report_problem(WEAVE_ERROR_OVER_QUOTA, 400);
+	   }
 	}
 	
 	function check_timestamp($collection, &$db)