From 0fb761f284456fbefacd2388e1566c952b4d841e Mon Sep 17 00:00:00 2001 From: kyy Date: Wed, 29 Apr 2026 15:14:50 +0900 Subject: [PATCH] =?UTF-8?q?PKCE=20=EC=95=B1=20=ED=81=B4=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EC=96=B8=ED=8A=B8=20=EC=8B=9C=ED=81=AC=EB=A6=BF=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20=EC=95=88=EB=82=B4?= =?UTF-8?q?=20=EB=AC=B8=EA=B5=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../features/clients/ClientDetailsPage.tsx | 126 ++++++++++-------- devfront/src/locales/en.toml | 1 + devfront/src/locales/ko.toml | 1 + devfront/src/locales/template.toml | 1 + 4 files changed, 74 insertions(+), 55 deletions(-) diff --git a/devfront/src/features/clients/ClientDetailsPage.tsx b/devfront/src/features/clients/ClientDetailsPage.tsx index 82e43d43..7a502957 100644 --- a/devfront/src/features/clients/ClientDetailsPage.tsx +++ b/devfront/src/features/clients/ClientDetailsPage.tsx @@ -213,11 +213,15 @@ function ClientDetailsPage() { }, ]; - // Client Secret from API + const hasClientSecret = client.type === "private"; const secretPlaceholder = "SECRET_NOT_AVAILABLE"; - const clientSecret = client?.clientSecret || secretPlaceholder; + const clientSecret = hasClientSecret + ? client?.clientSecret || secretPlaceholder + : t("ui.common.na", "N/A"); const displaySecret = - clientSecret === secretPlaceholder + !hasClientSecret + ? t("msg.dev.clients.details.secret_not_applicable", "PKCE 앱에는 Client Secret이 없습니다.") + : clientSecret === secretPlaceholder ? t("msg.dev.clients.details.secret_unavailable", "SECRET_NOT_AVAILABLE") : clientSecret; @@ -327,61 +331,73 @@ function ClientDetailsPage() { {showSecret ? displaySecret : "••••••••••••••••"}

- + + + toast( + t( + "msg.dev.clients.details.copy_client_secret", + "Client Secret이 복사되었습니다.", + ), ) - : t( - "ui.dev.clients.details.secret.show", - "비밀키 보기", - ) - } - > - {showSecret ? ( - - ) : ( - - )} - - - - toast( - t( - "msg.dev.clients.details.copy_client_secret", - "Client Secret이 복사되었습니다.", - ), - ) - } - /> + } + /> + + ) : null}
+ {!hasClientSecret ? ( +

+ {t( + "msg.dev.clients.details.secret_not_applicable", + "PKCE 앱에는 Client Secret이 없습니다.", + )} +

+ ) : null} diff --git a/devfront/src/locales/en.toml b/devfront/src/locales/en.toml index 17077a4a..edfdf75a 100644 --- a/devfront/src/locales/en.toml +++ b/devfront/src/locales/en.toml @@ -362,6 +362,7 @@ create_forbidden = "You do not have permission to create this RP. Ask an adminis save_error = "Save Error" save_forbidden = "You do not have permission to edit this RP. Ask an administrator to grant RP General Settings or RP Admin relationship." secret_rotated = "Secret Rotated" +secret_not_applicable = "PKCE apps do not have a client secret." secret_unavailable = "SECRET_NOT_AVAILABLE" subtitle = "Manage OIDC credentials and endpoints." diff --git a/devfront/src/locales/ko.toml b/devfront/src/locales/ko.toml index b46e0428..fa373fed 100644 --- a/devfront/src/locales/ko.toml +++ b/devfront/src/locales/ko.toml @@ -362,6 +362,7 @@ create_forbidden = "이 RP를 생성할 권한이 없습니다.\n관리자에게 save_error = "저장 실패: {{error}}" save_forbidden = "이 RP 설정을 수정할 권한이 없습니다.\n관리자에게 RP 일반 설정 또는 RP 관리자 관계 부여를 요청해 주세요." secret_rotated = "Client Secret이 재발급되었습니다." +secret_not_applicable = "PKCE 앱에는 Client Secret이 없습니다." secret_unavailable = "SECRET_NOT_AVAILABLE" subtitle = "OIDC 자격 증명과 엔드포인트를 관리합니다." diff --git a/devfront/src/locales/template.toml b/devfront/src/locales/template.toml index 91f3e09d..c8eaae93 100644 --- a/devfront/src/locales/template.toml +++ b/devfront/src/locales/template.toml @@ -408,6 +408,7 @@ create_forbidden = "" save_error = "" save_forbidden = "" secret_rotated = "" +secret_not_applicable = "" secret_unavailable = "" subtitle = ""