提供插件配置插槽

This commit is contained in:
Wuyi无疑 2023-05-02 02:32:33 +08:00
parent a139a180d3
commit 256956c55e
4 changed files with 113 additions and 52 deletions

View File

@ -17,6 +17,12 @@ from gsuid_core.handler import handle_event # noqa: E402
from gsuid_core.models import MessageReceive # noqa: E402 from gsuid_core.models import MessageReceive # noqa: E402
from gsuid_core.webconsole.mount_app import site # noqa: E402 from gsuid_core.webconsole.mount_app import site # noqa: E402
from gsuid_core.aps import start_scheduler, shutdown_scheduler # noqa: E402 from gsuid_core.aps import start_scheduler, shutdown_scheduler # noqa: E402
from gsuid_core.utils.plugins_config.models import ( # noqa: E402
GsListStrConfig,
)
from gsuid_core.utils.plugins_config.gs_config import ( # noqa: E402
all_config_list,
)
app = FastAPI() app = FastAPI()
HOST = core_config.get_config('HOST') HOST = core_config.get_config('HOST')
@ -76,20 +82,19 @@ def main():
data['white_list'] = [] data['white_list'] = []
sv.set(**data) sv.set(**data)
''' @app.post('/genshinuid/setGsConfig/{config_name}')
@app.post('/genshinuid/setGsConfig')
@site.auth.requires('admin') @site.auth.requires('admin')
async def _set_Config(request: Request, data: Dict): async def _set_Config(request: Request, data: Dict, config_name: str):
for name in data: for name in data:
if name == 'params': if name == 'params':
continue continue
config = gsconfig[name] config = all_config_list[config_name][name]
if isinstance(config, GsListStrConfig): if isinstance(config, GsListStrConfig):
value = data[name].split(':') value = data[name].split(':')
else: else:
value = data[name] value = data[name]
gsconfig.set_config(name, value) all_config_list[config_name].set_config(name, value)
'''
site.mount_app(app) site.mount_app(app)
uvicorn.run( uvicorn.run(

View File

@ -14,6 +14,7 @@ from typing import Any, Dict, List, Union, Literal, Optional, cast
from aiohttp import ClientSession, ContentTypeError from aiohttp import ClientSession, ContentTypeError
from gsuid_core.logger import logger from gsuid_core.logger import logger
from gsuid_core.utils.plugins_config.gs_config import core_plugins_config
from .api import _API from .api import _API
from .tools import ( from .tools import (
@ -62,9 +63,11 @@ RECOGNIZE_SERVER = {
'9': 'os_cht', '9': 'os_cht',
} }
proxy_url = core_plugins_config.get_config('proxy').data
class BaseMysApi: class BaseMysApi:
proxy_url: Optional[str] = None proxy_url: Optional[str] = proxy_url if proxy_url else None
mysVersion = '2.44.1' mysVersion = '2.44.1'
_HEADER = { _HEADER = {
'x-rpc-app_version': mysVersion, 'x-rpc-app_version': mysVersion,
@ -214,6 +217,44 @@ class BaseMysApi:
class MysApi(BaseMysApi): class MysApi(BaseMysApi):
async def _pass(self, gt: str, ch: str, header: Dict):
# 警告使用该服务例如某RR等需要注意风险问题
# 本项目不以任何形式提供相关接口
# 代码来源GITHUB项目MIT开源
_pass_api = core_plugins_config.get_config('_pass_API').data
if _pass_api:
data = await self._mys_request(
url=f'{_pass_api}&gt={gt}&challenge={ch}',
method='GET',
header=header,
)
if isinstance(data, int):
return None, None
else:
validate = data['data']['validate']
ch = data['data']['challenge']
else:
validate = None
return validate, ch
async def _upass(self, header: Dict, is_bbs: bool = False):
if is_bbs:
raw_data = await self.get_bbs_upass_link(header)
else:
raw_data = await self.get_upass_link(header)
if isinstance(raw_data, int):
return False
gt = raw_data['data']['gt']
ch = raw_data['data']['challenge']
vl, ch = await self._pass(gt, ch, header)
if vl:
await self.get_header_and_vl(header, ch, vl)
else:
return True
async def get_upass_link(self, header: Dict) -> Union[int, Dict]: async def get_upass_link(self, header: Dict) -> Union[int, Dict]:
header['DS'] = get_ds_token('is_high=false') header['DS'] = get_ds_token('is_high=false')
return await self._mys_request( return await self._mys_request(

View File

@ -1,5 +1,5 @@
from pathlib import Path from pathlib import Path
from typing import Dict, List, Union from typing import Any, Dict, List, Union
from msgspec import json as msgjson from msgspec import json as msgjson
@ -78,31 +78,36 @@ class StringConfig:
# 重新写回 # 重新写回
self.write_config() self.write_config()
def get_config(self, key: str) -> GSC: def get_config(self, key: str) -> Any:
if key in self.config: if key in self.config:
return self.config[key] return self.config[key]
elif key in self.config_list: elif key in self.config_list:
logger.info(f'[配置] 配置项 {key} 不存在, 但是默认配置存在, 已更新...') logger.info(
f'[配置][{self.config_name}] 配置项 {key} 不存在, 但是默认配置存在, 已更新...'
)
self.update_config() self.update_config()
return self.config[key] return self.config[key]
else: else:
logger.warning(f'[配置] 配置项 {key} 不存在也没有配置, 返回默认参数...') logger.warning(
f'[配置][{self.config_name}] 配置项 {key} 不存在也没有配置, 返回默认参数...'
)
return GsBoolConfig('缺省值', '获取错误的配置项', False) return GsBoolConfig('缺省值', '获取错误的配置项', False)
def set_config( def set_config(
self, key: str, value: Union[str, List, bool, Dict] self, key: str, value: Union[str, List, bool, Dict]
) -> bool: ) -> bool:
if key in self.config_list: if key in self.config_list:
temp = self.config[key] temp = self.config[key].data
if type(value) == type(temp): if type(value) == type(temp):
temp.data = value # type:ignore
# 设置值 # 设置值
self.config[key] = temp self.config[key].data = value # type: ignore
# 重新写回 # 重新写回
self.write_config() self.write_config()
return True return True
else: else:
logger.warning(f'[配置] 配置项 {key} 写入类型不正确, 停止写入...') logger.warning(
f'[配置][{self.config_name}] 配置项 {key} 写入类型不正确, 停止写入...'
)
return False return False
else: else:
return False return False
@ -111,5 +116,5 @@ class StringConfig:
all_config_list: Dict[str, StringConfig] = {} all_config_list: Dict[str, StringConfig] = {}
core_plugins_config = StringConfig( core_plugins_config = StringConfig(
'core', get_res_path() / 'core_config.json', CONIFG_DEFAULT 'Core', get_res_path() / 'core_config.json', CONIFG_DEFAULT
) )

View File

@ -11,6 +11,46 @@ from gsuid_core.webconsole.create_base_panel import (
) )
def get_card_page(card_name: str):
return {
'type': 'service',
'body': {
'type': 'card',
'header': {'title': card_name, 'subTitle': ''},
'body': [],
'actions': [
{
'type': 'button',
'label': '确认修改',
'id': 'u:5784cfaa5c0a',
'actionType': 'ajax',
'api': f'/genshinuid/setGsConfig/{card_name}',
'onEvent': {
'click': {
'weight': 0,
'actions': [
{
'args': {
'msgType': 'success',
'position': 'top-center',
'closeButton': True,
'showIcon': True,
'msg': '成功设置!',
'timeout': 100,
},
'actionType': 'toast',
}
],
}
},
}
],
'id': 'u:69b06813bfbe',
},
'id': 'u:4c2981f6a055',
}
def get_config_page(): def get_config_page():
page = { page = {
'type': 'page', 'type': 'page',
@ -18,42 +58,10 @@ def get_config_page():
'body': [], 'body': [],
'id': 'u:a9be7e0dc626', 'id': 'u:a9be7e0dc626',
} }
card = {
'type': 'card',
'header': {'title': '', 'subTitle': ''},
'body': [],
'actions': [
{
'type': 'button',
'label': '确认修改',
'id': 'u:5784cfaa5c0a',
'actionType': 'ajax',
'api': '/genshinuid/setGsConfig',
'onEvent': {
'click': {
'weight': 0,
'actions': [
{
'args': {
'msgType': 'success',
'position': 'top-center',
'closeButton': True,
'showIcon': True,
'msg': '成功设置!',
'timeout': 100,
},
'actionType': 'toast',
}
],
}
},
}
],
'id': 'u:69b06813bfbe',
}
body = [] body = []
solo_body = [] solo_body = []
for config_name in all_config_list: for config_name in all_config_list:
card = get_card_page(config_name)
_config = all_config_list[config_name] _config = all_config_list[config_name]
for config in _config: for config in _config:
gsc = _config[config] gsc = _config[config]
@ -68,7 +76,9 @@ def get_config_page():
if len(solo_body) == 3: if len(solo_body) == 3:
body.append(get_container_panel(solo_body)) body.append(get_container_panel(solo_body))
solo_body = [] solo_body = []
body.append(get_container_panel(solo_body)) body.append(get_container_panel(solo_body))
card['body'] = body card['body']['body'] = body
page['body'].append(card) page['body'].append(card)
body = []
solo_body = []
return page return page