Description
In src/modules/credentials/credential.service.ts:31-41, the mint method accepts courseId and submissionId as independent parameters. The submission lookup only filters by submissionId + userId — it never joins with quizzes to verify quizzes.courseId === courseId.
A user could pass a passing quiz for Course A and mint a credential for Course B.
Impact
Users can obtain credentials for courses they never completed.
File
src/modules/credentials/credential.service.ts:31-41
Suggested Fix
Join the submission query with the quizzes table to verify that quizzes.courseId matches the requested courseId.
Description
In
src/modules/credentials/credential.service.ts:31-41, themintmethod acceptscourseIdandsubmissionIdas independent parameters. The submission lookup only filters bysubmissionId + userId— it never joins withquizzesto verifyquizzes.courseId === courseId.A user could pass a passing quiz for Course A and mint a credential for Course B.
Impact
Users can obtain credentials for courses they never completed.
File
src/modules/credentials/credential.service.ts:31-41Suggested Fix
Join the submission query with the quizzes table to verify that
quizzes.courseIdmatches the requestedcourseId.