Files
2025-03-31 02:32:00 +08:00

123 lines
4.4 KiB
Python

from functools import partial, wraps
import logging
import os
import shutil
from .utils import get_local_app_setting_path
from .trim_workflow import WorkflowTrimHandler
from .crypto_node import (
SaveCryptoNode,
RandomSeedNode,
SaveCryptoBridgeNode,
DecodeCryptoNode,
)
from .crypto_node_old import ExcuteCryptoNode, CryptoCatImage
NODE_CLASS_MAPPINGS = {
"SaveCryptoNode": SaveCryptoNode,
"ExcuteCryptoNode": ExcuteCryptoNode,
"RandomSeedNode": RandomSeedNode,
"CryptoCatImage": CryptoCatImage,
"SaveCryptoBridgeNode": SaveCryptoBridgeNode,
"DecodeCryptoNode": DecodeCryptoNode,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"SaveCryptoNode": "加密组件",
"RandomSeedNode": "随机种子",
"SaveCryptoBridgeNode": "加密结束桥接",
"DecodeCryptoNode": "解密组件",
"ExcuteCryptoNode": "OutputCrypto",
"CryptoCatImage": "CryptoCatImage",
}
WEB_DIRECTORY = "./js"
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAMES_MAPPINGS", "WEB_DIRECTORY"]
from server import PromptServer
import aiohttp
workspace_path = os.path.join(os.path.dirname(__file__))
dist_path = os.path.join(workspace_path, "static")
if os.path.exists(dist_path):
PromptServer.instance.app.add_routes(
[aiohttp.web.static("/cryptocat/static", dist_path)]
)
from urllib.parse import unquote
from .auth_unit import AuthUnit
from .updown_workflow import UploadWorkflow, UserWorkflowSetting
handler_instance = WorkflowTrimHandler()
onprompt_callback = partial(handler_instance.onprompt_handler)
PromptServer.instance.add_on_prompt_handler(onprompt_callback)
routes = PromptServer.instance.routes
@routes.post("/cryptocat/auth_callback")
async def auth_callback(request):
auth_query = await request.json()
token = auth_query.get("token", "")
client_key = auth_query.get("client_key", "")
if token and client_key:
token = unquote(token)
client_key = unquote(client_key)
AuthUnit().set_user_token(token, client_key)
return aiohttp.web.json_response({"status": "success"}, status=200)
@routes.post("/cryptocat/keygen")
async def keygen(request):
data = await request.json()
template_id = data.get("template_id", "").strip()
if not template_id or len(template_id) != 32:
return aiohttp.web.json_response(
{"error_msg": "template_id is required"}, status=500
)
expire_date = data.get("expire_date", "")
use_days = data.get("use_days", "")
user_token, error_msg, error_code = AuthUnit().get_user_token()
if not user_token:
logging.error(f"crypto cat keygen failed: {error_msg}")
return aiohttp.web.json_response({"error_msg": error_msg}, status=200)
user_workflow = UploadWorkflow(user_token)
serial_numbers = user_workflow.generate_serial_number(
template_id, expire_date, use_days, 1
)
if not serial_numbers:
logging.error(f"crypto cat keygen failed: {error_msg}")
return aiohttp.web.json_response({"error_msg": "获取失败"}, status=200)
serial_number = serial_numbers[0]
return aiohttp.web.json_response({"serial_number": serial_number}, status=200)
@routes.get("/cryptocat/clear")
async def logout(request):
AuthUnit().clear_user_token()
local_app_setting_path = get_local_app_setting_path()
shutil.rmtree(local_app_setting_path, ignore_errors=True)
return aiohttp.web.json_response({"status": "success"}, status=200)
@routes.post("/cryptocat/login")
async def login(request):
user_token, error_msg, error_code = AuthUnit().get_user_token()
if user_token and len(user_token) > 10 and error_code == 0:
return aiohttp.web.json_response({"error_msg": "已经登录,如果切换用户先登出"}, status=200)
else:
AuthUnit().login_dialog()
return aiohttp.web.json_response(
{"status": "success", "error_msg": "登录中..."}, status=200
)
@routes.post("/cryptocat/set_long_token")
async def set_long_token(request):
data = await request.json()
long_token = data.get("long_token", "")
AuthUnit().set_long_token(long_token)
return aiohttp.web.json_response({"status": "success"}, status=200)
@routes.post("/cryptocat/set_auto_overwrite")
async def set_auto_overwrite(request):
data = await request.json()
auto_overwrite = data.get("auto_overwrite")
UserWorkflowSetting().set_auto_overwrite(auto_overwrite)
return aiohttp.web.json_response({"status": "success"}, status=200)