feat: save UI config changes to config.json

This commit is contained in:
Jun Siang Cheah
2024-05-10 13:51:50 +08:00
parent 9a95767062
commit 058eb76568
11 changed files with 611 additions and 336 deletions
+21 -17
View File
@@ -33,7 +33,7 @@ from utils.utils import (
from utils.misc import parse_duration, validate_email_format
from utils.webhook import post_webhook
from constants import ERROR_MESSAGES, WEBHOOK_MESSAGES
from config import WEBUI_AUTH, WEBUI_AUTH_TRUSTED_EMAIL_HEADER
from config import WEBUI_AUTH, WEBUI_AUTH_TRUSTED_EMAIL_HEADER, config_get, config_set
router = APIRouter()
@@ -140,7 +140,7 @@ async def signin(request: Request, form_data: SigninForm):
if user:
token = create_token(
data={"id": user.id},
expires_delta=parse_duration(request.app.state.JWT_EXPIRES_IN),
expires_delta=parse_duration(config_get(request.app.state.JWT_EXPIRES_IN)),
)
return {
@@ -163,7 +163,7 @@ async def signin(request: Request, form_data: SigninForm):
@router.post("/signup", response_model=SigninResponse)
async def signup(request: Request, form_data: SignupForm):
if not request.app.state.ENABLE_SIGNUP and WEBUI_AUTH:
if not config_get(request.app.state.ENABLE_SIGNUP) and WEBUI_AUTH:
raise HTTPException(
status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.ACCESS_PROHIBITED
)
@@ -180,7 +180,7 @@ async def signup(request: Request, form_data: SignupForm):
role = (
"admin"
if Users.get_num_users() == 0
else request.app.state.DEFAULT_USER_ROLE
else config_get(request.app.state.DEFAULT_USER_ROLE)
)
hashed = get_password_hash(form_data.password)
user = Auths.insert_new_auth(
@@ -194,13 +194,15 @@ async def signup(request: Request, form_data: SignupForm):
if user:
token = create_token(
data={"id": user.id},
expires_delta=parse_duration(request.app.state.JWT_EXPIRES_IN),
expires_delta=parse_duration(
config_get(request.app.state.JWT_EXPIRES_IN)
),
)
# response.set_cookie(key='token', value=token, httponly=True)
if request.app.state.WEBHOOK_URL:
if config_get(request.app.state.WEBHOOK_URL):
post_webhook(
request.app.state.WEBHOOK_URL,
config_get(request.app.state.WEBHOOK_URL),
WEBHOOK_MESSAGES.USER_SIGNUP(user.name),
{
"action": "signup",
@@ -276,13 +278,15 @@ async def add_user(form_data: AddUserForm, user=Depends(get_admin_user)):
@router.get("/signup/enabled", response_model=bool)
async def get_sign_up_status(request: Request, user=Depends(get_admin_user)):
return request.app.state.ENABLE_SIGNUP
return config_get(request.app.state.ENABLE_SIGNUP)
@router.get("/signup/enabled/toggle", response_model=bool)
async def toggle_sign_up(request: Request, user=Depends(get_admin_user)):
request.app.state.ENABLE_SIGNUP = not request.app.state.ENABLE_SIGNUP
return request.app.state.ENABLE_SIGNUP
config_set(
request.app.state.ENABLE_SIGNUP, not config_get(request.app.state.ENABLE_SIGNUP)
)
return config_get(request.app.state.ENABLE_SIGNUP)
############################
@@ -292,7 +296,7 @@ async def toggle_sign_up(request: Request, user=Depends(get_admin_user)):
@router.get("/signup/user/role")
async def get_default_user_role(request: Request, user=Depends(get_admin_user)):
return request.app.state.DEFAULT_USER_ROLE
return config_get(request.app.state.DEFAULT_USER_ROLE)
class UpdateRoleForm(BaseModel):
@@ -304,8 +308,8 @@ async def update_default_user_role(
request: Request, form_data: UpdateRoleForm, user=Depends(get_admin_user)
):
if form_data.role in ["pending", "user", "admin"]:
request.app.state.DEFAULT_USER_ROLE = form_data.role
return request.app.state.DEFAULT_USER_ROLE
config_set(request.app.state.DEFAULT_USER_ROLE, form_data.role)
return config_get(request.app.state.DEFAULT_USER_ROLE)
############################
@@ -315,7 +319,7 @@ async def update_default_user_role(
@router.get("/token/expires")
async def get_token_expires_duration(request: Request, user=Depends(get_admin_user)):
return request.app.state.JWT_EXPIRES_IN
return config_get(request.app.state.JWT_EXPIRES_IN)
class UpdateJWTExpiresDurationForm(BaseModel):
@@ -332,10 +336,10 @@ async def update_token_expires_duration(
# Check if the input string matches the pattern
if re.match(pattern, form_data.duration):
request.app.state.JWT_EXPIRES_IN = form_data.duration
return request.app.state.JWT_EXPIRES_IN
config_set(request.app.state.JWT_EXPIRES_IN, form_data.duration)
return config_get(request.app.state.JWT_EXPIRES_IN)
else:
return request.app.state.JWT_EXPIRES_IN
return config_get(request.app.state.JWT_EXPIRES_IN)
############################