| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | 
                        - from flask_restx import fields, marshal_with
 - from werkzeug.exceptions import Forbidden
 - 
 - from configs import dify_config
 - from controllers.web import api
 - from controllers.web.wraps import WebApiResource
 - from extensions.ext_database import db
 - from libs.helper import AppIconUrlField
 - from models.account import TenantStatus
 - from models.model import Site
 - from services.feature_service import FeatureService
 - 
 - 
 - 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,
 -         "chat_color_theme": fields.String,
 -         "chat_color_theme_inverted": fields.Boolean,
 -         "icon_type": fields.String,
 -         "icon": fields.String,
 -         "icon_background": fields.String,
 -         "icon_url": AppIconUrlField,
 -         "description": fields.String,
 -         "copyright": fields.String,
 -         "privacy_policy": fields.String,
 -         "custom_disclaimer": fields.String,
 -         "default_language": fields.String,
 -         "prompt_public": fields.Boolean,
 -         "show_workflow_steps": fields.Boolean,
 -         "use_icon_as_answer_icon": 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,
 -         "can_replace_logo": fields.Boolean,
 -         "custom_config": fields.Raw(attribute="custom_config"),
 -     }
 - 
 -     @api.doc("Get App Site Info")
 -     @api.doc(description="Retrieve app site information and configuration.")
 -     @api.doc(
 -         responses={
 -             200: "Success",
 -             400: "Bad Request",
 -             401: "Unauthorized",
 -             403: "Forbidden",
 -             404: "App Not Found",
 -             500: "Internal Server Error",
 -         }
 -     )
 -     @marshal_with(app_fields)
 -     def get(self, app_model, end_user):
 -         """Retrieve app site info."""
 -         # get site
 -         site = db.session.query(Site).where(Site.app_id == app_model.id).first()
 - 
 -         if not site:
 -             raise Forbidden()
 - 
 -         if app_model.tenant.status == TenantStatus.ARCHIVE:
 -             raise Forbidden()
 - 
 -         can_replace_logo = FeatureService.get_features(app_model.tenant_id).can_replace_logo
 - 
 -         return AppSiteInfo(app_model.tenant, app_model, site, end_user.id, can_replace_logo)
 - 
 - 
 - api.add_resource(AppSiteApi, "/site")
 - 
 - 
 - class AppSiteInfo:
 -     """Class to store site information."""
 - 
 -     def __init__(self, tenant, app, site, end_user, can_replace_logo):
 -         """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
 -         self.can_replace_logo = can_replace_logo
 - 
 -         if can_replace_logo:
 -             base_url = dify_config.FILES_URL
 -             remove_webapp_brand = tenant.custom_config_dict.get("remove_webapp_brand", False)
 -             replace_webapp_logo = (
 -                 f"{base_url}/files/workspaces/{tenant.id}/webapp-logo"
 -                 if tenant.custom_config_dict.get("replace_webapp_logo")
 -                 else None
 -             )
 -             self.custom_config = {
 -                 "remove_webapp_brand": remove_webapp_brand,
 -                 "replace_webapp_logo": replace_webapp_logo,
 -             }
 
 
  |