feat(backend): '/auth/hello' endpoint toegevoegd
This commit is contained in:
parent
c2f3a6169a
commit
2b3f6b5e7a
6 changed files with 40 additions and 7 deletions
0
backend/dwengo
Normal file
0
backend/dwengo
Normal file
|
@ -1,4 +1,9 @@
|
||||||
|
import { UnauthorizedException } from '../exceptions/unauthorized-exception.js';
|
||||||
|
import { AuthenticatedRequest } from '../middleware/auth/authenticated-request.js';
|
||||||
|
import { createOrUpdateStudent } from '../services/students.js';
|
||||||
|
import { createOrUpdateTeacher } from '../services/teachers.js';
|
||||||
import { envVars, getEnvVar } from '../util/envVars.js';
|
import { envVars, getEnvVar } from '../util/envVars.js';
|
||||||
|
import { Response } from "express";
|
||||||
|
|
||||||
interface FrontendIdpConfig {
|
interface FrontendIdpConfig {
|
||||||
authority: string;
|
authority: string;
|
||||||
|
@ -31,3 +36,21 @@ export function getFrontendAuthConfig(): FrontendAuthConfig {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function postHelloHandler(req: AuthenticatedRequest, _res: Response): Promise<void> {
|
||||||
|
const auth = req.auth;
|
||||||
|
if (!auth) {
|
||||||
|
throw new UnauthorizedException("Cannot say hello when not authenticated.");
|
||||||
|
}
|
||||||
|
const userData = {
|
||||||
|
id: auth.username,
|
||||||
|
username: auth.username,
|
||||||
|
firstName: auth.firstName ?? '',
|
||||||
|
lastName: auth.lastName ?? ''
|
||||||
|
};
|
||||||
|
if (auth.accountType === "student") {
|
||||||
|
await createOrUpdateStudent({ ...userData }, { preventOverwrite: false });
|
||||||
|
} else {
|
||||||
|
await createOrUpdateTeacher({ ...userData }, { preventOverwrite: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Request, Response } from 'express';
|
import { Request, Response } from 'express';
|
||||||
import {
|
import {
|
||||||
createClassJoinRequest,
|
createClassJoinRequest,
|
||||||
createStudent,
|
createOrUpdateStudent,
|
||||||
deleteClassJoinRequest,
|
deleteClassJoinRequest,
|
||||||
deleteStudent,
|
deleteStudent,
|
||||||
getAllStudents,
|
getAllStudents,
|
||||||
|
@ -42,7 +42,7 @@ export async function createStudentHandler(req: Request, res: Response): Promise
|
||||||
|
|
||||||
const userData = req.body as StudentDTO;
|
const userData = req.body as StudentDTO;
|
||||||
|
|
||||||
const student = await createStudent(userData);
|
const student = await createOrUpdateStudent(userData);
|
||||||
res.json({ student });
|
res.json({ student });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import express from 'express';
|
import express from 'express';
|
||||||
import { getFrontendAuthConfig } from '../controllers/auth.js';
|
import { getFrontendAuthConfig, postHelloHandler } from '../controllers/auth.js';
|
||||||
import { authenticatedOnly, studentsOnly, teachersOnly } from '../middleware/auth/auth.js';
|
import { authenticatedOnly, studentsOnly, teachersOnly } from '../middleware/auth/auth.js';
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
|
@ -23,4 +23,6 @@ router.get('/testTeachersOnly', teachersOnly, (_req, res) => {
|
||||||
res.json({ message: 'If you see this, you should be a teacher!' });
|
res.json({ message: 'If you see this, you should be a teacher!' });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.post('/hello', authenticatedOnly, postHelloHandler);
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
|
|
@ -53,14 +53,18 @@ export async function getStudent(username: string): Promise<StudentDTO> {
|
||||||
return mapToStudentDTO(user);
|
return mapToStudentDTO(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createStudent(userData: StudentDTO): Promise<StudentDTO> {
|
export async function createOrUpdateStudent(userData: StudentDTO, options?: { preventOverwrite: boolean}): Promise<StudentDTO> {
|
||||||
const studentRepository = getStudentRepository();
|
const studentRepository = getStudentRepository();
|
||||||
|
|
||||||
const newStudent = mapToStudent(userData);
|
const newStudent = mapToStudent(userData);
|
||||||
await studentRepository.save(newStudent, { preventOverwrite: true });
|
await studentRepository.save(newStudent, { preventOverwrite: options?.preventOverwrite ?? true });
|
||||||
return userData;
|
return userData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function createStudent(userData: StudentDTO): Promise<StudentDTO> {
|
||||||
|
return createOrUpdateStudent(userData, { preventOverwrite: true });
|
||||||
|
}
|
||||||
|
|
||||||
export async function deleteStudent(username: string): Promise<StudentDTO> {
|
export async function deleteStudent(username: string): Promise<StudentDTO> {
|
||||||
const studentRepository = getStudentRepository();
|
const studentRepository = getStudentRepository();
|
||||||
|
|
||||||
|
|
|
@ -57,14 +57,18 @@ export async function getTeacher(username: string): Promise<TeacherDTO> {
|
||||||
return mapToTeacherDTO(user);
|
return mapToTeacherDTO(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createTeacher(userData: TeacherDTO): Promise<TeacherDTO> {
|
export async function createOrUpdateTeacher(userData: TeacherDTO, options?: { preventOverwrite?: boolean }): Promise<TeacherDTO> {
|
||||||
const teacherRepository: TeacherRepository = getTeacherRepository();
|
const teacherRepository: TeacherRepository = getTeacherRepository();
|
||||||
|
|
||||||
const newTeacher = mapToTeacher(userData);
|
const newTeacher = mapToTeacher(userData);
|
||||||
await teacherRepository.save(newTeacher, { preventOverwrite: true });
|
await teacherRepository.save(newTeacher, { preventOverwrite: options?.preventOverwrite ?? true });
|
||||||
return mapToTeacherDTO(newTeacher);
|
return mapToTeacherDTO(newTeacher);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function createTeacher(userData: TeacherDTO): Promise<TeacherDTO> {
|
||||||
|
return await createOrUpdateTeacher(userData, { preventOverwrite: true });
|
||||||
|
}
|
||||||
|
|
||||||
export async function deleteTeacher(username: string): Promise<TeacherDTO> {
|
export async function deleteTeacher(username: string): Promise<TeacherDTO> {
|
||||||
const teacherRepository: TeacherRepository = getTeacherRepository();
|
const teacherRepository: TeacherRepository = getTeacherRepository();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue