// package anonym_find -- анонимный поиск ключей по префиксу в хранилище package anonym_find import ( "encoding/json" "fmt" "log" "strings" "github.com/gofiber/fiber/v2" "git.p78su.freemyip.com/svi/gostore/pkg/msg_net" "git.p78su.freemyip.com/svi/gostore/pkg/types" ) // AnonymFind -- анонимный поиск ключей по префиксу в хранилище type AnonymFind struct { serv types.IService store types.IStore } // NewAnonymFind -- возвращает анонимный поиск ключей по префиксу в хранилище func NewAnonymFind(servHttp types.IServHttp, router fiber.Router) (*AnonymFind, error) { { // Предусловия if servHttp == nil { return nil, fmt.Errorf("NewAnonymFind(): IServHttp==nil") } if router == nil { return nil, fmt.Errorf("NewAnonymFind(): router==nil") } } sf := &AnonymFind{ serv: servHttp.Service(), store: servHttp.Service().Store(), } router.Get("/find", sf.get) router.Post("/find_check_prefix", sf.findCheckPrefix) router.Post("/find", sf.post) return sf, nil } // Проверяет допустимость ключа для анонимного хранилища func (sf *AnonymFind) findCheckPrefix(ctx *fiber.Ctx) error { strBody := string(ctx.Body()) log.Println("AnonymFind.findCheckPrefix():", strBody) req := &msg_net.MsgFindRequest{} err := ctx.BodyParser(req) if err != nil { return ctx.SendString("AnonymFind.findCheckPrefix(): " + err.Error()) } if req.Key_ == "" { return ctx.SendString("AnonymFind.findCheckPrefix(): ключ не может быть пустым") } return ctx.SendString("AnonymFind.findCheckPrefix(): годный ключ") } // Возвращает страницу анонимного раздела func (sf *AnonymFind) get(ctx *fiber.Ctx) error { return ctx.Render("anonym_find", fiber.Map{}) } // Возвращает список ключей по префиксу из анонимного хранилища func (sf *AnonymFind) post(ctx *fiber.Ctx) error { req := &msg_net.MsgFindRequest{} if err := ctx.BodyParser(req); err != nil { return ctx.Render("anonym_find", fiber.Map{ "res": fmt.Sprintf("AnonymFind.post(): при парсинге формы, err=%v", err), }) } if req.Key_ == "" { return ctx.Render("anonym_find", fiber.Map{ "res": "AnonymFind.post(): ключ не может быть пустым", }) } var err error req.Values_, err = sf.store.Find("anon/" + req.Key_) if err != nil { return ctx.Render("anonym_find", fiber.Map{ "res": fmt.Sprintf("AnonymFind.post(): при поиске ключей по префиксу %q из хранилища, err=%v", req.Key_, err), }) } for adr, val := range req.Values_ { req.Values_[adr] = strings.TrimPrefix(val, "anon/") } binResp, _ := json.MarshalIndent(req, "", " ") return ctx.SendString(string(binResp)) }