anonym_read.go 2.9 KB

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