From 78c2ee5c5a126916c515eae3c8333b39a43a00af Mon Sep 17 00:00:00 2001 From: James Bhattarai Date: Tue, 31 Mar 2026 13:45:07 +0545 Subject: [PATCH] Feat:Added Update Client --- gatehouse_app/api/v1/organizations/clients.py | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/gatehouse_app/api/v1/organizations/clients.py b/gatehouse_app/api/v1/organizations/clients.py index 553837a..3817023 100644 --- a/gatehouse_app/api/v1/organizations/clients.py +++ b/gatehouse_app/api/v1/organizations/clients.py @@ -95,6 +95,53 @@ def create_org_client(org_id): ) +@api_v1_bp.route("/organizations//clients/", methods=["PATCH"]) +@login_required +@require_admin +def update_org_client(org_id, client_id): + from gatehouse_app.models import OIDCClient + + client = OIDCClient.query.filter_by(id=client_id, organization_id=org_id).first() + if not client: + return api_response(success=False, message="Client not found", status=404) + + data = request.get_json() or {} + + if "name" in data: + name = (data["name"] or "").strip() + if not name: + return api_response(success=False, message="Client name cannot be empty", status=400, error_type="VALIDATION_ERROR") + client.name = name + + if "redirect_uris" in data: + redirect_uris_raw = data["redirect_uris"] + if isinstance(redirect_uris_raw, str): + uris = [u.strip() for u in redirect_uris_raw.replace(",", "\n").splitlines() if u.strip()] + else: + uris = [u.strip() for u in redirect_uris_raw if isinstance(u, str) and u.strip()] + if not uris: + return api_response(success=False, message="At least one redirect URI is required", status=400, error_type="VALIDATION_ERROR") + client.redirect_uris = uris + + db.session.commit() + + return api_response( + data={ + "client": { + "id": client.id, + "name": client.name, + "client_id": client.client_id, + "redirect_uris": client.redirect_uris, + "scopes": client.scopes, + "grant_types": client.grant_types, + "is_active": client.is_active, + "created_at": client.created_at.isoformat() + "Z", + } + }, + message="Client updated successfully", + ) + + @api_v1_bp.route("/organizations//clients/", methods=["DELETE"]) @login_required @require_admin