1
0
forked from baron/baron-sso

PKCE 앱 클라이언트 시크릿 버튼 제거 및 안내 문구 추가

This commit is contained in:
2026-04-29 15:14:50 +09:00
parent 572ac39e60
commit 0fb761f284
4 changed files with 74 additions and 55 deletions

View File

@@ -213,11 +213,15 @@ function ClientDetailsPage() {
}, },
]; ];
// Client Secret from API const hasClientSecret = client.type === "private";
const secretPlaceholder = "SECRET_NOT_AVAILABLE"; const secretPlaceholder = "SECRET_NOT_AVAILABLE";
const clientSecret = client?.clientSecret || secretPlaceholder; const clientSecret = hasClientSecret
? client?.clientSecret || secretPlaceholder
: t("ui.common.na", "N/A");
const displaySecret = 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") ? t("msg.dev.clients.details.secret_unavailable", "SECRET_NOT_AVAILABLE")
: clientSecret; : clientSecret;
@@ -327,61 +331,73 @@ function ClientDetailsPage() {
{showSecret ? displaySecret : "••••••••••••••••"} {showSecret ? displaySecret : "••••••••••••••••"}
</p> </p>
<div className="flex gap-2 shrink-0"> <div className="flex gap-2 shrink-0">
<Button {hasClientSecret ? (
variant="secondary" <>
size="icon" <Button
onClick={() => setShowSecret(!showSecret)} variant="secondary"
aria-label={ size="icon"
showSecret onClick={() => setShowSecret(!showSecret)}
? t( aria-label={
"ui.dev.clients.details.secret.hide", showSecret
"비밀키 숨기기", ? t(
"ui.dev.clients.details.secret.hide",
"비밀키 숨기기",
)
: t(
"ui.dev.clients.details.secret.show",
"비밀키 보기",
)
}
>
{showSecret ? (
<EyeOff className="h-4 w-4" />
) : (
<Eye className="h-4 w-4" />
)}
</Button>
<Button
variant="secondary"
size="icon"
onClick={handleRotateSecret}
disabled={rotateMutation.isPending}
title={t(
"ui.dev.clients.details.secret.rotate",
"비밀키 재발급 (Rotate)",
)}
>
<RefreshCw
className={cn(
"h-4 w-4",
rotateMutation.isPending && "animate-spin",
)}
/>
</Button>
<CopyButton
value={clientSecret}
disabled={
!showSecret && clientSecret === secretPlaceholder
}
onCopy={() =>
toast(
t(
"msg.dev.clients.details.copy_client_secret",
"Client Secret이 복사되었습니다.",
),
) )
: t( }
"ui.dev.clients.details.secret.show", />
"비밀키 보기", </>
) ) : null}
}
>
{showSecret ? (
<EyeOff className="h-4 w-4" />
) : (
<Eye className="h-4 w-4" />
)}
</Button>
<Button
variant="secondary"
size="icon"
onClick={handleRotateSecret}
disabled={rotateMutation.isPending}
title={t(
"ui.dev.clients.details.secret.rotate",
"비밀키 재발급 (Rotate)",
)}
>
<RefreshCw
className={cn(
"h-4 w-4",
rotateMutation.isPending && "animate-spin",
)}
/>
</Button>
<CopyButton
value={clientSecret}
disabled={
!showSecret && clientSecret === secretPlaceholder
}
onCopy={() =>
toast(
t(
"msg.dev.clients.details.copy_client_secret",
"Client Secret이 복사되었습니다.",
),
)
}
/>
</div> </div>
</div> </div>
{!hasClientSecret ? (
<p className="mt-2 text-sm text-muted-foreground">
{t(
"msg.dev.clients.details.secret_not_applicable",
"PKCE 앱에는 Client Secret이 없습니다.",
)}
</p>
) : null}
</div> </div>
</CardContent> </CardContent>
</Card> </Card>

View File

@@ -362,6 +362,7 @@ create_forbidden = "You do not have permission to create this RP. Ask an adminis
save_error = "Save Error" 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." 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_rotated = "Secret Rotated"
secret_not_applicable = "PKCE apps do not have a client secret."
secret_unavailable = "SECRET_NOT_AVAILABLE" secret_unavailable = "SECRET_NOT_AVAILABLE"
subtitle = "Manage OIDC credentials and endpoints." subtitle = "Manage OIDC credentials and endpoints."

View File

@@ -362,6 +362,7 @@ create_forbidden = "이 RP를 생성할 권한이 없습니다.\n관리자에게
save_error = "저장 실패: {{error}}" save_error = "저장 실패: {{error}}"
save_forbidden = "이 RP 설정을 수정할 권한이 없습니다.\n관리자에게 RP 일반 설정 또는 RP 관리자 관계 부여를 요청해 주세요." save_forbidden = "이 RP 설정을 수정할 권한이 없습니다.\n관리자에게 RP 일반 설정 또는 RP 관리자 관계 부여를 요청해 주세요."
secret_rotated = "Client Secret이 재발급되었습니다." secret_rotated = "Client Secret이 재발급되었습니다."
secret_not_applicable = "PKCE 앱에는 Client Secret이 없습니다."
secret_unavailable = "SECRET_NOT_AVAILABLE" secret_unavailable = "SECRET_NOT_AVAILABLE"
subtitle = "OIDC 자격 증명과 엔드포인트를 관리합니다." subtitle = "OIDC 자격 증명과 엔드포인트를 관리합니다."

View File

@@ -408,6 +408,7 @@ create_forbidden = ""
save_error = "" save_error = ""
save_forbidden = "" save_forbidden = ""
secret_rotated = "" secret_rotated = ""
secret_not_applicable = ""
secret_unavailable = "" secret_unavailable = ""
subtitle = "" subtitle = ""