diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index 2b74a68..0000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: Deploy - -on: - push: - branches: [main] - -jobs: - check-changes: - name: Check Changed Files - runs-on: ubuntu-latest - permissions: - contents: read - outputs: - build-affected: ${{ steps.filter.outputs.build-affected }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Filter paths - uses: dorny/paths-filter@v3 - id: filter - with: - filters: | - build-affected: - - "src/**" - - "static/**" - - "package.json" - - "bun.lock" - - "vite.config.*" - - "svelte.config.*" - - "tsconfig.json" - - "wrangler.toml" - - "wrangler.json" - - "drizzle.config.*" - - "eslint.config.*" - - ".prettierrc*" - - deploy: - name: Build & Deploy to Cloudflare Workers - runs-on: ubuntu-latest - needs: check-changes - if: needs.check-changes.outputs.build-affected == 'true' - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - - - name: Install dependencies - run: bun install - - - name: Build - run: bun run build - - - name: Deploy - run: bun run deploy - env: - CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} - CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} diff --git a/src/routes/account/mfa/+page.server.ts b/src/routes/account/mfa/+page.server.ts index c8e88d5..6a7ecc8 100644 --- a/src/routes/account/mfa/+page.server.ts +++ b/src/routes/account/mfa/+page.server.ts @@ -107,7 +107,10 @@ export const actions: Actions = { if (!locals.user) throw redirect(303, "/login"); const config = getRuntimeConfig(platform); if (!config.signingKeySecret) { - return fail(503, { setup: true, error: "IDP_SIGNING_KEY_SECRET 이 설정되지 않았습니다." }); + return fail(503, { + setup: true, + error: "IDP_SIGNING_KEY_SECRET 이 설정되지 않았습니다.", + }); } const secret = generateTotpSecret(); @@ -133,18 +136,27 @@ export const actions: Actions = { const config = getRuntimeConfig(platform); if (!config.signingKeySecret) { - return fail(503, { confirm: true, error: "IDP_SIGNING_KEY_SECRET 이 설정되지 않았습니다." }); + return fail(503, { + confirm: true, + error: "IDP_SIGNING_KEY_SECRET 이 설정되지 않았습니다.", + }); } const setupToken = cookies.get(TOTP_SETUP_COOKIE); if (!setupToken) { - return fail(400, { confirm: true, error: "등록 세션이 만료되었습니다. 다시 시작해 주세요." }); + return fail(400, { + confirm: true, + error: "등록 세션이 만료되었습니다. 다시 시작해 주세요.", + }); } const plainSecret = await verifySetupToken(setupToken, config.signingKeySecret); if (!plainSecret) { cookies.delete(TOTP_SETUP_COOKIE, { path: "/" }); - return fail(400, { confirm: true, error: "등록 세션이 만료되었습니다. 다시 시작해 주세요." }); + return fail(400, { + confirm: true, + error: "등록 세션이 만료되었습니다. 다시 시작해 주세요.", + }); } const formData = await event.request.formData(); @@ -156,7 +168,10 @@ export const actions: Actions = { const valid = await verifyTotp(code, plainSecret); if (!valid) { - return fail(400, { confirm: true, error: "코드가 올바르지 않습니다. 다시 확인해 주세요." }); + return fail(400, { + confirm: true, + error: "코드가 올바르지 않습니다. 다시 확인해 주세요.", + }); } const { db, tenant } = requireDbContext(locals); @@ -219,7 +234,10 @@ export const actions: Actions = { const config = getRuntimeConfig(platform); if (!config.signingKeySecret) { - return fail(503, { delete: true, error: "IDP_SIGNING_KEY_SECRET 이 설정되지 않았습니다." }); + return fail(503, { + delete: true, + error: "IDP_SIGNING_KEY_SECRET 이 설정되지 않았습니다.", + }); } const formData = await event.request.formData(); diff --git a/src/routes/account/passkeys/+page.svelte b/src/routes/account/passkeys/+page.svelte index 58fd976..22fca60 100644 --- a/src/routes/account/passkeys/+page.svelte +++ b/src/routes/account/passkeys/+page.svelte @@ -93,7 +93,9 @@ const formError = $derived((form as { error?: string } | null)?.error ?? null); d="M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z" />
-

{pk.label ?? "패스키"}

+

+ {pk.label ?? "패스키"} +

등록: {new Date(pk.createdAt).toLocaleDateString("ko-KR")} {#if pk.lastUsedAt} diff --git a/src/routes/admin/+layout.svelte b/src/routes/admin/+layout.svelte index db4d7e3..1ebb750 100644 --- a/src/routes/admin/+layout.svelte +++ b/src/routes/admin/+layout.svelte @@ -37,7 +37,9 @@ const orgMenuItems = [

-

{data.currentUser.displayName ?? "관리자"}

+

+ {data.currentUser.displayName ?? "관리자"} +

{data.currentUser.email}

diff --git a/src/routes/admin/departments/+page.svelte b/src/routes/admin/departments/+page.svelte index c3e3e7c..c8653fb 100644 --- a/src/routes/admin/departments/+page.svelte +++ b/src/routes/admin/departments/+page.svelte @@ -91,7 +91,9 @@ const STATUS_COLOR: Record = { {/if} {#if err && !createErr} -

{err}

+

+ {err} +

{/if}
diff --git a/src/routes/admin/parts/+page.svelte b/src/routes/admin/parts/+page.svelte index abedf46..cc24253 100644 --- a/src/routes/admin/parts/+page.svelte +++ b/src/routes/admin/parts/+page.svelte @@ -86,7 +86,9 @@ function teamLabel(t: { name: string; departmentName: string | null }) { {/if} {#if err && !createErr} -

{err}

+

+ {err} +

{/if}
diff --git a/src/routes/admin/saml-sps/+page.svelte b/src/routes/admin/saml-sps/+page.svelte index 59e9a3a..75aa92f 100644 --- a/src/routes/admin/saml-sps/+page.svelte +++ b/src/routes/admin/saml-sps/+page.svelte @@ -295,7 +295,9 @@ const NAME_ID_OPTIONS = [

{sp.name}

-

{sp.entityId}

+

+ {sp.entityId} +

{sp.acsUrl} diff --git a/src/routes/admin/teams/+page.svelte b/src/routes/admin/teams/+page.svelte index 1d05599..acb5e9c 100644 --- a/src/routes/admin/teams/+page.svelte +++ b/src/routes/admin/teams/+page.svelte @@ -82,7 +82,9 @@ const STATUS_LABEL: Record = { active: "활성", inactive: "비 {/if} {#if err && !createErr} -

{err}

+

+ {err} +

{/if}
diff --git a/src/routes/admin/users/+page.svelte b/src/routes/admin/users/+page.svelte index 4b311fc..e966c00 100644 --- a/src/routes/admin/users/+page.svelte +++ b/src/routes/admin/users/+page.svelte @@ -133,7 +133,9 @@ const STATUS_COLOR: Record = { -

{user.username ?? "-"}

+

+ {user.username ?? "-"} +

{user.email}