2023-05-15 08:51:32 +08:00
|
|
|
# -*- coding:utf-8 -*-
|
2023-12-13 20:21:39 +08:00
|
|
|
import os
|
|
|
|
|
2023-05-15 08:51:32 +08:00
|
|
|
from flask_restful import fields, marshal_with
|
2023-12-18 16:25:37 +08:00
|
|
|
from flask import current_app
|
2023-05-15 08:51:32 +08:00
|
|
|
from werkzeug.exceptions import Forbidden
|
|
|
|
|
|
|
|
from controllers.web import api
|
|
|
|
from controllers.web.wraps import WebApiResource
|
|
|
|
from extensions.ext_database import db
|
|
|
|
from models.model import Site
|
2023-12-20 15:37:57 +08:00
|
|
|
from services.feature_service import FeatureService
|
2023-05-15 08:51:32 +08:00
|
|
|
|
|
|
|
|
|
|
|
class AppSiteApi(WebApiResource):
|
|
|
|
"""Resource for app sites."""
|
|
|
|
|
|
|
|
model_config_fields = {
|
|
|
|
'opening_statement': fields.String,
|
|
|
|
'suggested_questions': fields.Raw(attribute='suggested_questions_list'),
|
|
|
|
'suggested_questions_after_answer': fields.Raw(attribute='suggested_questions_after_answer_dict'),
|
|
|
|
'more_like_this': fields.Raw(attribute='more_like_this_dict'),
|
|
|
|
'model': fields.Raw(attribute='model_dict'),
|
|
|
|
'user_input_form': fields.Raw(attribute='user_input_form_list'),
|
|
|
|
'pre_prompt': fields.String,
|
|
|
|
}
|
|
|
|
|
|
|
|
site_fields = {
|
|
|
|
'title': fields.String,
|
|
|
|
'icon': fields.String,
|
|
|
|
'icon_background': fields.String,
|
|
|
|
'description': fields.String,
|
|
|
|
'copyright': fields.String,
|
|
|
|
'privacy_policy': fields.String,
|
|
|
|
'default_language': fields.String,
|
|
|
|
'prompt_public': fields.Boolean
|
|
|
|
}
|
|
|
|
|
|
|
|
app_fields = {
|
|
|
|
'app_id': fields.String,
|
|
|
|
'end_user_id': fields.String,
|
|
|
|
'enable_site': fields.Boolean,
|
|
|
|
'site': fields.Nested(site_fields),
|
|
|
|
'model_config': fields.Nested(model_config_fields, allow_null=True),
|
|
|
|
'plan': fields.String,
|
2023-12-13 20:21:39 +08:00
|
|
|
'can_replace_logo': fields.Boolean,
|
2023-12-18 16:25:37 +08:00
|
|
|
'custom_config': fields.Raw(attribute='custom_config'),
|
2023-05-15 08:51:32 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
@marshal_with(app_fields)
|
|
|
|
def get(self, app_model, end_user):
|
|
|
|
"""Retrieve app site info."""
|
|
|
|
# get site
|
|
|
|
site = db.session.query(Site).filter(Site.app_id == app_model.id).first()
|
|
|
|
|
|
|
|
if not site:
|
|
|
|
raise Forbidden()
|
|
|
|
|
2023-12-20 15:37:57 +08:00
|
|
|
can_replace_logo = FeatureService.get_features(app_model.tenant_id).can_replace_logo
|
2023-12-13 20:21:39 +08:00
|
|
|
|
|
|
|
return AppSiteInfo(app_model.tenant, app_model, site, end_user.id, can_replace_logo)
|
2023-05-15 08:51:32 +08:00
|
|
|
|
|
|
|
|
|
|
|
api.add_resource(AppSiteApi, '/site')
|
|
|
|
|
|
|
|
|
|
|
|
class AppSiteInfo:
|
|
|
|
"""Class to store site information."""
|
|
|
|
|
2023-12-13 20:21:39 +08:00
|
|
|
def __init__(self, tenant, app, site, end_user, can_replace_logo):
|
2023-05-15 08:51:32 +08:00
|
|
|
"""Initialize AppSiteInfo instance."""
|
|
|
|
self.app_id = app.id
|
|
|
|
self.end_user_id = end_user
|
|
|
|
self.enable_site = app.enable_site
|
|
|
|
self.site = site
|
|
|
|
self.model_config = None
|
|
|
|
self.plan = tenant.plan
|
2023-12-13 20:21:39 +08:00
|
|
|
self.can_replace_logo = can_replace_logo
|
2023-05-15 08:51:32 +08:00
|
|
|
|
2023-12-18 16:25:37 +08:00
|
|
|
if can_replace_logo:
|
|
|
|
base_url = current_app.config.get('FILES_URL')
|
|
|
|
remove_webapp_brand = tenant.custom_config_dict.get('remove_webapp_brand', False)
|
2023-12-19 11:45:16 +08:00
|
|
|
replace_webapp_logo = f'{base_url}/files/workspaces/{tenant.id}/webapp-logo' if tenant.custom_config_dict.get('replace_webapp_logo') else None
|
2023-12-18 16:25:37 +08:00
|
|
|
self.custom_config = {
|
|
|
|
'remove_webapp_brand': remove_webapp_brand,
|
|
|
|
'replace_webapp_logo': replace_webapp_logo,
|
|
|
|
}
|
|
|
|
|
2023-05-15 08:51:32 +08:00
|
|
|
if app.enable_site and site.prompt_public:
|
|
|
|
app_model_config = app.app_model_config
|
|
|
|
self.model_config = app_model_config
|