1
0

auth2.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package auth2
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "io"
  7. "net/http"
  8. "time"
  9. )
  10. type UserInfo struct {
  11. UserId string `json:"userid"` // 企业成员userid
  12. Name string `json:"name"` // 姓名
  13. Avatar string `json:"avatar"` // 头像
  14. Mobile string `json:"mobile"` // 手机号
  15. Mail string `json:"mail"` // 邮箱
  16. }
  17. func NewAccessToken(token IAccessToken) AccessTokenCache {
  18. return AccessTokenCache{
  19. AccessToken: token.GetToken(),
  20. ExpireIn: token.GetExpireIn(),
  21. ExpireTime: token.GetExpireTime(),
  22. }
  23. }
  24. type AccessTokenCache struct {
  25. ExpireIn time.Duration
  26. ExpireTime time.Time
  27. AccessToken string
  28. }
  29. func (a AccessTokenCache) GetToken() string {
  30. return a.AccessToken
  31. }
  32. func (a AccessTokenCache) GetExpireIn() time.Duration {
  33. return a.ExpireIn
  34. }
  35. func (a AccessTokenCache) GetExpireTime() time.Time {
  36. return a.ExpireTime
  37. }
  38. func (a AccessTokenCache) IsExpired() bool {
  39. return time.Now().After(a.ExpireTime)
  40. }
  41. type IAccessToken interface {
  42. GetToken() string
  43. GetExpireIn() time.Duration
  44. GetExpireTime() time.Time
  45. }
  46. type Client interface {
  47. GetAccessToken(ctx context.Context) (IAccessToken, error)
  48. SetAccessToken(token IAccessToken)
  49. BuildURL(callback string, isAppBrowser bool) string
  50. ValidateCallback(state string) error
  51. GetUserInfo(ctx context.Context, code string) (UserInfo, error)
  52. }
  53. type IResponse interface {
  54. AsError() error
  55. }
  56. func Request(req *http.Request, v IResponse) error {
  57. response, err := http.DefaultClient.Do(req)
  58. if err != nil {
  59. return err
  60. }
  61. defer response.Body.Close()
  62. b, err := io.ReadAll(response.Body)
  63. if err != nil {
  64. return err
  65. }
  66. if response.StatusCode != http.StatusOK {
  67. return fmt.Errorf("status = %d, msg = %s", response.StatusCode, string(b))
  68. }
  69. if err := json.Unmarshal(b, v); err != nil {
  70. return err
  71. }
  72. return v.AsError()
  73. }