refactor: prevent impersonation middelware
This commit is contained in:
		
							parent
							
								
									a5e4f2437b
								
							
						
					
					
						commit
						26a01f0f30
					
				
					 5 changed files with 20 additions and 20 deletions
				
			
		|  | @ -5,4 +5,4 @@ import { AuthenticatedRequest } from '../authenticated-request.js'; | ||||||
| /** | /** | ||||||
|  * Only allow the user whose username is in the path parameter "username" to access the endpoint. |  * Only allow the user whose username is in the path parameter "username" to access the endpoint. | ||||||
|  */ |  */ | ||||||
| export const onlyAllowUserHimself = authorize((auth: AuthenticationInfo, req: AuthenticatedRequest) => req.params.username === auth.username); | export const preventImpersonation = authorize((auth: AuthenticationInfo, req: AuthenticatedRequest) => req.params.username === auth.username); | ||||||
|  |  | ||||||
|  | @ -5,16 +5,16 @@ import { | ||||||
|     getStudentRequestHandler, |     getStudentRequestHandler, | ||||||
|     getStudentRequestsHandler, |     getStudentRequestsHandler, | ||||||
| } from '../controllers/students.js'; | } from '../controllers/students.js'; | ||||||
| import { onlyAllowUserHimself } from '../middleware/auth/checks/user-auth-checks.js'; | import { preventImpersonation } from '../middleware/auth/checks/user-auth-checks.js'; | ||||||
| import { onlyAllowStudentHimselfAndTeachersOfClass } from '../middleware/auth/checks/class-auth-checks.js'; | import { onlyAllowStudentHimselfAndTeachersOfClass } from '../middleware/auth/checks/class-auth-checks.js'; | ||||||
| 
 | 
 | ||||||
| // Under /:username/joinRequests/
 | // Under /:username/joinRequests/
 | ||||||
| 
 | 
 | ||||||
| const router = express.Router({ mergeParams: true }); | const router = express.Router({ mergeParams: true }); | ||||||
| 
 | 
 | ||||||
| router.get('/', onlyAllowUserHimself, getStudentRequestsHandler); | router.get('/', preventImpersonation, getStudentRequestsHandler); | ||||||
| 
 | 
 | ||||||
| router.post('/', onlyAllowUserHimself, createStudentRequestHandler); | router.post('/', preventImpersonation, createStudentRequestHandler); | ||||||
| 
 | 
 | ||||||
| router.get('/:classId', onlyAllowStudentHimselfAndTeachersOfClass, getStudentRequestHandler); | router.get('/:classId', onlyAllowStudentHimselfAndTeachersOfClass, getStudentRequestHandler); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ import { | ||||||
|     getStudentSubmissionsHandler, |     getStudentSubmissionsHandler, | ||||||
| } from '../controllers/students.js'; | } from '../controllers/students.js'; | ||||||
| import joinRequestRouter from './student-join-requests.js'; | import joinRequestRouter from './student-join-requests.js'; | ||||||
| import { onlyAllowUserHimself } from '../middleware/auth/checks/user-auth-checks.js'; | import { preventImpersonation } from '../middleware/auth/checks/user-auth-checks.js'; | ||||||
| import { adminOnly } from '../middleware/auth/checks/auth-checks.js'; | import { adminOnly } from '../middleware/auth/checks/auth-checks.js'; | ||||||
| 
 | 
 | ||||||
| const router = express.Router(); | const router = express.Router(); | ||||||
|  | @ -23,25 +23,25 @@ router.get('/', adminOnly, getAllStudentsHandler); | ||||||
| // Can only be used by an administrator.
 | // Can only be used by an administrator.
 | ||||||
| router.post('/', adminOnly, createStudentHandler); | router.post('/', adminOnly, createStudentHandler); | ||||||
| 
 | 
 | ||||||
| router.delete('/:username', onlyAllowUserHimself, deleteStudentHandler); | router.delete('/:username', preventImpersonation, deleteStudentHandler); | ||||||
| 
 | 
 | ||||||
| // Information about a student's profile
 | // Information about a student's profile
 | ||||||
| router.get('/:username', onlyAllowUserHimself, getStudentHandler); | router.get('/:username', preventImpersonation, getStudentHandler); | ||||||
| 
 | 
 | ||||||
| // The list of classes a student is in
 | // The list of classes a student is in
 | ||||||
| router.get('/:username/classes', onlyAllowUserHimself, getStudentClassesHandler); | router.get('/:username/classes', preventImpersonation, getStudentClassesHandler); | ||||||
| 
 | 
 | ||||||
| // The list of submissions a student has made
 | // The list of submissions a student has made
 | ||||||
| router.get('/:username/submissions', onlyAllowUserHimself, getStudentSubmissionsHandler); | router.get('/:username/submissions', preventImpersonation, getStudentSubmissionsHandler); | ||||||
| 
 | 
 | ||||||
| // The list of assignments a student has
 | // The list of assignments a student has
 | ||||||
| router.get('/:username/assignments', onlyAllowUserHimself, getStudentAssignmentsHandler); | router.get('/:username/assignments', preventImpersonation, getStudentAssignmentsHandler); | ||||||
| 
 | 
 | ||||||
| // The list of groups a student is in
 | // The list of groups a student is in
 | ||||||
| router.get('/:username/groups', onlyAllowUserHimself, getStudentGroupsHandler); | router.get('/:username/groups', preventImpersonation, getStudentGroupsHandler); | ||||||
| 
 | 
 | ||||||
| // A list of questions a user has created
 | // A list of questions a user has created
 | ||||||
| router.get('/:username/questions', onlyAllowUserHimself, getStudentQuestionsHandler); | router.get('/:username/questions', preventImpersonation, getStudentQuestionsHandler); | ||||||
| 
 | 
 | ||||||
| router.use('/:username/joinRequests', joinRequestRouter); | router.use('/:username/joinRequests', joinRequestRouter); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ import { | ||||||
|     getInvitationHandler, |     getInvitationHandler, | ||||||
|     updateInvitationHandler, |     updateInvitationHandler, | ||||||
| } from '../controllers/teacher-invitations.js'; | } from '../controllers/teacher-invitations.js'; | ||||||
| import { onlyAllowUserHimself } from '../middleware/auth/checks/user-auth-checks.js'; | import { preventImpersonation } from '../middleware/auth/checks/user-auth-checks.js'; | ||||||
| import { | import { | ||||||
|     onlyAllowReceiverBody, |     onlyAllowReceiverBody, | ||||||
|     onlyAllowSender, |     onlyAllowSender, | ||||||
|  | @ -16,7 +16,7 @@ import { | ||||||
| 
 | 
 | ||||||
| const router = express.Router({ mergeParams: true }); | const router = express.Router({ mergeParams: true }); | ||||||
| 
 | 
 | ||||||
| router.get('/:username', onlyAllowUserHimself, getAllInvitationsHandler); | router.get('/:username', preventImpersonation, getAllInvitationsHandler); | ||||||
| 
 | 
 | ||||||
| router.get('/:sender/:receiver/:classId', onlyAllowSenderOrReceiver, getInvitationHandler); | router.get('/:sender/:receiver/:classId', onlyAllowSenderOrReceiver, getInvitationHandler); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ import { | ||||||
| } from '../controllers/teachers.js'; | } from '../controllers/teachers.js'; | ||||||
| import invitationRouter from './teacher-invitations.js'; | import invitationRouter from './teacher-invitations.js'; | ||||||
| import { adminOnly } from '../middleware/auth/checks/auth-checks.js'; | import { adminOnly } from '../middleware/auth/checks/auth-checks.js'; | ||||||
| import { onlyAllowUserHimself } from '../middleware/auth/checks/user-auth-checks.js'; | import { preventImpersonation } from '../middleware/auth/checks/user-auth-checks.js'; | ||||||
| import { onlyAllowTeacherOfClass } from '../middleware/auth/checks/class-auth-checks.js'; | import { onlyAllowTeacherOfClass } from '../middleware/auth/checks/class-auth-checks.js'; | ||||||
| const router = express.Router(); | const router = express.Router(); | ||||||
| 
 | 
 | ||||||
|  | @ -21,15 +21,15 @@ router.get('/', adminOnly, getAllTeachersHandler); | ||||||
| 
 | 
 | ||||||
| router.post('/', adminOnly, createTeacherHandler); | router.post('/', adminOnly, createTeacherHandler); | ||||||
| 
 | 
 | ||||||
| router.get('/:username', onlyAllowUserHimself, getTeacherHandler); | router.get('/:username', preventImpersonation, getTeacherHandler); | ||||||
| 
 | 
 | ||||||
| router.delete('/:username', onlyAllowUserHimself, deleteTeacherHandler); | router.delete('/:username', preventImpersonation, deleteTeacherHandler); | ||||||
| 
 | 
 | ||||||
| router.get('/:username/classes', onlyAllowUserHimself, getTeacherClassHandler); | router.get('/:username/classes', preventImpersonation, getTeacherClassHandler); | ||||||
| 
 | 
 | ||||||
| router.get('/:username/students', onlyAllowUserHimself, getTeacherStudentHandler); | router.get('/:username/students', preventImpersonation, getTeacherStudentHandler); | ||||||
| 
 | 
 | ||||||
| router.get('/:username/questions', onlyAllowUserHimself, getTeacherQuestionHandler); | router.get('/:username/questions', preventImpersonation, getTeacherQuestionHandler); | ||||||
| 
 | 
 | ||||||
| router.get('/:username/joinRequests/:classId', onlyAllowTeacherOfClass, getStudentJoinRequestHandler); | router.get('/:username/joinRequests/:classId', onlyAllowTeacherOfClass, getStudentJoinRequestHandler); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Reference in a new issue
	
	 Gabriellvl
						Gabriellvl