feat: fix authentication

This commit is contained in:
mrjvs
2026-08-08 20:55:56 +02:00
parent 69d133ab85
commit 0e174905f0
16 changed files with 154 additions and 116 deletions

View File

@@ -1,20 +1,9 @@
import z from 'zod';
import { ServerError } from 'nice-grpc';
export type ApiAuthLogin = {
accessToken: string
refreshToken: string;
}
const LoginSchema = z.object({
username: z.string(),
password: z.string(),
})
export type ApiAuthLoginRequest = z.infer<typeof LoginSchema>
import { ServerError } from "nice-grpc";
import { ApiAuthLogin, LoginSchema } from "#shared/api-types"
export default defineEventHandler(async (event): Promise<ApiAuthLogin> => {
const body = await readZodBody(event, LoginSchema);
const grpc = useGrpc(event);
const grpc = useApiGrpc(event);
try {
const res = await grpc.login({
@@ -25,21 +14,21 @@ export default defineEventHandler(async (event): Promise<ApiAuthLogin> => {
return {
accessToken: res.accessToken,
refreshToken: res.refreshToken,
}
refreshToken: res.refreshToken
};
} catch (error: unknown) {
if (error instanceof ServerError) {
if (error.details === 'INVALID_ARGUMENT: User not found') {
throw createError({
status: 400,
statusText: 'User not found',
})
statusText: 'User not found'
});
}
if (error.details === 'INVALID_ARGUMENT: Password is incorrect') {
throw createError({
status: 400,
statusText: 'Password was incorrect',
})
statusText: 'Password was incorrect'
});
}
}
throw error;

View File

@@ -1,15 +1,16 @@
export interface GetApiAuthMe {
pid: number;
username: string;
}
import type { GetApiAuthMe } from "#shared/api-types"
export default defineEventHandler(async (event): Promise<GetApiAuthMe> => {
const auth = enforceLoggedIn(event);
const grpc = useGrpc(event);
const grpc = useAccountGrpc(event);
const data = await grpc.getUserData({ pid: auth.pid });
return {
pid: data.pid,
username: data.username,
}
mii: data.mii ? {
imageUrl: `https://r2-cdn.pretendo.cc/mii/${data.pid}/normal_face.png`,
name: data.mii.name,
} : null,
};
});