Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. from flask_restx import fields, marshal_with
  2. from werkzeug.exceptions import Forbidden
  3. from configs import dify_config
  4. from controllers.web import web_ns
  5. from controllers.web.wraps import WebApiResource
  6. from extensions.ext_database import db
  7. from libs.helper import AppIconUrlField
  8. from models.account import TenantStatus
  9. from models.model import Site
  10. from services.feature_service import FeatureService
  11. @web_ns.route("/site")
  12. class AppSiteApi(WebApiResource):
  13. """Resource for app sites."""
  14. model_config_fields = {
  15. "opening_statement": fields.String,
  16. "suggested_questions": fields.Raw(attribute="suggested_questions_list"),
  17. "suggested_questions_after_answer": fields.Raw(attribute="suggested_questions_after_answer_dict"),
  18. "more_like_this": fields.Raw(attribute="more_like_this_dict"),
  19. "model": fields.Raw(attribute="model_dict"),
  20. "user_input_form": fields.Raw(attribute="user_input_form_list"),
  21. "pre_prompt": fields.String,
  22. }
  23. site_fields = {
  24. "title": fields.String,
  25. "chat_color_theme": fields.String,
  26. "chat_color_theme_inverted": fields.Boolean,
  27. "icon_type": fields.String,
  28. "icon": fields.String,
  29. "icon_background": fields.String,
  30. "icon_url": AppIconUrlField,
  31. "description": fields.String,
  32. "copyright": fields.String,
  33. "privacy_policy": fields.String,
  34. "custom_disclaimer": fields.String,
  35. "default_language": fields.String,
  36. "prompt_public": fields.Boolean,
  37. "show_workflow_steps": fields.Boolean,
  38. "use_icon_as_answer_icon": fields.Boolean,
  39. }
  40. app_fields = {
  41. "app_id": fields.String,
  42. "end_user_id": fields.String,
  43. "enable_site": fields.Boolean,
  44. "site": fields.Nested(site_fields),
  45. "model_config": fields.Nested(model_config_fields, allow_null=True),
  46. "plan": fields.String,
  47. "can_replace_logo": fields.Boolean,
  48. "custom_config": fields.Raw(attribute="custom_config"),
  49. }
  50. @web_ns.doc("Get App Site Info")
  51. @web_ns.doc(description="Retrieve app site information and configuration.")
  52. @web_ns.doc(
  53. responses={
  54. 200: "Success",
  55. 400: "Bad Request",
  56. 401: "Unauthorized",
  57. 403: "Forbidden",
  58. 404: "App Not Found",
  59. 500: "Internal Server Error",
  60. }
  61. )
  62. @marshal_with(app_fields)
  63. def get(self, app_model, end_user):
  64. """Retrieve app site info."""
  65. # get site
  66. site = db.session.query(Site).where(Site.app_id == app_model.id).first()
  67. if not site:
  68. raise Forbidden()
  69. if app_model.tenant.status == TenantStatus.ARCHIVE:
  70. raise Forbidden()
  71. can_replace_logo = FeatureService.get_features(app_model.tenant_id).can_replace_logo
  72. return AppSiteInfo(app_model.tenant, app_model, site, end_user.id, can_replace_logo)
  73. class AppSiteInfo:
  74. """Class to store site information."""
  75. def __init__(self, tenant, app, site, end_user, can_replace_logo):
  76. """Initialize AppSiteInfo instance."""
  77. self.app_id = app.id
  78. self.end_user_id = end_user
  79. self.enable_site = app.enable_site
  80. self.site = site
  81. self.model_config = None
  82. self.plan = tenant.plan
  83. self.can_replace_logo = can_replace_logo
  84. if can_replace_logo:
  85. base_url = dify_config.FILES_URL
  86. remove_webapp_brand = tenant.custom_config_dict.get("remove_webapp_brand", False)
  87. replace_webapp_logo = (
  88. f"{base_url}/files/workspaces/{tenant.id}/webapp-logo"
  89. if tenant.custom_config_dict.get("replace_webapp_logo")
  90. else None
  91. )
  92. self.custom_config = {
  93. "remove_webapp_brand": remove_webapp_brand,
  94. "replace_webapp_logo": replace_webapp_logo,
  95. }