some update

This commit is contained in:
Pavel 2024-03-13 19:57:12 +03:00
parent 968cb49c7f
commit 63460dc78d
9 changed files with 28 additions and 100 deletions

@ -11,9 +11,9 @@ import (
"penahub.gitlab.yandexcloud.net/backend/penahub_common/privilege"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/healthchecks"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/core.git/clients/auth"
"penahub.gitlab.yandexcloud.net/backend/quiz/core.git/middleware"
"penahub.gitlab.yandexcloud.net/backend/quiz/core.git/service"
)
@ -110,7 +110,7 @@ func New(ctx context.Context, opts interface{}, ver appInit.Version) (appInit.Co
privilegeController := privilege.NewPrivilege(clientData, fiberClient)
err = privilegeController.PublishPrivileges()
if err != nil {
logger.Module("Failed to publish privileges")
fmt.Println("Failed to publish privileges", err)
}
app := fiber.New()

@ -37,7 +37,7 @@ func (client *AuthClient) GetUserEmail(userID string) (string, error) {
}
if status != fiber.StatusOK {
return "", fmt.Errorf("unexpected status code: %d, user: %s, reesponse: %s", status, userID, string(resp))
return "", fmt.Errorf("unexpected status code: %d, user: %s, reesponse: %s", status, userID, string(resp))
}
return user.Email, nil

5
go.mod

@ -4,18 +4,18 @@ go 1.21.4
require (
github.com/gofiber/fiber/v2 v2.52.0
github.com/golang-jwt/jwt/v5 v5.2.0
github.com/lib/pq v1.10.9
github.com/skeris/appInit v1.0.2
github.com/tealeg/xlsx v1.0.5
github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf
go.uber.org/zap v1.26.0
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240219175507-7f8de986a6dc
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240313164312-4560248259a0
)
require (
github.com/andybalholm/brotli v1.0.5 // indirect
github.com/golang-jwt/jwt/v5 v5.2.0 // indirect
github.com/golang-migrate/migrate/v4 v4.17.0 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/uuid v1.6.0 // indirect
@ -26,6 +26,7 @@ require (
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/rs/xid v1.5.0 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasthttp v1.51.0 // indirect
github.com/valyala/tcplisten v1.0.0 // indirect

6
go.sum

@ -73,6 +73,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/skeris/appInit v1.0.2 h1:Hr4KbXYd6kolTVq4cXGqDpgnpmaauiOiKizA1+Ep4KQ=
github.com/skeris/appInit v1.0.2/go.mod h1:4ElEeXWVGzU3dlYq/eMWJ/U5hd+LKisc1z3+ySh1XmY=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@ -146,5 +148,5 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d h1:gbaDt35HMDqOK84WYmDIlXMI7rstUcRqNttaT6Kx1do=
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d/go.mod h1:lTmpjry+8evVkXWbEC+WMOELcFkRD1lFMc7J09mOndM=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240219175507-7f8de986a6dc h1:jIN9XyfL/FJ/eSsYopE1olHboituwmisC1Sf1d4nhWE=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240219175507-7f8de986a6dc/go.mod h1:OXYvMlc+3qfcllPTywUB3QDiPK1kwsMNdZMTlPXFIdo=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240313164312-4560248259a0 h1:YbffFOWneoINvEqCWClf5Zatu/a0VNo9RM0nYveCzhk=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240313164312-4560248259a0/go.mod h1:JgbH8cdAJBr3jx3BuY5nnuTyMdZ1XkRxo8a3w4Y3C0Y=

@ -1,80 +0,0 @@
package middleware
import (
"github.com/gofiber/fiber/v2"
"os"
"strings"
"time"
"github.com/golang-jwt/jwt/v5"
)
const (
AccountId = "id"
)
func JWTAuth() fiber.Handler {
return func(c *fiber.Ctx) error {
authHeader := c.Get("Authorization")
if authHeader == "" {
c.Status(fiber.StatusUnauthorized).SendString("no JWT found")
return nil
}
tokenString := strings.TrimPrefix(authHeader, "Bearer ")
if tokenString == authHeader {
c.Status(fiber.StatusUnauthorized).SendString("invalid JWT Header: missing Bearer")
return nil
}
publicKey := os.Getenv("PUBLIC_ACCESS_SECRET_KEY")
if publicKey == "" {
// TODO log
c.Status(fiber.StatusInternalServerError).SendString("public key not found")
return nil
}
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
return jwt.ParseRSAPublicKeyFromPEM([]byte(publicKey))
})
if err != nil {
c.Status(fiber.StatusUnauthorized).SendString("invalid JWT")
return nil
}
if token.Valid {
expirationTime, err := token.Claims.GetExpirationTime()
if err != nil {
c.Status(fiber.StatusUnauthorized).SendString("no expiration time in JWT")
return nil
}
if time.Now().Unix() >= expirationTime.Unix() {
c.Status(fiber.StatusUnauthorized).SendString("expired JWT")
return nil
}
} else {
c.Status(fiber.StatusUnauthorized).SendString("invalid JWT")
return nil
}
m, ok := token.Claims.(jwt.MapClaims)
if !ok {
c.Status(fiber.StatusInternalServerError).SendString("broken token claims")
return nil
}
id, ok := m["id"].(string)
if !ok || id == "" {
c.Status(fiber.StatusUnauthorized).SendString("missing id claim in JWT")
return nil
}
c.Context().SetUserValue(AccountId, id)
return c.Next()
}
}
func GetAccountId(c *fiber.Ctx) (string, bool) {
id, ok := c.Context().UserValue(AccountId).(string)
return id, ok
}

@ -3,8 +3,8 @@ package service
import (
"database/sql"
"github.com/gofiber/fiber/v2"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/core.git/middleware"
"time"
)

@ -2,9 +2,9 @@ package service
import (
"github.com/gofiber/fiber/v2"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/quiz"
"penahub.gitlab.yandexcloud.net/backend/quiz/core.git/middleware"
"time"
"unicode/utf8"
)

@ -3,10 +3,10 @@ package service
import (
"bytes"
"github.com/gofiber/fiber/v2"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/result"
"penahub.gitlab.yandexcloud.net/backend/quiz/core.git/middleware"
"penahub.gitlab.yandexcloud.net/backend/quiz/core.git/pkg"
"penahub.gitlab.yandexcloud.net/backend/quiz/core.git/tools"
"strconv"
"time"
)
@ -46,9 +46,10 @@ func (s *Service) GetResultsByQuizID(ctx *fiber.Ctx) error {
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
}
if len(account.Privileges) == 0 {
payment = false
if _, cnt := account.Privileges["quizCnt"]; !cnt {
if _, unlim := account.Privileges["quizUnlimTime"]; !unlim {
payment = false
}
}
results, totalCount, err := s.dal.ResultRepo.GetQuizResults(ctx.Context(), quizID, result.GetQuizResDeps{
@ -152,8 +153,10 @@ func (s *Service) ExportResultsToCSV(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
}
if len(account.Privileges) == 0 {
return ctx.Status(fiber.StatusPaymentRequired).SendString("payment required")
if _, cnt := account.Privileges["quizCnt"]; !cnt {
if _, unlim := account.Privileges["quizUnlimTime"]; !unlim {
return ctx.Status(fiber.StatusPaymentRequired).SendString("payment required")
}
}
questions, err := s.dal.ResultRepo.GetQuestions(ctx.Context(), quizID)
@ -174,7 +177,7 @@ func (s *Service) ExportResultsToCSV(ctx *fiber.Ctx) error {
buffer := new(bytes.Buffer)
if err := pkg.WriteDataToExcel(buffer, questions, answers); err != nil {
if err := tools.WriteDataToExcel(buffer, questions, answers); err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to write data to Excel")
}
@ -200,8 +203,10 @@ func (s *Service) GetResultAnswers(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
}
if len(account.Privileges) == 0 {
return ctx.Status(fiber.StatusPaymentRequired).SendString("payment required")
if _, cnt := account.Privileges["quizCnt"]; !cnt {
if _, unlim := account.Privileges["quizUnlimTime"]; !unlim {
return ctx.Status(fiber.StatusPaymentRequired).SendString("payment required")
}
}
answers, err := s.dal.ResultRepo.GetResultAnswers(ctx.Context(), resultID)

@ -1,4 +1,4 @@
package pkg
package tools
import (
"github.com/tealeg/xlsx"