[aur-dev] [PATCH] Implement a maintenance mode
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@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
participants (1)
-
Lukas Fleischer