page_login.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // package page_login -- страница логина
  2. package page_login
  3. import (
  4. _ "embed"
  5. "net/http"
  6. "time"
  7. "github.com/gofiber/fiber/v2"
  8. . "wartank/app/lev0/types"
  9. "wartank/app/lev1/web_render"
  10. "wartank/kernel"
  11. . "wartank/kernel/kernel_types"
  12. )
  13. // СтраницаЛогин -- страница логина
  14. type СтраницаЛогин struct {
  15. лог ИЯдроЛог
  16. рендер ИВебРендер
  17. }
  18. //go:embed login.tmpl.html
  19. var стрЛогин string
  20. // НовСтраницаЛогин
  21. func НовСтраницаЛогин(конт ИЯдроКонтекст) *СтраницаЛогин {
  22. лог := kernel.НовЛог("СтраницаЛогин")
  23. лог.Паника(конт == nil, "НовСтраницаЛогин(): ИЯдроКонтекст==nil")
  24. сам := &СтраницаЛогин{
  25. лог: лог,
  26. рендер: web_render.НовВебРендер(стрЛогин),
  27. }
  28. сам.рендер.Доб("{.err}", "")
  29. файбер := конт.Получ("fiberApp").(*fiber.App)
  30. файбер.Get("/gui/login", сам.получЛогин)
  31. файбер.Post("/gui/login", сам.постЛогин)
  32. return сам
  33. }
  34. // Возвращает страницу логина
  35. func (сам *СтраницаЛогин) получЛогин(кнт *fiber.Ctx) error {
  36. сам.лог.Отладка("СтраницаЛогин.логин()\n")
  37. кнт.Set("Content-type", "text/html; charset=utf8;")
  38. стрРез := сам.рендер.Получ()
  39. return кнт.SendString(стрРез)
  40. }
  41. type LoginRequest struct {
  42. Логин_ string `form:"login"`
  43. Пароль_ string `form:"password"`
  44. КонтрольноеСлово_ string `form:"control_word"`
  45. }
  46. // Вызывается при попытке войти
  47. func (сам *СтраницаЛогин) постЛогин(кнт *fiber.Ctx) error {
  48. запрос := new(LoginRequest)
  49. if err := кнт.BodyParser(запрос); err != nil {
  50. return кнт.Redirect("/gui/login", http.StatusSeeOther)
  51. }
  52. сам.лог.Инфо("СтраницаЛогин.логин(): : %#+v\n", *запрос)
  53. if запрос.Логин_ == "" || запрос.Пароль_ == "" {
  54. return кнт.Redirect("/gui/login", http.StatusSeeOther)
  55. }
  56. if запрос.Логин_ != "svi" || запрос.Пароль_ != "Lera_07091978" {
  57. return кнт.Redirect("/gui/login", http.StatusSeeOther)
  58. }
  59. кнт.Cookie(&fiber.Cookie{
  60. Name: "login",
  61. Value: "svi",
  62. Expires: time.Now().Add(24 * time.Hour),
  63. HTTPOnly: true,
  64. })
  65. return кнт.Redirect("/gui/bot", http.StatusSeeOther)
  66. }