Add Mail-in-a-Box version status check.
This commit is contained in:
parent
8c066764d9
commit
1a525df8ad
|
@ -402,6 +402,24 @@ def backup_status():
|
|||
from backup import backup_status
|
||||
return json_response(backup_status(env))
|
||||
|
||||
@app.route('/system/privacy/enable', methods=["POST"])
|
||||
@authorized_personnel_only
|
||||
def privacy_status_enable():
|
||||
config = utils.load_settings()
|
||||
config["PRIVACY"] = 'True'
|
||||
utils.write_settings(config)
|
||||
|
||||
return "Ok"
|
||||
|
||||
@app.route('/system/privacy/disable', methods=["POST"])
|
||||
@authorized_personnel_only
|
||||
def privacy_status_disable():
|
||||
config = utils.load_settings()
|
||||
config["PRIVACY"] = 'False'
|
||||
utils.write_settings(config)
|
||||
|
||||
return "Ok"
|
||||
|
||||
# MUNIN
|
||||
|
||||
@app.route('/munin/')
|
||||
|
|
|
@ -16,7 +16,7 @@ from dns_update import get_dns_zones, build_tlsa_record, get_custom_dns_config,
|
|||
from web_update import get_web_domains, get_default_www_redirects, get_domain_ssl_files
|
||||
from mailconfig import get_mail_domains, get_mail_aliases
|
||||
|
||||
from utils import shell, sort_domains, load_env_vars_from_file
|
||||
from utils import shell, sort_domains, load_env_vars_from_file, load_settings
|
||||
|
||||
def run_checks(rounded_values, env, output, pool):
|
||||
# run systems checks
|
||||
|
@ -149,6 +149,7 @@ def check_service(i, service, env):
|
|||
def run_system_checks(rounded_values, env, output):
|
||||
check_ssh_password(env, output)
|
||||
check_software_updates(env, output)
|
||||
check_miab_version(env, output)
|
||||
check_system_aliases(env, output)
|
||||
check_free_disk_space(rounded_values, env, output)
|
||||
|
||||
|
@ -805,11 +806,11 @@ def list_apt_updates(apt_update=True):
|
|||
return pkgs
|
||||
|
||||
def what_version_is_this(env):
|
||||
# This function runs `git describe` on the Mail-in-a-Box installation directory.
|
||||
# This function runs `git describe --abbrev=0` on the Mail-in-a-Box installation directory.
|
||||
# Git may not be installed and Mail-in-a-Box may not have been cloned from github,
|
||||
# so this function may raise all sorts of exceptions.
|
||||
miab_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
tag = shell("check_output", ["/usr/bin/git", "describe"], env={"GIT_DIR": os.path.join(miab_dir, '.git')}).strip()
|
||||
tag = shell("check_output", ["/usr/bin/git", "describe", "--abbrev=0"], env={"GIT_DIR": os.path.join(miab_dir, '.git')}).strip()
|
||||
return tag
|
||||
|
||||
def get_latest_miab_version():
|
||||
|
@ -818,6 +819,17 @@ def get_latest_miab_version():
|
|||
import urllib.request
|
||||
return re.search(b'TAG=(.*)', urllib.request.urlopen("https://mailinabox.email/bootstrap.sh?ping=1").read()).group(1).decode("utf8")
|
||||
|
||||
def check_miab_version(env, output):
|
||||
|
||||
config = load_settings()
|
||||
|
||||
if config['PRIVACY'] == 'True':
|
||||
output.print_warning("Mail-in-a-Box version check disabled.")
|
||||
elif what_version_is_this(env) != get_latest_miab_version():
|
||||
output.print_error("Mail-in-a-Box is outdated. To find the latest version and for upgrade instructions, see https://mailinabox.email/. ")
|
||||
else:
|
||||
output.print_ok("Mail-in-a-Box is up to date. You are running version %s." % what_version_is_this(env))
|
||||
|
||||
def run_and_output_changes(env, pool, send_via_email):
|
||||
import json
|
||||
from difflib import SequenceMatcher
|
||||
|
|
|
@ -114,7 +114,6 @@
|
|||
</li>
|
||||
<li><a href="#sync_guide" onclick="return show_panel(this);">Contacts/Calendar</a></li>
|
||||
<li><a href="#web" onclick="return show_panel(this);">Web</a></li>
|
||||
<li><a href="#version" onclick="return show_panel(this);">Version</a></li>
|
||||
</ul>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li><a href="#" onclick="do_logout(); return false;" style="color: white">Log out?</a></li>
|
||||
|
@ -168,10 +167,6 @@
|
|||
{% include "ssl.html" %}
|
||||
</div>
|
||||
|
||||
<div id="panel_version" class="admin_panel">
|
||||
{% include "version.html" %}
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<footer>
|
||||
|
|
|
@ -43,6 +43,10 @@
|
|||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4>Privacy Setting</h4>
|
||||
<p>By deactivating the advanced privacy feature your Mail-in-a-Box will contact a remote server to check if a new version got released.</p>
|
||||
<p>Advanced Privacy <a onclick="enable_privacy()" href="">On</a> | <a onclick="disable_privacy()" href="">Off</a></p>
|
||||
|
||||
<script>
|
||||
function show_system_status() {
|
||||
$('#system-checks tbody').html("<tr><td colspan='2' class='text-muted'>Loading...</td></tr>")
|
||||
|
@ -83,4 +87,16 @@ function show_system_status() {
|
|||
}
|
||||
})
|
||||
}
|
||||
function enable_privacy() {
|
||||
api(
|
||||
"/system/privacy/enable",
|
||||
"Post",
|
||||
{ });
|
||||
}
|
||||
function disable_privacy() {
|
||||
api(
|
||||
"/system/privacy/disable",
|
||||
"Post",
|
||||
{ });
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
<style>
|
||||
</style>
|
||||
|
||||
<h2>Mail-in-a-Box Version</h2>
|
||||
|
||||
<p>You are running Mail-in-a-Box version <span id="miab-version" style="font-weight: bold">...</span>.</p>
|
||||
|
||||
<p>The latest version of Mail-in-a-Box is <button id="miab-get-latest-upstream" onclick="check_latest_version()">Check</button>.</p>
|
||||
|
||||
<p>To find the latest version and for upgrade instructions, see <a href="https://mailinabox.email/">https://mailinabox.email/</a>, <a href="https://github.com/mail-in-a-box/mailinabox/blob/master/CHANGELOG.md">release notes</a>, and <a href="https://mailinabox.email/maintenance.html#updating-mail-in-a-box">upgrade instructions</a>.</p>
|
||||
|
||||
<script>
|
||||
function show_version() {
|
||||
$('#miab-version').text('loading...');
|
||||
api(
|
||||
"/system/version",
|
||||
"GET",
|
||||
{
|
||||
},
|
||||
function(version) {
|
||||
$('#miab-version').text(version);
|
||||
});
|
||||
}
|
||||
|
||||
function check_latest_version() {
|
||||
$('#miab-get-latest-upstream').text('loading...');
|
||||
api(
|
||||
"/system/latest-upstream-version",
|
||||
"POST",
|
||||
{
|
||||
},
|
||||
function(version) {
|
||||
$('#miab-get-latest-upstream').text(version);
|
||||
});
|
||||
}
|
||||
</script>
|
|
@ -13,6 +13,28 @@ def load_env_vars_from_file(fn):
|
|||
for line in open(fn): env.setdefault(*line.strip().split("=", 1))
|
||||
return env
|
||||
|
||||
# Settings
|
||||
settings_root = os.path.join(load_environment()["STORAGE_ROOT"], '/')
|
||||
default_settings = {
|
||||
"PRIVACY": 'TRUE'
|
||||
}
|
||||
|
||||
def write_settings(newconfig):
|
||||
with open(os.path.join(settings_root, 'settings.yaml'), "w") as f:
|
||||
f.write(rtyaml.dump(newconfig))
|
||||
|
||||
def load_settings():
|
||||
try:
|
||||
config = rtyaml.load(open(os.path.join(settings_root, 'settings.yaml'), "w"))
|
||||
if not isinstance(config, dict): raise ValueError() # caught below
|
||||
except:
|
||||
return default_settings
|
||||
|
||||
merged_config = default_settings.copy()
|
||||
merged_config.update(config)
|
||||
|
||||
return config
|
||||
|
||||
def save_environment(env):
|
||||
with open("/etc/mailinabox.conf", "w") as f:
|
||||
for k, v in env.items():
|
||||
|
|
Loading…
Reference in New Issue