From 57ff2daf6c54ef4b29b37d6408e74d09e13622ee Mon Sep 17 00:00:00 2001 From: Gerald Schmittinger Date: Sat, 19 Apr 2025 16:47:47 +0200 Subject: [PATCH] fix: Fouten in implementatie van hello-mechanisme opgelost. --- backend/src/controllers/auth.ts | 12 +++++++++--- .../src/middleware/error-handling/error-handler.ts | 2 +- backend/src/services/students.ts | 14 ++++++++++---- backend/src/services/teachers.ts | 14 ++++++++++---- frontend/src/services/auth/auth-service.ts | 1 + 5 files changed, 31 insertions(+), 12 deletions(-) diff --git a/backend/src/controllers/auth.ts b/backend/src/controllers/auth.ts index f44784ba..cab82da3 100644 --- a/backend/src/controllers/auth.ts +++ b/backend/src/controllers/auth.ts @@ -1,4 +1,5 @@ import { UnauthorizedException } from '../exceptions/unauthorized-exception.js'; +import { getLogger } from '../logging/initalize.js'; import { AuthenticatedRequest } from '../middleware/auth/authenticated-request.js'; import { createOrUpdateStudent } from '../services/students.js'; import { createOrUpdateTeacher } from '../services/teachers.js'; @@ -20,6 +21,8 @@ interface FrontendAuthConfig { const SCOPE = 'openid profile email'; const RESPONSE_TYPE = 'code'; +const logger = getLogger(); + export function getFrontendAuthConfig(): FrontendAuthConfig { return { student: { @@ -37,7 +40,7 @@ export function getFrontendAuthConfig(): FrontendAuthConfig { }; } -export async function postHelloHandler(req: AuthenticatedRequest, _res: Response): Promise { +export async function postHelloHandler(req: AuthenticatedRequest, res: Response): Promise { const auth = req.auth; if (!auth) { throw new UnauthorizedException("Cannot say hello when not authenticated."); @@ -49,8 +52,11 @@ export async function postHelloHandler(req: AuthenticatedRequest, _res: Response lastName: auth.lastName ?? '' }; if (auth.accountType === "student") { - await createOrUpdateStudent({ ...userData }, { preventOverwrite: false }); + await createOrUpdateStudent(userData); + logger.debug(`Synchronized student ${userData.username} with IDP`); } else { - await createOrUpdateTeacher({ ...userData }, { preventOverwrite: false }); + await createOrUpdateTeacher(userData); + logger.debug(`Synchronized teacher ${userData.username} with IDP`); } + res.status(200).send({ message: "Welcome!" }); } diff --git a/backend/src/middleware/error-handling/error-handler.ts b/backend/src/middleware/error-handling/error-handler.ts index 288340ba..2a9169e2 100644 --- a/backend/src/middleware/error-handling/error-handler.ts +++ b/backend/src/middleware/error-handling/error-handler.ts @@ -9,7 +9,7 @@ export function errorHandler(err: unknown, _req: Request, res: Response, _: Next logger.warn(`An error occurred while handling a request: ${err} (-> HTTP ${err.status})`); res.status(err.status).json(err); } else { - logger.error(`Unexpected error occurred while handing a request: ${JSON.stringify(err)}`); + logger.error(`Unexpected error occurred while handing a request: ${err}`); res.status(500).json(err); } } diff --git a/backend/src/services/students.ts b/backend/src/services/students.ts index c097b7a1..7714528b 100644 --- a/backend/src/services/students.ts +++ b/backend/src/services/students.ts @@ -53,16 +53,22 @@ export async function getStudent(username: string): Promise { return mapToStudentDTO(user); } -export async function createOrUpdateStudent(userData: StudentDTO, options?: { preventOverwrite: boolean}): Promise { +export async function createStudent(userData: StudentDTO): Promise { const studentRepository = getStudentRepository(); const newStudent = mapToStudent(userData); - await studentRepository.save(newStudent, { preventOverwrite: options?.preventOverwrite ?? true }); + await studentRepository.save(newStudent); + return userData; } -export async function createStudent(userData: StudentDTO): Promise { - return createOrUpdateStudent(userData, { preventOverwrite: true }); +export async function createOrUpdateStudent(userData: StudentDTO): Promise { + await getStudentRepository().upsert({ + username: userData.username, + firstName: userData.firstName, + lastName: userData.lastName + }); + return userData; } export async function deleteStudent(username: string): Promise { diff --git a/backend/src/services/teachers.ts b/backend/src/services/teachers.ts index b8704fc3..da837cf8 100644 --- a/backend/src/services/teachers.ts +++ b/backend/src/services/teachers.ts @@ -57,16 +57,22 @@ export async function getTeacher(username: string): Promise { return mapToTeacherDTO(user); } -export async function createOrUpdateTeacher(userData: TeacherDTO, options?: { preventOverwrite?: boolean }): Promise { +export async function createTeacher(userData: TeacherDTO): Promise { const teacherRepository: TeacherRepository = getTeacherRepository(); const newTeacher = mapToTeacher(userData); - await teacherRepository.save(newTeacher, { preventOverwrite: options?.preventOverwrite ?? true }); + await teacherRepository.save(newTeacher); + return mapToTeacherDTO(newTeacher); } -export async function createTeacher(userData: TeacherDTO): Promise { - return await createOrUpdateTeacher(userData, { preventOverwrite: true }); +export async function createOrUpdateTeacher(userData: TeacherDTO): Promise { + await getTeacherRepository().upsert({ + username: userData.username, + firstName: userData.firstName, + lastName: userData.lastName + }); + return userData; } export async function deleteTeacher(username: string): Promise { diff --git a/frontend/src/services/auth/auth-service.ts b/frontend/src/services/auth/auth-service.ts index 6ea13440..223466d5 100644 --- a/frontend/src/services/auth/auth-service.ts +++ b/frontend/src/services/auth/auth-service.ts @@ -92,6 +92,7 @@ async function handleLoginCallback(): Promise { throw new Error("Login callback received, but the user is not logging in!"); } authState.user = (await (await getUserManagers())[activeRole].signinCallback()) || null; + await apiClient.post("/auth/hello"); } /**