anonym_put.go 2.8 KB

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