anonym_find.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // package anonym_find -- анонимный поиск ключей по префиксу в хранилище
  2. package anonym_find
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. "log"
  7. "strings"
  8. "github.com/gofiber/fiber/v2"
  9. "git.p78su.freemyip.com/svi/gostore/pkg/msg_net"
  10. "git.p78su.freemyip.com/svi/gostore/pkg/types"
  11. )
  12. // AnonymFind -- анонимный поиск ключей по префиксу в хранилище
  13. type AnonymFind struct {
  14. serv types.IService
  15. store types.IStore
  16. }
  17. // NewAnonymFind -- возвращает анонимный поиск ключей по префиксу в хранилище
  18. func NewAnonymFind(servHttp types.IServHttp, router fiber.Router) (*AnonymFind, error) {
  19. { // Предусловия
  20. if servHttp == nil {
  21. return nil, fmt.Errorf("NewAnonymFind(): IServHttp==nil")
  22. }
  23. if router == nil {
  24. return nil, fmt.Errorf("NewAnonymFind(): router==nil")
  25. }
  26. }
  27. sf := &AnonymFind{
  28. serv: servHttp.Service(),
  29. store: servHttp.Service().Store(),
  30. }
  31. router.Get("/find", sf.get)
  32. router.Post("/find_check_prefix", sf.findCheckPrefix)
  33. router.Post("/find", sf.post)
  34. return sf, nil
  35. }
  36. // Проверяет допустимость ключа для анонимного хранилища
  37. func (sf *AnonymFind) findCheckPrefix(ctx *fiber.Ctx) error {
  38. strBody := string(ctx.Body())
  39. log.Println("AnonymFind.findCheckPrefix():", strBody)
  40. req := &msg_net.MsgFindRequest{}
  41. err := ctx.BodyParser(req)
  42. if err != nil {
  43. return ctx.SendString("AnonymFind.findCheckPrefix(): " + err.Error())
  44. }
  45. if req.Key_ == "" {
  46. return ctx.SendString("AnonymFind.findCheckPrefix(): ключ не может быть пустым")
  47. }
  48. return ctx.SendString("AnonymFind.findCheckPrefix(): годный ключ")
  49. }
  50. // Возвращает страницу анонимного раздела
  51. func (sf *AnonymFind) get(ctx *fiber.Ctx) error {
  52. return ctx.Render("anonym_find", fiber.Map{})
  53. }
  54. // Возвращает список ключей по префиксу из анонимного хранилища
  55. func (sf *AnonymFind) post(ctx *fiber.Ctx) error {
  56. req := &msg_net.MsgFindRequest{}
  57. if err := ctx.BodyParser(req); err != nil {
  58. return ctx.Render("anonym_find", fiber.Map{
  59. "res": fmt.Sprintf("AnonymFind.post(): при парсинге формы, err=%v", err),
  60. })
  61. }
  62. if req.Key_ == "" {
  63. return ctx.Render("anonym_find", fiber.Map{
  64. "res": "AnonymFind.post(): ключ не может быть пустым",
  65. })
  66. }
  67. var err error
  68. req.Values_, err = sf.store.Find("anon/" + req.Key_)
  69. if err != nil {
  70. return ctx.Render("anonym_find", fiber.Map{
  71. "res": fmt.Sprintf("AnonymFind.post(): при поиске ключей по префиксу %q из хранилища, err=%v", req.Key_, err),
  72. })
  73. }
  74. for adr, val := range req.Values_ {
  75. req.Values_[adr] = strings.TrimPrefix(val, "anon/")
  76. }
  77. binResp, _ := json.MarshalIndent(req, "", " ")
  78. return ctx.SendString(string(binResp))
  79. }