| | from functools import wraps |
| |
|
| | from flask_login import current_user |
| | from flask_restful import Resource |
| | from werkzeug.exceptions import NotFound |
| |
|
| | from controllers.console.wraps import account_initialization_required |
| | from extensions.ext_database import db |
| | from libs.login import login_required |
| | from models import InstalledApp |
| |
|
| |
|
| | def installed_app_required(view=None): |
| | def decorator(view): |
| | @wraps(view) |
| | def decorated(*args, **kwargs): |
| | if not kwargs.get("installed_app_id"): |
| | raise ValueError("missing installed_app_id in path parameters") |
| |
|
| | installed_app_id = kwargs.get("installed_app_id") |
| | installed_app_id = str(installed_app_id) |
| |
|
| | del kwargs["installed_app_id"] |
| |
|
| | installed_app = ( |
| | db.session.query(InstalledApp) |
| | .filter( |
| | InstalledApp.id == str(installed_app_id), InstalledApp.tenant_id == current_user.current_tenant_id |
| | ) |
| | .first() |
| | ) |
| |
|
| | if installed_app is None: |
| | raise NotFound("Installed app not found") |
| |
|
| | if not installed_app.app: |
| | db.session.delete(installed_app) |
| | db.session.commit() |
| |
|
| | raise NotFound("Installed app not found") |
| |
|
| | return view(installed_app, *args, **kwargs) |
| |
|
| | return decorated |
| |
|
| | if view: |
| | return decorator(view) |
| | return decorator |
| |
|
| |
|
| | class InstalledAppResource(Resource): |
| | |
| | method_decorators = [installed_app_required, account_initialization_required, login_required] |
| |
|