mirror of
				https://github.com/langgenius/dify.git
				synced 2025-11-04 04:43:09 +00:00 
			
		
		
		
	Co-authored-by: Joel <iamjoel007@gmail.com> Co-authored-by: Yeuoly <admin@srmxy.cn> Co-authored-by: JzoNg <jzongcode@gmail.com> Co-authored-by: StyleZhang <jasonapring2015@outlook.com> Co-authored-by: jyong <jyong@dify.ai> Co-authored-by: nite-knite <nkCoding@gmail.com> Co-authored-by: jyong <718720800@qq.com>
		
			
				
	
	
		
			86 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
 | 
						|
from flask import current_app
 | 
						|
from flask_restful import fields, marshal_with
 | 
						|
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
 | 
						|
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,
 | 
						|
        '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,
 | 
						|
        'can_replace_logo': fields.Boolean,
 | 
						|
        'custom_config': fields.Raw(attribute='custom_config'),
 | 
						|
    }
 | 
						|
 | 
						|
    @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()
 | 
						|
 | 
						|
        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 = current_app.config.get('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,
 | 
						|
            }
 |