web_api.go 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // package web_api -- веб-сервер для API
  2. package web_api
  3. import (
  4. "fmt"
  5. "log"
  6. "time"
  7. "github.com/gofiber/fiber/v2"
  8. "wartank/pkg/types"
  9. )
  10. // ВебАпи -- веб-сервер для API
  11. type ВебАпи struct {
  12. серв types.ИСервер
  13. файбер fiber.App
  14. }
  15. // НовВебАпи -- возвращает новый веб-сервер для API
  16. func НовВебАпи(вебСервер types.ИВебСервер) (*ВебАпи, error) {
  17. if вебСервер == nil {
  18. return nil, fmt.Errorf("НовВебАпи(): ИВебСервер==nil")
  19. }
  20. сам := &ВебАпи{
  21. серв: вебСервер.Сервер(),
  22. файбер: *вебСервер.Файбер(),
  23. }
  24. сам.файбер.Post("/api/login", сам.логин)
  25. сам.файбер.Post("/api/add_bot", сам.добавитьБота)
  26. return сам, nil
  27. }
  28. type AddBotRequest struct {
  29. Логин_ string `json:"login" form:"login_bot"`
  30. Пароль string `json:"password" form:"password_bot"`
  31. }
  32. // Запрос добавления нового бота на ботоферму
  33. func (сам *ВебАпи) добавитьБота(кнт *fiber.Ctx) error {
  34. запрос := &AddBotRequest{}
  35. if err := кнт.BodyParser(запрос); err != nil {
  36. return кнт.Render("add_bot", fiber.Map{
  37. "err": "ошибка в разборе формы",
  38. })
  39. }
  40. log.Printf("ВебАпи.добавитьБота(): : %#+v\n", запрос)
  41. if запрос.Логин_ == "" {
  42. return кнт.Render("add_bot", fiber.Map{
  43. "err": "пустой логин бота",
  44. })
  45. }
  46. if запрос.Пароль == "" {
  47. return кнт.Render("add_bot", fiber.Map{
  48. "err": "пустой пароль бота",
  49. })
  50. }
  51. сам.серв.ServBots().НовБот(запрос.Логин_, запрос.Пароль, true)
  52. return кнт.Redirect("/gui/list_bot")
  53. }
  54. type LoginRequest struct {
  55. Логин_ string `json:"login" form:"login"`
  56. Пароль_ string `json:"password" form:"password"`
  57. КонтрольноеСлово_ string `json:"control_word" form:"control_word"`
  58. }
  59. // Вызывается при попытке войти
  60. func (сам *ВебАпи) логин(кнт *fiber.Ctx) error {
  61. запрос := new(LoginRequest)
  62. if err := кнт.BodyParser(запрос); err != nil {
  63. return кнт.JSON(fiber.Map{
  64. "status": "ошибка в разборе формы",
  65. })
  66. }
  67. log.Printf("ВебАпи.логин(): : %#+v\n", *запрос)
  68. if запрос.Логин_ == "" || запрос.Пароль_ == "" {
  69. return кнт.JSON(fiber.Map{
  70. "status": "пустой логин/пароль",
  71. })
  72. }
  73. if запрос.Логин_ != "svi" || запрос.Пароль_ != "Lera_07091978" {
  74. return кнт.JSON(fiber.Map{
  75. "status": "ошибка логина/пароля",
  76. })
  77. }
  78. кнт.Cookie(&fiber.Cookie{
  79. Name: "login",
  80. Value: "svi",
  81. Expires: time.Now().Add(24 * time.Hour),
  82. HTTPOnly: true,
  83. })
  84. return кнт.Redirect("/gui/list_bot")
  85. }