添加plugin与配置热重载

This commit is contained in:
cxykevin 2024-08-25 20:51:14 +08:00
parent 5ff223f655
commit 987cd9ec9e
4 changed files with 85 additions and 20 deletions

View File

@ -2,13 +2,20 @@ from fastapi import FastAPI, Response, Cookie
from datetime import datetime
import aiohttp
import json
from . import db
from server import db
from typing import Annotated
from .cfg import config
from server import cfg
FL_SERVER = config["flarum"]["fl_server"]
FL_APIKEY = config["flarum"]["fl_apikey"]
FL_SERVER = cfg.config["flarum"]["fl_server"]
FL_APIKEY = cfg.config["flarum"]["fl_apikey"]
async def reload():
global FL_SERVER
global FL_APIKEY
FL_SERVER = cfg.config["flarum"]["fl_server"]
FL_APIKEY = cfg.config["flarum"]["fl_apikey"]
def main(app: FastAPI, ROOT: str, apikeys: dict):

View File

@ -2,3 +2,9 @@ import tomllib
with open("config.toml", "rb") as f:
config = tomllib.load(f)
def reload():
global config
with open("config.toml", "rb") as f:
config = tomllib.load(f)

View File

@ -1,14 +1,21 @@
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
from email.header import Header
import aiosmtplib
from .cfg import config
from . import cfg
SMTP_SRV = config["email"]["smtp_srv"]
PORT = config["email"]["port"]
ADDR = config["email"]["addr"]
PASSWD = config["email"]["passwd"]
def load_cfg():
global SMTP_SRV
global PORT
global ADDR
global PASSWD
SMTP_SRV = cfg.config["email"]["smtp_srv"]
PORT = cfg.config["email"]["port"]
ADDR = cfg.config["email"]["addr"]
PASSWD = cfg.config["email"]["passwd"]
load_cfg()
async def sendemail(to_addr, links):

View File

@ -6,24 +6,39 @@ from datetime import timedelta, datetime
from contextlib import asynccontextmanager
from . import db
from . import email as email_sys
from . import reg
from . import cfg
import hashlib
import uuid
from typing import Annotated
import re
import asyncio
import uvicorn
from .cfg import config
from . import cfg
import pygtrie
import os
import sys
import importlib
ALGORITHM = config["common"]["algorithm"]
ACCESS_TOKEN_EXPIRE_MINUTES = config["common"]["access_token_expire_minutes"]
ACCESS_EMAIL_EXPIRE_MINUTES = config["common"]["access_email_expire_minutes"]
ROOT = config["common"]["root"]
CLEAN_TIMEOUT = config["common"]["clean_timeout"]
MANAGE_KEY = config["common"]["manage_key"]
REDIRECT_URL_WHITELIST = config["common"]["redirect_url_whitelist"]
def load_cfg():
global ALGORITHM
global ACCESS_TOKEN_EXPIRE_MINUTES
global ACCESS_EMAIL_EXPIRE_MINUTES
global ROOT
global CLEAN_TIMEOUT
global MANAGE_KEY
global REDIRECT_URL_WHITELIST
ALGORITHM = cfg.config["common"]["algorithm"]
ACCESS_TOKEN_EXPIRE_MINUTES = cfg.config["common"]["access_token_expire_minutes"]
ACCESS_EMAIL_EXPIRE_MINUTES = cfg.config["common"]["access_email_expire_minutes"]
ROOT = cfg.config["common"]["root"]
CLEAN_TIMEOUT = cfg.config["common"]["clean_timeout"]
MANAGE_KEY = cfg.config["common"]["manage_key"]
REDIRECT_URL_WHITELIST = cfg.config["common"]["redirect_url_whitelist"]
load_cfg()
tokens = pygtrie.StringTrie()
apikeys = pygtrie.StringTrie()
@ -42,6 +57,7 @@ def clean_uuid(uuid: str):
async def clean_sys():
while 1:
await asyncio.sleep(CLEAN_TIMEOUT)
sys.stderr.write("==> clean\n")
for k, v in tokens.items():
if (v[1] < datetime.now()):
del tokens[k]
@ -279,7 +295,36 @@ async def init(key: str):
return 1
await db.create_db()
return 0
reg.main(app, ROOT, apikeys)
plugins = []
async def reload_cfg():
global plugins
cfg.reload()
load_cfg()
email_sys.load_cfg()
for i in plugins:
await i.reload()
@app.get("/manager/reload")
async def reload(key: str):
sys.stderr.write("==> reload config\n")
if (key != MANAGE_KEY):
return 1
await reload_cfg()
return 0
for i in os.listdir("plugin"):
if (len(i.split(".")) != 2 or i.split(".")[1] != 'py'):
continue
if (i.split(".")[0] not in cfg.config):
sys.stderr.write("--> disable "+i.split(".")[0]+"\n")
continue
sys.stderr.write("==> load "+i.split(".")[0]+"\n")
plugins.append(importlib.import_module("plugin."+i.split(".")[0]))
plugins[-1].main(app, ROOT, apikeys)
def run():