fix ownership for result handlers

This commit is contained in:
Pasha 2025-04-23 16:23:38 +03:00 committed by skeris
parent bff28a1109
commit 56e2a066ab

@ -41,7 +41,6 @@ type ReqExportResponse struct {
Results []model.AnswerExport `json:"results"`
}
// todo тут возможно такое что результат не принадлежит акаунту тк ид аккаунта не используется в запросе
func (r *Result) GetResultsByQuizID(ctx *fiber.Ctx) error {
payment := true // параметр для определения существования текущих привилегий юзера
@ -61,6 +60,15 @@ func (r *Result) GetResultsByQuizID(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid quiz ID format")
}
isOwner, err := r.dal.QuizRepo.CheckQuizOwner(ctx.Context(), accountID, quizID)
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
}
if !isOwner {
return ctx.Status(fiber.StatusUnauthorized).SendString("not the owner")
}
account, err := r.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID)
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
@ -150,7 +158,6 @@ func (r *Result) SetStatus(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusOK).JSON(nil)
}
// todo тоже не можем получить не относящиеся результаты к аккаунту так как имеем что то вроде проверки в GetQuizById
func (r *Result) ExportResultsToCSV(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx)
if !ok {
@ -212,7 +219,6 @@ func (r *Result) ExportResultsToCSV(ctx *fiber.Ctx) error {
return ctx.Send(buffer.Bytes())
}
// todo возможна ситуация получения чужих результатов, нужна проверка от CheckResultOwner
func (r *Result) GetResultAnswers(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx)
if !ok {
@ -224,6 +230,15 @@ func (r *Result) GetResultAnswers(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("invalid quiz ID")
}
isOwner, err := r.dal.ResultRepo.CheckResultOwner(ctx.Context(), resultID, accountID)
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
}
if !isOwner {
return ctx.Status(fiber.StatusUnauthorized).SendString("not the owner of the result")
}
account, err := r.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID)
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())