2024-06-05 13:39:34 +00:00
|
|
|
# -------------------------------------
|
|
|
|
# @file : system.py
|
|
|
|
# @author : Autumn
|
|
|
|
# @contact : rainy-autumn@outlook.com
|
|
|
|
# @time : 2024/5/14 21:59
|
|
|
|
# -------------------------------------------
|
2024-06-17 14:41:04 +00:00
|
|
|
import subprocess
|
2024-06-29 12:34:22 +00:00
|
|
|
import traceback
|
2024-06-05 13:39:34 +00:00
|
|
|
|
|
|
|
from fastapi import APIRouter, Depends
|
|
|
|
import git
|
2024-06-13 12:34:50 +00:00
|
|
|
import httpx
|
|
|
|
from loguru import logger
|
2024-06-05 13:39:34 +00:00
|
|
|
from api.users import verify_token
|
|
|
|
from core.config import *
|
|
|
|
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)):
|
2024-06-13 12:34:50 +00:00
|
|
|
server_lversion = ""
|
|
|
|
server_msg = ""
|
|
|
|
scan_lversion = ""
|
|
|
|
scan_msg = ""
|
2024-06-05 13:39:34 +00:00
|
|
|
|
2024-06-29 12:34:22 +00:00
|
|
|
async with httpx.AsyncClient(verify=False) as client:
|
2024-06-13 12:34:50 +00:00
|
|
|
try:
|
2024-06-29 12:34:22 +00:00
|
|
|
r = await client.get(f"https://gitee.com/constL/scope-sentry/raw/main/version.json", timeout=10)
|
2024-06-13 12:34:50 +00:00
|
|
|
r_json = r.json()
|
2024-06-13 12:36:02 +00:00
|
|
|
server_lversion = r_json["server"]
|
2024-06-13 12:38:11 +00:00
|
|
|
server_msg = r_json['server_msg']
|
|
|
|
scan_lversion = r_json["scan"]
|
|
|
|
scan_msg = r_json['scan_msg']
|
2024-06-29 12:34:22 +00:00
|
|
|
except:
|
|
|
|
try:
|
|
|
|
r = await client.get(f"https://raw.githubusercontent.com/Autumn-27/ScopeSentry/main/version.json",
|
|
|
|
timeout=10)
|
|
|
|
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(f"An unexpected error occurred: {e}")
|
2024-06-05 13:39:34 +00:00
|
|
|
|
|
|
|
result_list = [{"name": "ScopeSentry-Server", "cversion": VERSION, "lversion": server_lversion, "msg": server_msg}]
|
2024-06-13 12:40:24 +00:00
|
|
|
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)
|
2024-06-29 12:34:22 +00:00
|
|
|
result_list.append(
|
|
|
|
{"name": name, "cversion": hash_data["version"], "lversion": scan_lversion, "msg": scan_msg})
|
2024-06-13 12:40:24 +00:00
|
|
|
except:
|
|
|
|
pass
|
2024-06-05 13:39:34 +00:00
|
|
|
return {
|
2024-06-29 12:34:22 +00:00
|
|
|
"code": 200,
|
|
|
|
"data": {
|
|
|
|
'list': result_list
|
2024-06-05 13:39:34 +00:00
|
|
|
}
|
2024-06-29 12:34:22 +00:00
|
|
|
}
|
2024-06-05 13:39:34 +00:00
|
|
|
|
|
|
|
|
2024-06-29 12:34:22 +00:00
|
|
|
# @router.get("/system/update")
|
|
|
|
# async def system_update():
|
|
|
|
# await update_server()
|
|
|
|
# await refresh_config("all", 'UpdateSystem')
|
2024-06-05 13:39:34 +00:00
|
|
|
|
|
|
|
|
2024-06-17 14:41:04 +00:00
|
|
|
async def update_server():
|
|
|
|
relative_path = f'requirements.txt'
|
|
|
|
file_path = os.path.join(os.getcwd(), relative_path)
|
|
|
|
async with httpx.AsyncClient() as client:
|
|
|
|
try:
|
2024-06-29 12:34:22 +00:00
|
|
|
r = await client.get(f"https://raw.githubusercontent.com/Autumn-27/ScopeSentry/main/requirements.txt",
|
|
|
|
timeout=5)
|
2024-06-17 14:41:04 +00:00
|
|
|
content = r.text
|
|
|
|
with open(file_path, "w") as f:
|
|
|
|
f.write(content)
|
|
|
|
logger.info("requirements.txt write successfully")
|
|
|
|
result = subprocess.run(
|
|
|
|
['pip', 'install', '-r', file_path, '-i', 'https://pypi.tuna.tsinghua.edu.cn/simple', '--no-cache-dir'],
|
|
|
|
capture_output=True, text=True
|
|
|
|
)
|
|
|
|
if result.returncode == 0:
|
|
|
|
logger.info("Packages installed successfully")
|
|
|
|
else:
|
|
|
|
logger.error(f"Error installing packages: {result.stderr}")
|
|
|
|
except Exception as e:
|
|
|
|
logger.error(str(e))
|
2024-06-05 13:39:34 +00:00
|
|
|
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)
|