ScopeSentry/api/system.py

77 lines
2.2 KiB
Python

# -------------------------------------
# @file : system.py
# @author : Autumn
# @contact : rainy-autumn@outlook.com
# @time : 2024/5/14 21:59
# -------------------------------------------
from fastapi import APIRouter, Depends
import git
from api.users import verify_token
from core.db import get_mongo_db
from core.config import *
import requests
from core.redis_handler import get_redis_pool, refresh_config
router = APIRouter()
@router.get("/system/version")
async def get_system_version(redis_con=Depends(get_redis_pool), _: dict = Depends(verify_token)):
try:
r = requests.get(f"{UPDATEURL}/get/version?name=server").json()
server_lversion = r["value"]
server_msg = r['msg']
r = requests.get(f"{UPDATEURL}/get/version?name=scan").json()
scan_lversion = r["value"]
scan_msg = r['msg']
except:
server_lversion = ""
server_msg = ""
scan_lversion = ""
scan_msg = ""
result_list = [{"name": "ScopeSentry-Server", "cversion": VERSION, "lversion": server_lversion, "msg": server_msg}]
async with redis_con as redis:
keys = await redis.keys("node:*")
for key in keys:
name = key.split(":")[1]
hash_data = await redis.hgetall(key)
result_list.append({"name": name, "cversion": hash_data["version"], "lversion": scan_lversion, "msg": scan_msg})
return {
"code": 200,
"data": {
'list': result_list
}
}
@router.get("/system/update")
async def system_update():
update_server()
await refresh_config("all", 'UpdateSystem')
def update_server():
repo_path = os.getcwd()
if not os.path.isdir('.git'):
repo = git.Repo.init(repo_path)
else:
repo = git.Repo.init(repo_path, bare=False)
if not repo.remotes:
# 添加远程仓库地址
repo.create_remote('origin', REMOTE_REPO_URL)
else:
# 获取远程地址
remote_url = repo.remotes.origin.url
# 检查远程地址是否为预期地址
if remote_url != REMOTE_REPO_URL:
repo.remotes.origin.set_url(REMOTE_REPO_URL)
result = repo.remotes.origin.pull()
for info in result:
print(info)