// package anonym_read -- анонимное чтение ключа из хранилища package anonym_read import ( "encoding/json" "fmt" "log" "github.com/gofiber/fiber/v2" "git.p78su.freemyip.com/svi/gostore/pkg/types" ) // AnonymRead -- анонимное читает ключа из хранилища type AnonymRead struct { serv types.IService store types.IStore } // NewAnonymRead -- возвращает анонимное чтение ключа из хранилища func NewAnonymRead(servHttp types.IServHttp, router fiber.Router) (*AnonymRead, error) { { // Предусловия if servHttp == nil { return nil, fmt.Errorf("NewAnonymRead(): IServHttp==nil") } if router == nil { return nil, fmt.Errorf("NewAnonymRead(): router==nil") } } sf := &AnonymRead{ serv: servHttp.Service(), store: servHttp.Service().Store(), } router.Get("/get", sf.get) router.Post("/get_check_key", sf.readCheckKey) router.Post("/get", sf.post) return sf, nil } // ReadRequest -- читает значение из анонимного хранилища type ReadRequest struct { Key_ string `json:"key" form:"key"` // Ключ для хранилища Value_ string `json:"val" form:"val"` // Значение для хранилища } // Проверяет допустимость ключа для анонимного хранилища func (sf *AnonymRead) readCheckKey(ctx *fiber.Ctx) error { strBody := string(ctx.Body()) log.Println("AnonymRead.readCheckKey():", strBody) req := &ReadRequest{} err := ctx.BodyParser(req) if err != nil { return ctx.SendString("AnonymRead.readCheckKey(): " + err.Error()) } if req.Key_ == "" { return ctx.SendString("AnonymRead.readCheckKey(): ключ не может быть пустым") } return ctx.SendString("AnonymRead.readCheckKey(): годный ключ") } // Возвращает страницу анонимного раздела func (sf *AnonymRead) get(ctx *fiber.Ctx) error { return ctx.Render("anonym_get", fiber.Map{}) } // Возвращает значение из анонимного хранилища func (sf *AnonymRead) post(ctx *fiber.Ctx) error { req := &ReadRequest{} if err := ctx.BodyParser(req); err != nil { return ctx.Render("anonym_get", fiber.Map{ "res": fmt.Sprintf("AnonymRead.post(): при парсинге формы, err=%v", err), }) } if req.Key_ == "" { return ctx.Render("anonym_get", fiber.Map{ "res": "AnonymRead.post(): ключ не может быть пустым", }) } binVal, err := sf.store.Get("anon/" + req.Key_) if err != nil { return ctx.Render("anonym_get", fiber.Map{ "res": fmt.Sprintf("AnonymRead.post(): при получении ключа %q из хранилища, err=%v", req.Key_, err), }) } req.Value_ = string(binVal) binResp, _ := json.MarshalIndent(req, "", " ") return ctx.SendString(string(binResp)) }