Adding GUI update feature (server-side)

This commit is contained in:
Félix Aime
2021-02-17 20:16:39 +01:00
parent 85228e77f7
commit 5334f30edf
5 changed files with 91 additions and 6 deletions

View File

@ -0,0 +1,19 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from flask import jsonify, Blueprint
from app.classes.update import Update
update_bp = Blueprint("update", __name__)
@update_bp.route("/check", methods=["GET"])
def check():
""" Check the presence of new version """
return jsonify(Update().check_version())
@update_bp.route("/process", methods=["GET"])
def process():
""" Check the presence of new version """
return jsonify(Update().update_instance())

View File

@ -0,0 +1,56 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from app.utils import read_config
import subprocess as sp
import requests
import json
import os
import re
class Update(object):
def __init__(self):
self.project_url = "https://api.github.com/repos/KasperskyLab/TinyCheck/tags"
self.app_path = "/usr/share/tinycheck"
return None
def check_version(self):
"""
Check if a new version of TinyCheck is available
by quering the Github api and comparing the last
tag with the VERSION file content.
"""
if read_config(("frontend", "update")):
res = requests.get(self.project_url)
res = json.loads(res.content.decode("utf8"))
with open(os.path.join(self.app_path, "VERSION")) as f:
if f.read() != res[0]["name"]:
return {"status": True,
"message": "A new version is available"}
else:
return {"status": True,
"message": "This is the latest version"}
else:
return {"status": False,
"message": "You don't have rights to do this operation."}
def update_instance(self):
"""
Update the instance by executing
the update script.
"""
if read_config(("frontend", "update")):
try:
os.chdir(self.app_path)
sp.Popen(["bash", os.path.join(self.app_path, "update.sh")])
return {"status": True,
"message": "Update successfully launched"}
except:
return {"status": False,
"message": "Issue during the update"}
else:
return {"status": False,
"message": "You don't have rights to do this operation."}

View File

@ -8,6 +8,7 @@ from app.blueprints.device import device_bp
from app.blueprints.analysis import analysis_bp
from app.blueprints.save import save_bp
from app.blueprints.misc import misc_bp
from app.blueprints.update import update_bp
from app.utils import read_config
app = Flask(__name__, template_folder="../../app/frontend/dist")
@ -42,6 +43,7 @@ app.register_blueprint(device_bp, url_prefix='/api/device')
app.register_blueprint(analysis_bp, url_prefix='/api/analysis')
app.register_blueprint(save_bp, url_prefix='/api/save')
app.register_blueprint(misc_bp, url_prefix='/api/misc')
app.register_blueprint(update_bp, url_prefix='/api/update')
if __name__ == '__main__':
if read_config(("frontend", "remote_access")):