diff --git a/internal/controllers/http_controllers/result/result.go b/internal/controllers/http_controllers/result/result.go index 838e44f..255e450 100644 --- a/internal/controllers/http_controllers/result/result.go +++ b/internal/controllers/http_controllers/result/result.go @@ -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())