74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
|
#!/usr/bin/env python3
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
from app.utils import read_config
|
||
|
import subprocess as sp
|
||
|
import requests
|
||
|
import json
|
||
|
import os
|
||
|
|
||
|
|
||
|
class Update(object):
|
||
|
|
||
|
def __init__(self):
|
||
|
self.project_url = read_config(("project", "tags_url"))
|
||
|
self.app_path = read_config(("project", "path"))
|
||
|
return None
|
||
|
|
||
|
def check_version(self) -> dict:
|
||
|
""" Check if a new version of SpyGuard is available
|
||
|
by quering the Github api and comparing the last
|
||
|
tag inside the VERSION file.
|
||
|
|
||
|
Returns:
|
||
|
dict: dict containing the available versions.
|
||
|
"""
|
||
|
try:
|
||
|
|
||
|
res = requests.get(self.project_url)
|
||
|
res = json.loads(res.content.decode("utf8"))
|
||
|
|
||
|
with open(os.path.join(self.app_path, "VERSION")) as f:
|
||
|
cv = f.read()
|
||
|
if cv != res[0]["name"]:
|
||
|
return {"status": True,
|
||
|
"message": "A new version is available",
|
||
|
"current_version": cv,
|
||
|
"next_version": res[0]["name"]}
|
||
|
else:
|
||
|
return {"status": True,
|
||
|
"message": "This is the latest version",
|
||
|
"current_version": cv}
|
||
|
except:
|
||
|
return {"status": False,
|
||
|
"message": "Something went wrong (no API access nor version file)"}
|
||
|
|
||
|
def get_current_version(self) -> dict:
|
||
|
""" Get the current version of the Spyguard instance
|
||
|
|
||
|
Returns:
|
||
|
dict: current version or error.
|
||
|
"""
|
||
|
try:
|
||
|
with open(os.path.join(self.app_path, "VERSION")) as f:
|
||
|
return {"status": True,
|
||
|
"current_version": f.read()}
|
||
|
except:
|
||
|
return {"status": False,
|
||
|
"message": "Something went wrong - no version file ?"}
|
||
|
|
||
|
def update_instance(self) -> dict:
|
||
|
"""Launching update.sh to update SpyGuard
|
||
|
|
||
|
Returns:
|
||
|
dict: result of the operation
|
||
|
"""
|
||
|
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"}
|