84 lines
2.5 KiB
Python
84 lines
2.5 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
|
|
import httpx
|
|
from loguru import logger
|
|
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)):
|
|
server_lversion = ""
|
|
server_msg = ""
|
|
scan_lversion = ""
|
|
scan_msg = ""
|
|
|
|
async with httpx.AsyncClient() as client:
|
|
try:
|
|
r = await client.get(f"https://raw.githubusercontent.com/Autumn-27/ScopeSentry/main/version.json", timeout=5)
|
|
r_json = r.json()
|
|
server_lversion = r_json["server"]
|
|
server_msg = r_json['server_msg']
|
|
scan_lversion = r_json["scan"]
|
|
scan_msg = r_json['scan_msg']
|
|
except Exception as e:
|
|
# 这里可以添加一些日志记录错误信息
|
|
logger.error(str(e))
|
|
|
|
result_list = [{"name": "ScopeSentry-Server", "cversion": VERSION, "lversion": server_lversion, "msg": server_msg}]
|
|
try:
|
|
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})
|
|
except:
|
|
pass
|
|
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)
|
|
|