1
0
forked from baron/baron-sso

액션 러너 캐시 정리

This commit is contained in:
2026-05-13 14:04:59 +09:00
parent 6ed9b2b734
commit 629716f226
5 changed files with 44 additions and 29 deletions

View File

@@ -14,13 +14,6 @@ import {
import { useEffect, useRef, useState } from "react";
import { useAuth } from "react-oidc-context";
import { NavLink, Outlet, useLocation, useNavigate } from "react-router-dom";
import { fetchMe } from "../../features/auth/authApi";
import { t } from "../../lib/i18n";
import { resolveProfileRole } from "../../lib/role";
import {
shouldAttemptSlidingSessionRenew,
shouldAttemptUnlimitedSessionRenew,
} from "../../lib/sessionSliding";
import {
applyShellTheme,
buildShellProfileSummary,
@@ -30,6 +23,13 @@ import {
shellLayoutClasses,
writeShellSessionExpiryEnabled,
} from "../../../../common/shell";
import { fetchMe } from "../../features/auth/authApi";
import { t } from "../../lib/i18n";
import { resolveProfileRole } from "../../lib/role";
import {
shouldAttemptSlidingSessionRenew,
shouldAttemptUnlimitedSessionRenew,
} from "../../lib/sessionSliding";
import LanguageSelector from "../common/LanguageSelector";
import { Toaster } from "../ui/toaster";

View File

@@ -14,10 +14,10 @@ import { useEffect, useMemo, useState } from "react";
import { useAuth } from "react-oidc-context";
import { Link, useNavigate } from "react-router-dom";
import {
sortItems,
toggleSort,
type SortConfig,
type SortResolverMap,
sortItems,
toggleSort,
} from "../../../../common/core/utils";
import { ForbiddenMessage } from "../../components/common/ForbiddenMessage";
import {
@@ -47,12 +47,12 @@ import {
} from "../../components/ui/table";
import { Textarea } from "../../components/ui/textarea";
import {
type ClientSummary,
fetchClients,
fetchDevStats,
fetchDeveloperRequestStatus,
fetchMyTenants,
requestDeveloperAccess,
type ClientSummary,
} from "../../lib/devApi";
import { t } from "../../lib/i18n";
import { resolveProfileRole } from "../../lib/role";

View File

@@ -13,12 +13,12 @@ import { useAuth } from "react-oidc-context";
import { useNavigate } from "react-router-dom";
import {
type ClientSummary,
fetchClients,
fetchDeveloperRequestStatus,
fetchDevRPUsageDaily,
fetchDevStats,
type RPUsageDailyMetric,
type RPUsagePeriod,
fetchClients,
fetchDevRPUsageDaily,
fetchDevStats,
fetchDeveloperRequestStatus,
} from "../../lib/devApi";
import { t } from "../../lib/i18n";
import { resolveProfileRole } from "../../lib/role";

View File

@@ -29,6 +29,13 @@ describe("devfront auth config", () => {
});
it("blocks browser PKCE login in an insecure context", () => {
expect(
canStartBrowserPkceLogin({
isSecureContext: false,
origin: "http://localhost:5174",
cryptoSubtleAvailable: false,
}),
).toBe(false);
expect(
canStartBrowserPkceLogin({
isSecureContext: false,

View File

@@ -9,31 +9,39 @@ test.describe("DevFront login", () => {
configurable: true,
value: false,
});
Object.defineProperty(window.crypto, "subtle", {
configurable: true,
value: undefined,
});
});
let authorizeRequested = false;
await page.route("**/oidc/.well-known/openid-configuration", async (route) => {
await route.fulfill({
json: {
issuer: "http://localhost:5000/oidc",
authorization_endpoint: "http://localhost:5000/oidc/oauth2/auth",
token_endpoint: "http://localhost:5000/oidc/oauth2/token",
jwks_uri: "http://localhost:5000/oidc/.well-known/jwks.json",
},
headers: { "Access-Control-Allow-Origin": "*" },
});
});
await page.route(
"**/oidc/.well-known/openid-configuration",
async (route) => {
await route.fulfill({
json: {
issuer: "http://localhost:5000/oidc",
authorization_endpoint: "http://localhost:5000/oidc/oauth2/auth",
token_endpoint: "http://localhost:5000/oidc/oauth2/token",
jwks_uri: "http://localhost:5000/oidc/.well-known/jwks.json",
},
headers: { "Access-Control-Allow-Origin": "*" },
});
},
);
await page.route("**/oidc/oauth2/auth**", async (route) => {
authorizeRequested = true;
await route.fulfill({ status: 500, body: "unexpected authorize request" });
await route.fulfill({
status: 500,
body: "unexpected authorize request",
});
});
await page.goto("/login");
await page.getByRole("button", { name: "SSO 계정으로 로그인" }).click();
await expect(page.getByRole("alert")).toContainText(
"HTTPS 또는 localhost",
);
await expect(page.getByRole("alert")).toContainText("HTTPS 또는 localhost");
expect(authorizeRequested).toBe(false);
});
});