btn_login.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // package btn_login -- кнопка логина
  2. package btn_login
  3. import (
  4. "crypto/rand"
  5. _ "embed"
  6. "strings"
  7. . "gitp78su.ipnodns.ru/svi/kern"
  8. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  9. "gitp78su.ipnodns.ru/svi/kern/wui"
  10. . "gitp78su.ipnodns.ru/svi/kern/wui/wtypes"
  11. )
  12. // КнпЛогин -- кнопка логина на сайте
  13. type КнпЛогин struct {
  14. Кнп IWuiButton
  15. конт IKernelCtx
  16. }
  17. // НовКнпЛогин -- возвращает новую кнопку логина
  18. func НовКнпЛогин() *КнпЛогин {
  19. sf := &КнпЛогин{
  20. конт: GetKernelCtx(),
  21. }
  22. sf.Кнп = wui.NewWuiButton("Логин", sf.КликЛогин)
  23. sf.Кнп.Hx().Target().Set("#main")
  24. return sf
  25. }
  26. // Html -- возвращает HTML-представление кнопки
  27. func (sf *КнпЛогин) Html() string {
  28. return sf.Кнп.Html()
  29. }
  30. //go:embed block_login.html
  31. var стрБлокЛогин string
  32. type ИВебКнопка interface {
  33. Html() string
  34. КликСписБот(map[string]string) string
  35. }
  36. // Событие клика по кнопке
  37. //
  38. // FIXME: здесь не прокидываются кукисы. Надо в form вставлять скрытое поле 'token'
  39. func (сам *КнпЛогин) КликЛогин(слв map[string]string) string {
  40. стрРез := strings.ReplaceAll(стрБлокЛогин, "{.id}", сам.Кнп.Hx().Url().String())
  41. кнпСписБот := сам.конт.Get("кнп_спис_бот").Val().(ИВебКнопка)
  42. еслиЛогин := сам.конт.Get("еслиЛогин")
  43. if еслиЛогин != nil {
  44. токенЗапр := еслиЛогин.Val().(string)
  45. токенСвой_ := сам.Кнп.Hx().Vals().Get("токен")
  46. if токенСвой_ == nil {
  47. return стрРез
  48. }
  49. токенСвой := токенСвой_.(string)
  50. if токенСвой != токенЗапр {
  51. return стрРез
  52. }
  53. return кнпСписБот.КликСписБот(слв)
  54. }
  55. логин, еслиОк := слв["login"]
  56. if !еслиОк {
  57. return стрРез
  58. }
  59. if логин != "svi" {
  60. return стрРез
  61. }
  62. пароль, еслиОк := слв["password"]
  63. if !еслиОк {
  64. return стрРез
  65. }
  66. if пароль != "Lera_07091978" {
  67. return стрРез
  68. }
  69. токен := rand.Text()
  70. сам.Кнп.Hx().Vals().Set("токен", токен)
  71. сам.конт.Set("еслиЛогин", токен, "С какого IP зашёл царь")
  72. return кнпСписБот.КликСписБот(слв)
  73. }