[aur-dev] [PATCH] Implement a maintenance mode

Lukas Fleischer lfleischer at archlinux.org
Thu Jun 11 12:33:36 UTC 2015


Add support for a maintenance mode that disables both the website and
the SSH interface and can be enabled easily using a configuration
option.

Signed-off-by: Lukas Fleischer <lfleischer at archlinux.org>
---
 conf/config.proto          |  1 +
 git-interface/git-serve.py |  5 +++++
 web/html/503.php           | 15 +++++++++++++++
 web/html/index.php         |  6 ++++++
 4 files changed, 27 insertions(+)
 create mode 100644 web/html/503.php

diff --git a/conf/config.proto b/conf/config.proto
index 1d3e329..e5da57a 100644
--- a/conf/config.proto
+++ b/conf/config.proto
@@ -28,6 +28,7 @@ auto_delete_age = 86400
 pkgbuild_uri = https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=%s
 log_uri = https://aur.archlinux.org/cgit/aur.git/log/?h=%s
 snapshot_uri = https://aur.archlinux.org/cgit/aur.git/snapshot/%s.tar.gz
+enable-maintenance = 1
 
 [auth]
 valid-keytypes = ssh-rsa ssh-dss ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 ssh-ed25519
diff --git a/git-interface/git-serve.py b/git-interface/git-serve.py
index 9812acb..21b130c 100755
--- a/git-interface/git-serve.py
+++ b/git-interface/git-serve.py
@@ -21,6 +21,8 @@ repo_regex = config.get('serve', 'repo-regex')
 git_shell_cmd = config.get('serve', 'git-shell-cmd')
 ssh_cmdline = config.get('serve', 'ssh-cmdline')
 
+enable_maintenance = config.getboolean('options', 'enable-maintenance')
+
 def pkgbase_exists(pkgbase):
     db = mysql.connector.connect(host=aur_db_host, user=aur_db_user,
                                  passwd=aur_db_pass, db=aur_db_name,
@@ -110,6 +112,9 @@ if not cmd:
 cmdargv = shlex.split(cmd)
 action = cmdargv[0]
 
+if enable_maintenance:
+	die("The AUR is down due to maintenance. We will be back soon.")
+
 if action == 'git-upload-pack' or action == 'git-receive-pack':
     if len(cmdargv) < 2:
         die_with_help("%s: missing path" % (action))
diff --git a/web/html/503.php b/web/html/503.php
new file mode 100644
index 0000000..80eb436
--- /dev/null
+++ b/web/html/503.php
@@ -0,0 +1,15 @@
+<?php
+
+set_include_path(get_include_path() . PATH_SEPARATOR . '../lib');
+
+html_header( __("Service Unavailable") );
+?>
+
+<div id="error-page" class="box 503">
+	<h2>503 - <?= __("Service Unavailable") ?></h2>
+	<p><?= __("Don't panic! This site is down due to maintenance. We will be back soon.") ?></p>
+</div>
+
+<?php
+html_footer(AURWEB_VERSION);
+
diff --git a/web/html/index.php b/web/html/index.php
index 0275d0a..27f81c8 100644
--- a/web/html/index.php
+++ b/web/html/index.php
@@ -7,6 +7,12 @@ include_once("pkgfuncs.inc.php");
 $path = $_SERVER['PATH_INFO'];
 $tokens = explode('/', $path);
 
+if (config_get_bool('options', 'enable-maintenance') && (empty($tokens[1]) || ($tokens[1] != "css" && $tokens[1] != "images"))) {
+	header("HTTP/1.0 503 Service Unavailable");
+	include "./503.php";
+	return;
+}
+
 if (!empty($tokens[1]) && '/' . $tokens[1] == get_pkg_route()) {
 	if (!empty($tokens[2])) {
 		/* TODO: Create a proper data structure to pass variables from
-- 
2.4.2


More information about the aur-dev mailing list