Add Coolify domain sync for system admin
This commit is contained in:
@@ -10,6 +10,7 @@ from app.core.security.session_auth import get_current_user
|
||||
from app.core.templating import templates
|
||||
from app.modules.core.rbac.deps import get_user_permissions, get_user_roles
|
||||
from app.modules.domain_management.models import DomainMapping
|
||||
from app.modules.domain_management.coolify_client import get_coolify_application_domains, sync_domain_to_coolify
|
||||
from app.modules.domain_management.services import (
|
||||
DomainMappingPayload,
|
||||
create_domain_mapping,
|
||||
@@ -38,7 +39,7 @@ router = APIRouter(prefix="/domains", tags=["domain-management-ui"])
|
||||
|
||||
def _is_domain_admin(db, user) -> bool:
|
||||
roles = set(get_user_roles(db, user.id))
|
||||
return bool(roles.intersection({"System Admin", "Firm Admin"}))
|
||||
return "System Admin" in roles
|
||||
|
||||
|
||||
def _base_ctx(request: Request, db, user, **ctx):
|
||||
@@ -535,6 +536,24 @@ def ssl_check_all(request: Request, csrf_token: str = Form(...)):
|
||||
db.close()
|
||||
|
||||
|
||||
@router.get("/coolify/status")
|
||||
def coolify_status_page(request: Request):
|
||||
db = CommonSessionLocal()
|
||||
try:
|
||||
user, response = _require_user(request, db)
|
||||
if response:
|
||||
return response
|
||||
result = get_coolify_application_domains()
|
||||
domains = list_ssl_domains(db)
|
||||
return templates.TemplateResponse(
|
||||
"modules/domain_management/templates/domain_management/ssl.html",
|
||||
_base_ctx(request, db, user, title="Coolify Domain Sync", domains=domains, coolify_result=result),
|
||||
status_code=200 if result.ok else 400,
|
||||
)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
@router.get("/{mapping_id}/ssl")
|
||||
def ssl_detail(request: Request, mapping_id: int):
|
||||
db = CommonSessionLocal()
|
||||
@@ -554,6 +573,49 @@ def ssl_detail(request: Request, mapping_id: int):
|
||||
db.close()
|
||||
|
||||
|
||||
@router.post("/{mapping_id}/coolify/sync")
|
||||
def coolify_sync_one(request: Request, mapping_id: int, csrf_token: str = Form(...)):
|
||||
validate_csrf(request, csrf_token)
|
||||
db = CommonSessionLocal()
|
||||
try:
|
||||
user, response = _require_user(request, db)
|
||||
if response:
|
||||
return response
|
||||
mapping = db.execute(select(DomainMapping).where(DomainMapping.id == mapping_id)).scalar_one_or_none()
|
||||
if not mapping:
|
||||
return RedirectResponse(url="/domains", status_code=303)
|
||||
result = sync_domain_to_coolify(db, mapping, user_id=user.id)
|
||||
db.refresh(mapping)
|
||||
return templates.TemplateResponse(
|
||||
"modules/domain_management/templates/domain_management/detail.html",
|
||||
_base_ctx(request, db, user, title=mapping.domain_name, mapping=mapping, coolify_result=result),
|
||||
status_code=200 if result.ok else 400,
|
||||
)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
@router.post("/{mapping_id}/coolify/check")
|
||||
def coolify_check_one(request: Request, mapping_id: int, csrf_token: str = Form(...)):
|
||||
validate_csrf(request, csrf_token)
|
||||
db = CommonSessionLocal()
|
||||
try:
|
||||
user, response = _require_user(request, db)
|
||||
if response:
|
||||
return response
|
||||
mapping = db.execute(select(DomainMapping).where(DomainMapping.id == mapping_id)).scalar_one_or_none()
|
||||
if not mapping:
|
||||
return RedirectResponse(url="/domains", status_code=303)
|
||||
result = get_coolify_application_domains()
|
||||
return templates.TemplateResponse(
|
||||
"modules/domain_management/templates/domain_management/detail.html",
|
||||
_base_ctx(request, db, user, title=mapping.domain_name, mapping=mapping, coolify_result=result),
|
||||
status_code=200 if result.ok else 400,
|
||||
)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
@router.post("/{mapping_id}/ssl/check")
|
||||
def ssl_check_one(request: Request, mapping_id: int, csrf_token: str = Form(...)):
|
||||
validate_csrf(request, csrf_token)
|
||||
|
||||
Reference in New Issue
Block a user