Browse Source

verify setup step

pull/1695/head
Bernd Storath 5 months ago
parent
commit
7f40b62f7d
  1. 5
      src/server/api/setup/2.post.ts
  2. 5
      src/server/api/setup/4.post.ts
  3. 2
      src/server/api/setup/migrate.post.ts
  4. 2
      src/server/middleware/setup.ts
  5. 29
      src/server/utils/handler.ts

5
src/server/api/setup/2.post.ts

@ -1,14 +1,13 @@
import { UserSetupSchema } from '#db/repositories/user/types';
export default defineSetupEventHandler(async ({ event }) => {
export default defineSetupEventHandler(2, async ({ event }) => {
const { username, password } = await readValidatedBody(
event,
validateZod(UserSetupSchema, event)
);
// TODO: validate setup step
await Database.users.create(username, password);
await Database.general.setSetupStep(3);
return { success: true };
});

5
src/server/api/setup/4.post.ts

@ -1,12 +1,13 @@
import { UserConfigSetupSchema } from '#db/repositories/userConfig/types';
export default defineSetupEventHandler(async ({ event }) => {
export default defineSetupEventHandler(4, async ({ event }) => {
const { host, port } = await readValidatedBody(
event,
validateZod(UserConfigSetupSchema, event)
);
// TODO: validate setup step
await Database.userConfigs.updateHostPort(host, port);
await Database.general.setSetupStep(0);
return { success: true };
});

2
src/server/api/setup/migrate.post.ts

@ -2,7 +2,7 @@ import { parseCidr } from 'cidr-tools';
import { stringifyIp } from 'ip-bigint';
import { z } from 'zod';
export default defineSetupEventHandler(async ({ event }) => {
export default defineSetupEventHandler('migrate', async ({ event }) => {
const { file } = await readValidatedBody(
event,
validateZod(FileSchema, event)

2
src/server/middleware/setup.ts

@ -1,4 +1,4 @@
/* First setup of wg-easy app */
/* First setup of wg-easy */
export default defineEventHandler(async (event) => {
const url = getRequestURL(event);

29
src/server/utils/handler.ts

@ -63,6 +63,17 @@ export const definePermissionEventHandler = <
});
};
// which api route is allowed for each setup step
// 0 is done, 1 is start
// 3 means step 2 is done
const ValidSetupSteps = {
1: [2] as const,
3: [4, 'migrate'] as const,
} as const;
type ValidSteps =
(typeof ValidSetupSteps)[keyof typeof ValidSetupSteps][number];
type SetupHandler<
TReq extends EventHandlerRequest,
TRes extends EventHandlerResponse,
@ -75,6 +86,7 @@ export const defineSetupEventHandler = <
TReq extends EventHandlerRequest,
TRes extends EventHandlerResponse,
>(
step: ValidSteps,
handler: SetupHandler<TReq, TRes>
) => {
return defineEventHandler(async (event) => {
@ -87,6 +99,23 @@ export const defineSetupEventHandler = <
});
}
const validSetupSteps =
ValidSetupSteps[setup.step as keyof typeof ValidSetupSteps];
if (!validSetupSteps) {
throw createError({
statusCode: 500,
statusMessage: 'Invalid setup step',
});
}
if (!validSetupSteps.includes(step as never)) {
throw createError({
statusCode: 400,
statusMessage: 'Invalid step',
});
}
return await handler({ event, setup });
});
};

Loading…
Cancel
Save