delete base user log data and movw mw to common pj

This commit is contained in:
Pavel 2024-06-07 17:44:09 +03:00
parent 0576d3d45f
commit 314186e921
8 changed files with 35 additions and 131 deletions

4
go.mod

@ -14,11 +14,11 @@ require (
github.com/stretchr/testify v1.8.4 github.com/stretchr/testify v1.8.4
github.com/twmb/franz-go v1.15.4 github.com/twmb/franz-go v1.15.4
go.mongodb.org/mongo-driver v1.13.1 go.mongodb.org/mongo-driver v1.13.1
go.uber.org/zap v1.26.0 go.uber.org/zap v1.27.0
google.golang.org/genproto/googleapis/api v0.0.0-20240116215550-a9fa1716bcac google.golang.org/genproto/googleapis/api v0.0.0-20240116215550-a9fa1716bcac
google.golang.org/grpc v1.60.1 google.golang.org/grpc v1.60.1
google.golang.org/protobuf v1.32.0 google.golang.org/protobuf v1.32.0
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240607142502-8257e6c4aa5a
) )
require ( require (

3
go.sum

@ -161,6 +161,7 @@ go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@ -287,5 +288,7 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= 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 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/penahub_common v0.0.0-20240202120244-c4ef330cfe5d/go.mod h1:lTmpjry+8evVkXWbEC+WMOELcFkRD1lFMc7J09mOndM=
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240607142502-8257e6c4aa5a h1:dGW8ErUVdwGJBq6uc5AHYn6Yt10CDNkMIpV+yrDDTLs=
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240607142502-8257e6c4aa5a/go.mod h1:+bPxq2wfW5S1gd+83vZYmHm33AE7nEBfznWS8AM1TKE=
penahub.gitlab.yandexcloud.net/external/trashlog.git v0.1.2-0.20240523172059-9bbe8a9faa31 h1:WlRVJnzU0sti+qBq/JTCgFPU0RoxIqGHu7hzDirxE2k= penahub.gitlab.yandexcloud.net/external/trashlog.git v0.1.2-0.20240523172059-9bbe8a9faa31 h1:WlRVJnzU0sti+qBq/JTCgFPU0RoxIqGHu7hzDirxE2k=
penahub.gitlab.yandexcloud.net/external/trashlog.git v0.1.2-0.20240523172059-9bbe8a9faa31/go.mod h1:3ml0dAGT8U8RhpevKBfRgG6yKZum8EI2uJxAb2WCIy4= penahub.gitlab.yandexcloud.net/external/trashlog.git v0.1.2-0.20240523172059-9bbe8a9faa31/go.mod h1:3ml0dAGT8U8RhpevKBfRgG6yKZum8EI2uJxAb2WCIy4=

@ -9,7 +9,7 @@ import (
"fmt" "fmt"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/zap" "go.uber.org/zap"
"strings" "penahub.gitlab.yandexcloud.net/backend/penahub_common/log_mw"
) )
type Deps struct { type Deps struct {
@ -31,7 +31,7 @@ func NewPromoCodeController(deps Deps) *PromoCodeController {
func (p *PromoCodeController) CreatePromoCode(c *fiber.Ctx) error { func (p *PromoCodeController) CreatePromoCode(c *fiber.Ctx) error {
userID := middleware.ExtractUserID(c) userID := middleware.ExtractUserID(c)
hlogger := middleware.ExtractLogger(c) hlogger := log_mw.ExtractLogger(c)
var req models.PromoCode var req models.PromoCode
if err := c.BodyParser(&req); err != nil { if err := c.BodyParser(&req); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"}) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
@ -79,10 +79,6 @@ func (p *PromoCodeController) CreatePromoCode(c *fiber.Ctx) error {
} }
hlogger.Emit(models.InfoPromocodeCreated{ hlogger.Emit(models.InfoPromocodeCreated{
CtxUserIP: c.IP(),
CtxUserPort: c.Port(),
KeyDomain: strings.Join(c.Subdomains(), "/"),
KeyPath: c.Path(),
CtxID: createdPromoCode.ID.String(), CtxID: createdPromoCode.ID.String(),
CtxUserID: userID, CtxUserID: userID,
KeyType: keyType, KeyType: keyType,
@ -98,7 +94,7 @@ func (p *PromoCodeController) CreatePromoCode(c *fiber.Ctx) error {
func (p *PromoCodeController) EditPromoCode(c *fiber.Ctx) error { func (p *PromoCodeController) EditPromoCode(c *fiber.Ctx) error {
userID := middleware.ExtractUserID(c) userID := middleware.ExtractUserID(c)
hlogger := middleware.ExtractLogger(c) hlogger := log_mw.ExtractLogger(c)
var req models.ReqEditPromoCode var req models.ReqEditPromoCode
if err := c.BodyParser(&req); err != nil { if err := c.BodyParser(&req); err != nil {
@ -147,10 +143,6 @@ func (p *PromoCodeController) EditPromoCode(c *fiber.Ctx) error {
} }
hlogger.Emit(models.InfoPromocodeUpdated{ hlogger.Emit(models.InfoPromocodeUpdated{
CtxUserIP: c.IP(),
CtxUserPort: c.Port(),
KeyDomain: strings.Join(c.Subdomains(), "/"),
KeyPath: c.Path(),
CtxID: editedPromoCode.ID.String(), CtxID: editedPromoCode.ID.String(),
CtxUserID: userID, CtxUserID: userID,
KeyType: keyType, KeyType: keyType,
@ -184,7 +176,7 @@ func (p *PromoCodeController) GetList(c *fiber.Ctx) error {
func (p *PromoCodeController) Activate(c *fiber.Ctx) error { func (p *PromoCodeController) Activate(c *fiber.Ctx) error {
userID := middleware.ExtractUserID(c) userID := middleware.ExtractUserID(c)
hlogger := middleware.ExtractLogger(c) hlogger := log_mw.ExtractLogger(c)
fmt.Println("SKER1", userID) fmt.Println("SKER1", userID)
if userID == "" { if userID == "" {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "failed to get jwt payload"}) return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "failed to get jwt payload"})
@ -212,20 +204,13 @@ func (p *PromoCodeController) Activate(c *fiber.Ctx) error {
return c.Status(fiber.StatusForbidden).JSON(fiber.Map{"error": "PromoCode already activated"}) return c.Status(fiber.StatusForbidden).JSON(fiber.Map{"error": "PromoCode already activated"})
case errors.Is(err, repository.ErrPromoCodeExpired): case errors.Is(err, repository.ErrPromoCodeExpired):
hlogger.Emit(models.InfoPromocodeDeadlined{ hlogger.Emit(models.InfoPromocodeDeadlined{
CtxUserIP: c.IP(),
CtxUserPort: c.Port(), CtxID: promocode.ID.String(),
KeyDomain: strings.Join(c.Subdomains(), "/"),
KeyPath: c.Path(),
CtxID: promocode.ID.String(),
}) })
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": err.Error()}) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": err.Error()})
case errors.Is(err, repository.ErrPromoCodeExhausted): case errors.Is(err, repository.ErrPromoCodeExhausted):
hlogger.Emit(models.InfoPromocodeExhausted{ hlogger.Emit(models.InfoPromocodeExhausted{
CtxUserIP: c.IP(), CtxID: promocode.ID.String(),
CtxUserPort: c.Port(),
KeyDomain: strings.Join(c.Subdomains(), "/"),
KeyPath: c.Path(),
CtxID: promocode.ID.String(),
}) })
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "PromoCode exhausted"}) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "PromoCode exhausted"})
default: default:
@ -235,20 +220,12 @@ func (p *PromoCodeController) Activate(c *fiber.Ctx) error {
if req.Codeword != "" { if req.Codeword != "" {
hlogger.Emit(models.InfoPromocodeActivated{ hlogger.Emit(models.InfoPromocodeActivated{
CtxUserIP: c.IP(), CtxID: promocode.ID.String(),
CtxUserPort: c.Port(), CtxUserID: userID,
KeyDomain: strings.Join(c.Subdomains(), "/"), CtxCode: req.Codeword,
KeyPath: c.Path(),
CtxID: promocode.ID.String(),
CtxUserID: userID,
CtxCode: req.Codeword,
}) })
} else if req.FastLink != "" { } else if req.FastLink != "" {
hlogger.Emit(models.InfoFastlinkActivated{ hlogger.Emit(models.InfoFastlinkActivated{
CtxUserIP: c.IP(),
CtxUserPort: c.Port(),
KeyDomain: strings.Join(c.Subdomains(), "/"),
KeyPath: c.Path(),
CtxID: promocode.ID.String(), CtxID: promocode.ID.String(),
CtxUserID: userID, CtxUserID: userID,
CtxPromocodeID: req.FastLink, CtxPromocodeID: req.FastLink,
@ -260,7 +237,7 @@ func (p *PromoCodeController) Activate(c *fiber.Ctx) error {
func (p *PromoCodeController) Delete(c *fiber.Ctx) error { func (p *PromoCodeController) Delete(c *fiber.Ctx) error {
userID := middleware.ExtractUserID(c) userID := middleware.ExtractUserID(c)
hlogger := middleware.ExtractLogger(c) hlogger := log_mw.ExtractLogger(c)
promoCodeID := c.Params("promocodeID") promoCodeID := c.Params("promocodeID")
if promoCodeID == "" { if promoCodeID == "" {
@ -279,12 +256,8 @@ func (p *PromoCodeController) Delete(c *fiber.Ctx) error {
} }
hlogger.Emit(models.InfoPromocodeDeleted{ hlogger.Emit(models.InfoPromocodeDeleted{
CtxUserIP: c.IP(), CtxID: promoCodeID,
CtxUserPort: c.Port(), CtxUserID: userID,
KeyDomain: strings.Join(c.Subdomains(), "/"),
KeyPath: c.Path(),
CtxID: promoCodeID,
CtxUserID: userID,
}) })
return c.SendStatus(fiber.StatusOK) return c.SendStatus(fiber.StatusOK)
@ -292,7 +265,7 @@ func (p *PromoCodeController) Delete(c *fiber.Ctx) error {
func (p *PromoCodeController) CreateFastLink(c *fiber.Ctx) error { func (p *PromoCodeController) CreateFastLink(c *fiber.Ctx) error {
userID := middleware.ExtractUserID(c) userID := middleware.ExtractUserID(c)
hlogger := middleware.ExtractLogger(c) hlogger := log_mw.ExtractLogger(c)
var req struct { var req struct {
PromoCodeID string `json:"id"` PromoCodeID string `json:"id"`
@ -317,10 +290,6 @@ func (p *PromoCodeController) CreateFastLink(c *fiber.Ctx) error {
} }
hlogger.Emit(models.InfoFastlinkCreated{ hlogger.Emit(models.InfoFastlinkCreated{
CtxUserIP: c.IP(),
CtxUserPort: c.Port(),
KeyDomain: strings.Join(c.Subdomains(), "/"),
KeyPath: c.Path(),
CtxID: fastLink, CtxID: fastLink,
CtxPromocodeID: req.PromoCodeID, CtxPromocodeID: req.PromoCodeID,
CtxUserID: userID, CtxUserID: userID,

@ -4,13 +4,12 @@ import (
"codeword/internal/models" "codeword/internal/models"
"codeword/internal/repository" "codeword/internal/repository"
"codeword/internal/services" "codeword/internal/services"
"codeword/internal/utils/middleware"
"encoding/base64" "encoding/base64"
"errors" "errors"
"fmt" "fmt"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"go.uber.org/zap" "go.uber.org/zap"
"strings" "penahub.gitlab.yandexcloud.net/backend/penahub_common/log_mw"
"time" "time"
) )
@ -56,7 +55,7 @@ func (r *RecoveryController) HandlePingDB(c *fiber.Ctx) error {
} }
func (r *RecoveryController) HandleRecoveryRequest(c *fiber.Ctx) error { func (r *RecoveryController) HandleRecoveryRequest(c *fiber.Ctx) error {
hlogger := middleware.ExtractLogger(c) hlogger := log_mw.ExtractLogger(c)
var req models.RecoveryRequest var req models.RecoveryRequest
if err := c.BodyParser(&req); err != nil { if err := c.BodyParser(&req); err != nil {
r.logger.Error("Failed to parse recovery request", zap.Error(err)) r.logger.Error("Failed to parse recovery request", zap.Error(err))
@ -115,10 +114,6 @@ func (r *RecoveryController) HandleRecoveryRequest(c *fiber.Ctx) error {
} }
hlogger.Emit(models.InfoPasswordRestorationRequested{ hlogger.Emit(models.InfoPasswordRestorationRequested{
CtxUserIP: c.IP(),
CtxUserPort: c.Port(),
KeyDomain: strings.Join(c.Subdomains(), "/"),
KeyPath: c.Path(),
CtxID: id, CtxID: id,
CtxUserID: user.ID.Hex(), CtxUserID: user.ID.Hex(),
CtxReturnURL: r.recoveryURL + signWithID, CtxReturnURL: r.recoveryURL + signWithID,
@ -129,7 +124,7 @@ func (r *RecoveryController) HandleRecoveryRequest(c *fiber.Ctx) error {
} }
func (r *RecoveryController) HandleRecoveryLink(c *fiber.Ctx) error { func (r *RecoveryController) HandleRecoveryLink(c *fiber.Ctx) error {
hlogger := middleware.ExtractLogger(c) hlogger := log_mw.ExtractLogger(c)
sign := c.Params("sign") sign := c.Params("sign")
record, err := r.service.GetRecoveryRecord(c.Context(), sign) record, err := r.service.GetRecoveryRecord(c.Context(), sign)
@ -167,12 +162,8 @@ func (r *RecoveryController) HandleRecoveryLink(c *fiber.Ctx) error {
}) })
hlogger.Emit(models.InfoPasswordRestored{ hlogger.Emit(models.InfoPasswordRestored{
CtxUserIP: c.IP(), CtxID: record.ID.String(),
CtxUserPort: c.Port(), CtxUserID: record.UserID,
KeyDomain: strings.Join(c.Subdomains(), "/"),
KeyPath: c.Path(),
CtxID: record.ID.String(),
CtxUserID: record.UserID,
}) })
return c.Redirect(record.SignUrl + "?auth=" + tokens["accessToken"]) return c.Redirect(record.SignUrl + "?auth=" + tokens["accessToken"])

@ -12,4 +12,3 @@ type RefreshResponse struct {
const AuthJWTDecodedUserIDKey = "userID" const AuthJWTDecodedUserIDKey = "userID"
const AuthJWTDecodedAccessTokenKey = "access-token" const AuthJWTDecodedAccessTokenKey = "access-token"
const LoggerKey = "logger"

@ -19,10 +19,6 @@ type AllFields struct {
} }
type InfoPromocodeCreated struct { type InfoPromocodeCreated struct {
CtxUserIP string
CtxUserPort string
KeyDomain string
KeyPath string
CtxID string //айдишник созданного промокода CtxID string //айдишник созданного промокода
CtxUserID string //айдишник юзера из токена CtxUserID string //айдишник юзера из токена
KeyType string //привилегия или скидка. или и то и другое, смотря что заполнено KeyType string //привилегия или скидка. или и то и другое, смотря что заполнено
@ -33,27 +29,15 @@ type InfoPromocodeCreated struct {
CtxCode string CtxCode string
} }
type InfoFastlinkCreated struct { type InfoFastlinkCreated struct {
CtxUserIP string
CtxUserPort string
KeyDomain string
KeyPath string
CtxID string //айдишник созданного промокода CtxID string //айдишник созданного промокода
CtxPromocodeID string //айдишник созданного промокода CtxPromocodeID string //айдишник созданного промокода
CtxUserID string //айдишник юзера из токена CtxUserID string //айдишник юзера из токена
} }
type InfoPromocodeDeleted struct { type InfoPromocodeDeleted struct {
CtxUserIP string CtxID string //айдишник созданного промокода
CtxUserPort string CtxUserID string //айдишник юзера из токена
KeyDomain string
KeyPath string
CtxID string //айдишник созданного промокода
CtxUserID string //айдишник юзера из токена
} }
type InfoPromocodeUpdated struct { type InfoPromocodeUpdated struct {
CtxUserIP string
CtxUserPort string
KeyDomain string
KeyPath string
CtxID string //айдишник промокода CtxID string //айдишник промокода
CtxUserID string //айдишник юзера из токена CtxUserID string //айдишник юзера из токена
KeyType string //привилегия или скидка. или и то и другое, смотря что заполнено KeyType string //привилегия или скидка. или и то и другое, смотря что заполнено
@ -64,52 +48,28 @@ type InfoPromocodeUpdated struct {
CtxCode string CtxCode string
} }
type InfoPromocodeActivated struct { type InfoPromocodeActivated struct {
CtxUserIP string CtxID string //айдишник промокода
CtxUserPort string CtxUserID string //айдишник юзера из токена
KeyDomain string CtxCode string
KeyPath string
CtxID string //айдишник промокода
CtxUserID string //айдишник юзера из токена
CtxCode string
} }
type InfoFastlinkActivated struct { type InfoFastlinkActivated struct {
CtxUserIP string
CtxUserPort string
KeyDomain string
KeyPath string
CtxID string //айдишник промокода CtxID string //айдишник промокода
CtxUserID string //айдишник юзера из токена CtxUserID string //айдишник юзера из токена
CtxPromocodeID string //айдишник созданного промокода CtxPromocodeID string //айдишник созданного промокода
} }
type InfoPromocodeExhausted struct { type InfoPromocodeExhausted struct {
CtxUserIP string CtxID string //айдишник промокода
CtxUserPort string
KeyDomain string
KeyPath string
CtxID string //айдишник промокода
} }
type InfoPromocodeDeadlined struct { type InfoPromocodeDeadlined struct {
CtxUserIP string CtxID string //айдишник промокода
CtxUserPort string
KeyDomain string
KeyPath string
CtxID string //айдишник промокода
} }
type InfoPasswordRestorationRequested struct { type InfoPasswordRestorationRequested struct {
CtxUserIP string
CtxUserPort string
KeyDomain string
KeyPath string
CtxID string //айдишник промокода CtxID string //айдишник промокода
CtxUserID string //айдишник юзера из токена CtxUserID string //айдишник юзера из токена
CtxReturnURL string // ссылка на восстановление пароля CtxReturnURL string // ссылка на восстановление пароля
CtxEmail string CtxEmail string
} }
type InfoPasswordRestored struct { type InfoPasswordRestored struct {
CtxUserIP string CtxID string //айдишник промокода
CtxUserPort string CtxUserID string //айдишник юзера из токена
KeyDomain string
KeyPath string
CtxID string //айдишник промокода
CtxUserID string //айдишник юзера из токена
} }

@ -7,6 +7,7 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/themakers/hlog" "github.com/themakers/hlog"
"go.uber.org/zap" "go.uber.org/zap"
"penahub.gitlab.yandexcloud.net/backend/penahub_common/log_mw"
) )
type ServerConfig struct { type ServerConfig struct {
@ -24,7 +25,7 @@ type Server struct {
func NewServer(config ServerConfig) *Server { func NewServer(config ServerConfig) *Server {
app := fiber.New() app := fiber.New()
app.Use(middleware.ContextLogger(config.Hlogger)) app.Use(log_mw.ContextLogger(config.Hlogger))
app.Use("/promocode", middleware.NewAuthenticator(config.JWT)) app.Use("/promocode", middleware.NewAuthenticator(config.JWT))
s := &Server{ s := &Server{
Logger: config.Logger, Logger: config.Logger,

@ -1,19 +0,0 @@
package middleware
import (
"codeword/internal/models"
"github.com/gofiber/fiber/v2"
"github.com/themakers/hlog"
)
func ContextLogger(logger hlog.Logger) fiber.Handler {
return func(c *fiber.Ctx) error {
c.Locals(models.LoggerKey, logger)
return c.Next()
}
}
func ExtractLogger(c *fiber.Ctx) hlog.Logger {
logger := c.Context().UserValue(models.LoggerKey).(hlog.Logger)
return logger
}