Add Coolify domain sync for system admin

This commit is contained in:
A R R R Associates
2026-07-09 10:32:36 +05:30
parent 2ef58ded85
commit 94aa8292e2
6 changed files with 380 additions and 1 deletions
+63 -1
View File
@@ -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)