42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
from flask_restx import Resource
|
|
from werkzeug.exceptions import Forbidden
|
|
|
|
from controllers.common.fields import build_site_model
|
|
from controllers.service_api import service_api_ns
|
|
from controllers.service_api.wraps import validate_app_token
|
|
from extensions.ext_database import db
|
|
from models.account import TenantStatus
|
|
from models.model import App, Site
|
|
|
|
|
|
@service_api_ns.route("/site")
|
|
class AppSiteApi(Resource):
|
|
"""Resource for app sites."""
|
|
|
|
@service_api_ns.doc("get_app_site")
|
|
@service_api_ns.doc(description="Get application site configuration")
|
|
@service_api_ns.doc(
|
|
responses={
|
|
200: "Site configuration retrieved successfully",
|
|
401: "Unauthorized - invalid API token",
|
|
403: "Forbidden - site not found or tenant archived",
|
|
}
|
|
)
|
|
@validate_app_token
|
|
@service_api_ns.marshal_with(build_site_model(service_api_ns))
|
|
def get(self, app_model: App):
|
|
"""Retrieve app site info.
|
|
|
|
Returns the site configuration for the application including theme, icons, and text.
|
|
"""
|
|
site = db.session.query(Site).where(Site.app_id == app_model.id).first()
|
|
|
|
if not site:
|
|
raise Forbidden()
|
|
|
|
assert app_model.tenant
|
|
if app_model.tenant.status == TenantStatus.ARCHIVE:
|
|
raise Forbidden()
|
|
|
|
return site
|