diff --git a/internal/controller/recovery/recovery_controller.go b/internal/controller/recovery/recovery_controller.go index 8db3fd2..9b9b061 100644 --- a/internal/controller/recovery/recovery_controller.go +++ b/internal/controller/recovery/recovery_controller.go @@ -1,7 +1,9 @@ package controller import ( + "codeword/internal/models" "codeword/internal/services" + "encoding/base64" "github.com/gofiber/fiber/v2" "go.uber.org/zap" "time" @@ -40,39 +42,35 @@ func (r *RecoveryController) HandleRecoveryRequest(c *fiber.Ctx) error { user, err := r.service.FindUserByEmail(c.Context(), email) if err != nil || user == nil { r.logger.Error("Failed to find user by email", zap.Error(err)) - return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "User not found FindUserByEmail"}) + return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "User not found"}) + } + key := []byte("GSiyv5zBITGshqnvYLHKtXE3e4yZjKGvruOVFWuUuj9Nvaps28-Zt6RDq9n47eaNUlay1-nUVld61I3xoAAgCA==65a79d5d67734ab00b3c9463") + //key, err := r.service.GenerateKey() + //if err != nil { + // r.logger.Error("Failed to generate key", zap.Error(err)) + // return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Internal Server Error"}) + //} + + signUrl := redirectionURL + base64.URLEncoding.EncodeToString(key) + sign := base64.URLEncoding.EncodeToString(key) + + id, err := r.service.StoreRecoveryRecord(c.Context(), models.StoreRecDeps{UserID: user.ID.Hex(), Email: user.Email, Key: sign, Url: signUrl}) + if err != nil { + r.logger.Error("Failed to store recovery record", zap.Error(err)) + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Internal Server Error"}) } - key, err := r.service.GenerateKey() + signWithID := sign + id // подпись с id записи + + err = r.service.RecoveryEmailTask(c.Context(), models.RecEmailDeps{UserID: user.ID.Hex(), Email: email, SignWithID: signWithID, ID: id}) if err != nil { - r.logger.Error("Failed to generate key", zap.Error(err)) - return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) + r.logger.Error("Failed to send recovery email", zap.Error(err)) + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Internal Server Error"}) } return c.Status(fiber.StatusOK).JSON(fiber.Map{ - "id": key, + "id": id, }) - - //signUrl := redirectionURL + base64.URLEncoding.EncodeToString(key) - //sign := base64.URLEncoding.EncodeToString(key) - // - //id, err := r.service.StoreRecoveryRecord(c.Context(), models.StoreRecDeps{UserID: user.ID.Hex(), Email: user.Email, Key: sign, Url: signUrl}) - //if err != nil { - // r.logger.Error("Failed to store recovery record", zap.Error(err)) - // return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Internal Server Error StoreRecoveryRecord"}) - //} - // - //signWithID := sign + id // подпись с id записи - // - //err = r.service.RecoveryEmailTask(c.Context(), models.RecEmailDeps{UserID: user.ID.Hex(), Email: email, SignWithID: signWithID, ID: id}) - //if err != nil { - // r.logger.Error("Failed to send recovery email", zap.Error(err)) - // return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Internal Server Error RecoveryEmailTask"}) - //} - // - //return c.Status(fiber.StatusOK).JSON(fiber.Map{ - // "id": id, - //}) } // todo тут скорее всего помимо подписи будет передаваться еще что-то, например email пользователя от фронта для поиска в бд diff --git a/internal/utils/encrypt/encrypt_util.go b/internal/utils/encrypt/encrypt_util.go index cf5a040..9f2d4ac 100644 --- a/internal/utils/encrypt/encrypt_util.go +++ b/internal/utils/encrypt/encrypt_util.go @@ -21,13 +21,9 @@ type Encrypt struct { } func New(deps *EncryptDeps) *Encrypt { - publicKey := "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAEbnIvjIMle4rqVol6K2XUqOxHy1KJoNoZdKJrRUPKL4=\n-----END PUBLIC KEY-----" - privateKey := "-----BEGIN PRIVATE KEY-----\nMC4CAQAwBQYDK2VwBCIEIKn0BKwF3vZvODgWAnUIwQhd8de5oZhY48gc23EWfrfs\n-----END PRIVATE KEY-----" return &Encrypt{ - //publicKey: deps.PublicKey, - //privateKey: deps.PrivateKey, - publicKey: publicKey, - privateKey: privateKey, + publicKey: deps.PublicKey, + privateKey: deps.PrivateKey, signSecret: deps.SignSecret, } }