2024-02-06 13:21:13 +08:00
|
|
|
from flask_login import current_user
|
|
|
|
from flask_restful import Resource, marshal_with, reqparse
|
|
|
|
from werkzeug.exceptions import Forbidden, NotFound
|
|
|
|
|
2024-02-01 18:11:57 +08:00
|
|
|
from constants.languages import supported_language
|
2023-05-15 08:51:32 +08:00
|
|
|
from controllers.console import api
|
2024-04-08 18:51:46 +08:00
|
|
|
from controllers.console.app.wraps import get_app_model
|
2023-05-15 08:51:32 +08:00
|
|
|
from controllers.console.setup import setup_required
|
|
|
|
from controllers.console.wraps import account_initialization_required
|
2024-01-12 12:34:01 +08:00
|
|
|
from extensions.ext_database import db
|
2023-09-27 16:06:32 +08:00
|
|
|
from fields.app_fields import app_site_fields
|
2024-01-12 12:34:01 +08:00
|
|
|
from libs.login import login_required
|
2023-05-15 08:51:32 +08:00
|
|
|
from models.model import Site
|
|
|
|
|
|
|
|
|
|
|
|
def parse_app_site_args():
|
|
|
|
parser = reqparse.RequestParser()
|
|
|
|
parser.add_argument('title', type=str, required=False, location='json')
|
|
|
|
parser.add_argument('icon', type=str, required=False, location='json')
|
|
|
|
parser.add_argument('icon_background', type=str, required=False, location='json')
|
|
|
|
parser.add_argument('description', type=str, required=False, location='json')
|
|
|
|
parser.add_argument('default_language', type=supported_language, required=False, location='json')
|
2024-06-26 17:51:00 +08:00
|
|
|
parser.add_argument('chat_color_theme', type=str, required=False, location='json')
|
|
|
|
parser.add_argument('chat_color_theme_inverted', type=bool, required=False, location='json')
|
2023-05-15 08:51:32 +08:00
|
|
|
parser.add_argument('customize_domain', type=str, required=False, location='json')
|
|
|
|
parser.add_argument('copyright', type=str, required=False, location='json')
|
|
|
|
parser.add_argument('privacy_policy', type=str, required=False, location='json')
|
2024-05-18 10:52:48 +08:00
|
|
|
parser.add_argument('custom_disclaimer', type=str, required=False, location='json')
|
2023-05-15 08:51:32 +08:00
|
|
|
parser.add_argument('customize_token_strategy', type=str, choices=['must', 'allow', 'not_allow'],
|
|
|
|
required=False,
|
|
|
|
location='json')
|
|
|
|
parser.add_argument('prompt_public', type=bool, required=False, location='json')
|
2024-06-21 12:51:10 +08:00
|
|
|
parser.add_argument('show_workflow_steps', type=bool, required=False, location='json')
|
2023-05-15 08:51:32 +08:00
|
|
|
return parser.parse_args()
|
|
|
|
|
|
|
|
|
|
|
|
class AppSite(Resource):
|
|
|
|
@setup_required
|
|
|
|
@login_required
|
|
|
|
@account_initialization_required
|
2024-04-08 18:51:46 +08:00
|
|
|
@get_app_model
|
2023-05-15 08:51:32 +08:00
|
|
|
@marshal_with(app_site_fields)
|
2024-04-08 18:51:46 +08:00
|
|
|
def post(self, app_model):
|
2023-05-15 08:51:32 +08:00
|
|
|
args = parse_app_site_args()
|
|
|
|
|
2024-06-14 20:34:25 +08:00
|
|
|
# The role of the current user in the ta table must be editor, admin, or owner
|
|
|
|
if not current_user.is_editor:
|
2023-05-15 08:51:32 +08:00
|
|
|
raise Forbidden()
|
|
|
|
|
|
|
|
site = db.session.query(Site). \
|
|
|
|
filter(Site.app_id == app_model.id). \
|
|
|
|
one_or_404()
|
|
|
|
|
|
|
|
for attr_name in [
|
|
|
|
'title',
|
|
|
|
'icon',
|
|
|
|
'icon_background',
|
|
|
|
'description',
|
|
|
|
'default_language',
|
2024-06-26 17:51:00 +08:00
|
|
|
'chat_color_theme',
|
|
|
|
'chat_color_theme_inverted',
|
2023-05-15 08:51:32 +08:00
|
|
|
'customize_domain',
|
|
|
|
'copyright',
|
|
|
|
'privacy_policy',
|
2024-05-18 10:52:48 +08:00
|
|
|
'custom_disclaimer',
|
2023-05-15 08:51:32 +08:00
|
|
|
'customize_token_strategy',
|
2024-06-21 12:51:10 +08:00
|
|
|
'prompt_public',
|
|
|
|
'show_workflow_steps'
|
2023-05-15 08:51:32 +08:00
|
|
|
]:
|
|
|
|
value = args.get(attr_name)
|
|
|
|
if value is not None:
|
|
|
|
setattr(site, attr_name, value)
|
|
|
|
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
return site
|
|
|
|
|
|
|
|
|
|
|
|
class AppSiteAccessTokenReset(Resource):
|
|
|
|
|
|
|
|
@setup_required
|
|
|
|
@login_required
|
|
|
|
@account_initialization_required
|
2024-04-08 18:51:46 +08:00
|
|
|
@get_app_model
|
2023-05-15 08:51:32 +08:00
|
|
|
@marshal_with(app_site_fields)
|
2024-04-08 18:51:46 +08:00
|
|
|
def post(self, app_model):
|
2023-05-15 08:51:32 +08:00
|
|
|
# The role of the current user in the ta table must be admin or owner
|
2024-01-26 12:47:42 +08:00
|
|
|
if not current_user.is_admin_or_owner:
|
2023-05-15 08:51:32 +08:00
|
|
|
raise Forbidden()
|
|
|
|
|
|
|
|
site = db.session.query(Site).filter(Site.app_id == app_model.id).first()
|
|
|
|
|
|
|
|
if not site:
|
|
|
|
raise NotFound
|
|
|
|
|
|
|
|
site.code = Site.generate_code(16)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
return site
|
|
|
|
|
|
|
|
|
|
|
|
api.add_resource(AppSite, '/apps/<uuid:app_id>/site')
|
|
|
|
api.add_resource(AppSiteAccessTokenReset, '/apps/<uuid:app_id>/site/access-token-reset')
|