diff --git a/Makefile b/Makefile index 855f72ef..f08f8d6a 100644 --- a/Makefile +++ b/Makefile @@ -107,12 +107,17 @@ logs-app: docker compose -f $(COMPOSE_APP) logs -f # --- 로컬 통합 코드 체크 --- +PLAYWRIGHT_BROWSERS_PATH := $(HOME)/.cache/ms-playwright +PLAYWRIGHT_CHROMIUM_COMPLETE := $(PLAYWRIGHT_BROWSERS_PATH)/chromium-1208/INSTALLATION_COMPLETE +PLAYWRIGHT_FIREFOX_COMPLETE := $(PLAYWRIGHT_BROWSERS_PATH)/firefox-1509/INSTALLATION_COMPLETE +PLAYWRIGHT_WEBKIT_COMPLETE := $(PLAYWRIGHT_BROWSERS_PATH)/webkit-2248/INSTALLATION_COMPLETE + ifeq ($(CI),) -PLAYWRIGHT_INSTALL_ALL := npx playwright install -PLAYWRIGHT_INSTALL_CHROMIUM := npx playwright install chromium +PLAYWRIGHT_INSTALL_ALL := sh -c 'if [ -f "$(PLAYWRIGHT_CHROMIUM_COMPLETE)" ] && [ -f "$(PLAYWRIGHT_FIREFOX_COMPLETE)" ] && [ -f "$(PLAYWRIGHT_WEBKIT_COMPLETE)" ]; then echo "Playwright browsers already installed"; else npx playwright install; fi' +PLAYWRIGHT_INSTALL_CHROMIUM := sh -c 'if [ -f "$(PLAYWRIGHT_CHROMIUM_COMPLETE)" ]; then echo "Playwright chromium already installed"; else npx playwright install chromium; fi' else -PLAYWRIGHT_INSTALL_ALL := npx playwright install --with-deps -PLAYWRIGHT_INSTALL_CHROMIUM := npx playwright install --with-deps chromium +PLAYWRIGHT_INSTALL_ALL := sh -c 'if [ -f "$(PLAYWRIGHT_CHROMIUM_COMPLETE)" ] && [ -f "$(PLAYWRIGHT_FIREFOX_COMPLETE)" ] && [ -f "$(PLAYWRIGHT_WEBKIT_COMPLETE)" ]; then echo "Playwright browsers already installed"; else npx playwright install --with-deps; fi' +PLAYWRIGHT_INSTALL_CHROMIUM := sh -c 'if [ -f "$(PLAYWRIGHT_CHROMIUM_COMPLETE)" ]; then echo "Playwright chromium already installed"; else npx playwright install --with-deps chromium; fi' endif .PHONY: code-check code-check-lint code-check-test-jobs code-check-i18n code-check-i18n-values code-check-go-lint code-check-sync-userfront-locales code-check-userfront-install code-check-userfront-lint code-check-front-lint code-check-backend-tests code-check-userfront-tests code-check-adminfront-tests code-check-devfront-tests code-check-userfront-e2e-tests diff --git a/adminfront/package.json b/adminfront/package.json index fbcba5b6..80dd2bb4 100644 --- a/adminfront/package.json +++ b/adminfront/package.json @@ -7,7 +7,7 @@ "node": ">=24.0.0" }, "scripts": { - "dev": "vite --host 0.0.0.0", + "dev": "vite --host 127.0.0.1", "build": "tsc -b && vite build", "lint": "biome check .", "lint:fix": "biome check . --write", diff --git a/adminfront/scripts/runtime-mode.sh b/adminfront/scripts/runtime-mode.sh index aa41dce1..8191bf0d 100644 --- a/adminfront/scripts/runtime-mode.sh +++ b/adminfront/scripts/runtime-mode.sh @@ -19,8 +19,8 @@ fi if [ "$mode" = "production" ]; then echo "Running in production mode with Vite preview..." - exec sh -c "npm run build && npm run preview -- --host 0.0.0.0" + exec sh -c "npm run build && npm run preview -- --host 127.0.0.1" fi echo "Running in development mode..." -exec npm run dev -- --host 0.0.0.0 +exec npm run dev -- --host 127.0.0.1 diff --git a/adminfront/src/features/auth/LoginPage.tsx b/adminfront/src/features/auth/LoginPage.tsx index a9edebb5..bc6d780d 100644 --- a/adminfront/src/features/auth/LoginPage.tsx +++ b/adminfront/src/features/auth/LoginPage.tsx @@ -39,13 +39,7 @@ function LoginPage() { returnTo, }, }); - }, [ - auth, - auth.activeNavigator, - auth.isLoading, - returnTo, - shouldAutoLogin, - ]); + }, [auth, auth.activeNavigator, auth.isLoading, returnTo, shouldAutoLogin]); const handleSSOLogin = () => { void auth.signinRedirect({ diff --git a/adminfront/src/locales/template.toml b/adminfront/src/locales/template.toml index 868d4f8d..eaacc511 100644 --- a/adminfront/src/locales/template.toml +++ b/adminfront/src/locales/template.toml @@ -1501,6 +1501,7 @@ ory = "" session = "" [ui.userfront.dashboard] +link_status_label = "" last_auth_label = "" status_history = "" diff --git a/adminfront/vite.config.ts b/adminfront/vite.config.ts index 2a8338a8..8176399c 100644 --- a/adminfront/vite.config.ts +++ b/adminfront/vite.config.ts @@ -5,7 +5,7 @@ export default defineConfig({ plugins: [react()], envPrefix: ["VITE_", "USERFRONT_"], server: { - host: "0.0.0.0", + host: "127.0.0.1", allowedHosts: ["sadmin.hmac.kr", "localhost", "172.16.10.176", "127.0.0.1"], proxy: { "/api": { @@ -15,7 +15,7 @@ export default defineConfig({ }, }, preview: { - host: "0.0.0.0", + host: "127.0.0.1", port: 5173, allowedHosts: ["sadmin.hmac.kr", "localhost", "172.16.10.176", "127.0.0.1"], proxy: { diff --git a/devfront/package.json b/devfront/package.json index 4dd04e0b..8809ce3a 100644 --- a/devfront/package.json +++ b/devfront/package.json @@ -7,7 +7,7 @@ "node": ">=24.0.0" }, "scripts": { - "dev": "vite --host 0.0.0.0", + "dev": "vite --host 127.0.0.1", "build": "tsc -b && vite build", "lint": "biome check .", "preview": "vite preview", diff --git a/devfront/scripts/runtime-mode.sh b/devfront/scripts/runtime-mode.sh index aa41dce1..8191bf0d 100644 --- a/devfront/scripts/runtime-mode.sh +++ b/devfront/scripts/runtime-mode.sh @@ -19,8 +19,8 @@ fi if [ "$mode" = "production" ]; then echo "Running in production mode with Vite preview..." - exec sh -c "npm run build && npm run preview -- --host 0.0.0.0" + exec sh -c "npm run build && npm run preview -- --host 127.0.0.1" fi echo "Running in development mode..." -exec npm run dev -- --host 0.0.0.0 +exec npm run dev -- --host 127.0.0.1 diff --git a/devfront/src/features/auth/LoginPage.tsx b/devfront/src/features/auth/LoginPage.tsx index cd9f8ca1..212eabf7 100644 --- a/devfront/src/features/auth/LoginPage.tsx +++ b/devfront/src/features/auth/LoginPage.tsx @@ -40,13 +40,7 @@ function LoginPage() { returnTo, }, }); - }, [ - auth, - auth.activeNavigator, - auth.isLoading, - returnTo, - shouldAutoLogin, - ]); + }, [auth, auth.activeNavigator, auth.isLoading, returnTo, shouldAutoLogin]); const handleSSOLogin = async () => { try { diff --git a/devfront/src/features/clients/ClientDetailsPage.tsx b/devfront/src/features/clients/ClientDetailsPage.tsx index f4a3550f..26346563 100644 --- a/devfront/src/features/clients/ClientDetailsPage.tsx +++ b/devfront/src/features/clients/ClientDetailsPage.tsx @@ -150,7 +150,18 @@ function ClientDetailsPage() { ); } + if (isLoading && !data) { + return ( +
+ {t("msg.dev.clients.details.loading", "Loading app details...")} +
+ ); + } + const client = data?.client; + if (!client) { + return null; + } const endpointValues = data?.endpoints ?? { discovery: "-", issuer: "-", @@ -469,6 +480,7 @@ function ClientDetailsPage() { )} rows={5} value={redirectUris} + onFocus={(e) => e.currentTarget.select()} onChange={(e) => { redirectUrisHydratedRef.current = true; setRedirectUris(e.target.value); diff --git a/devfront/src/features/clients/ClientGeneralPage.tsx b/devfront/src/features/clients/ClientGeneralPage.tsx index 84c4d470..32928281 100644 --- a/devfront/src/features/clients/ClientGeneralPage.tsx +++ b/devfront/src/features/clients/ClientGeneralPage.tsx @@ -258,7 +258,7 @@ function ClientGeneralPage() { return; } setLogoPreviewStatus("loading"); - }, [hasLogoUrl, hasValidLogoUrl, trimmedLogoUrl]); + }, [hasLogoUrl, hasValidLogoUrl]); const handleSecurityProfileChange = (profile: SecurityProfile) => { setClientType(profile); @@ -814,7 +814,9 @@ function ClientGeneralPage() {