required.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
  6. "github.com/spf13/cast"
  7. "github.com/spf13/viper"
  8. )
  9. type RequiredService interface {
  10. Required(ctx context.Context) (string, error)
  11. SendForm(ctx context.Context, addTokenUrl string, addSendUrl string, formData map[string]interface{}) ([]byte, error)
  12. GetKeyAndField(ctx context.Context, keyName string, fieldName string) (*v1.KeyAndFieldResponse, error)
  13. }
  14. func NewRequiredService(
  15. service *Service,
  16. crawler CrawlerService,
  17. conf *viper.Viper,
  18. ) RequiredService {
  19. return &requiredService{
  20. Service: service,
  21. crawler: crawler,
  22. url: conf.GetString("crawler.Url"),
  23. }
  24. }
  25. type requiredService struct {
  26. *Service
  27. crawler CrawlerService
  28. url string
  29. }
  30. func (s *requiredService) Required(ctx context.Context) (string, error) {
  31. //if req.Uid == 0 {
  32. // return nil, fmt.Errorf("uid is required")
  33. //}
  34. //res.ExpiredAt, err = service.duedate.NextDueDate(ctx, req.Uid, req.HostId)
  35. //if err != nil {
  36. // return nil, err
  37. //}
  38. res, err := s.crawler.GetLoginCookie(ctx)
  39. if err != nil {
  40. return "", err
  41. }
  42. return res, nil
  43. }
  44. func (s *requiredService) SendForm(ctx context.Context, addTokenUrl string, addSendUrl string, formData map[string]interface{}) ([]byte, error) {
  45. cookie, err := s.Required(ctx)
  46. if err != nil {
  47. return nil, err
  48. }
  49. tokenUrl := s.url + addTokenUrl
  50. tokens, err := s.crawler.GetFormTokens(ctx, tokenUrl, cookie)
  51. if err != nil {
  52. return nil, err
  53. }
  54. formData["__go_admin_previous_"] = tokens["previous"]
  55. formData["__go_admin_t_"] = tokens["t"]
  56. sendUrl := s.url + addSendUrl
  57. res, err := s.crawler.SendFormData(ctx, sendUrl, cookie, formData)
  58. if err != nil {
  59. return nil, err
  60. }
  61. return res, nil
  62. }
  63. func (s *requiredService) GetKeyAndField(ctx context.Context, keyName string, fieldName string) (*v1.KeyAndFieldResponse, error) {
  64. var res v1.KeyAndFieldResponse
  65. var err error
  66. res.Key, err = s.crawler.GetKey(ctx, keyName)
  67. if err != nil {
  68. return nil, err
  69. }
  70. field, err := s.crawler.GetField(ctx, keyName)
  71. if err != nil {
  72. return nil, err
  73. }
  74. res.FieldId = cast.ToInt(field[fieldName])
  75. if res.FieldId == 0 {
  76. return nil, fmt.Errorf(keyName + " not found")
  77. }
  78. return &res, nil
  79. }