diff --git a/pkg/authorize/renew_token.go b/pkg/authorize/renew_token.go new file mode 100644 index 0000000..0584e68 --- /dev/null +++ b/pkg/authorize/renew_token.go @@ -0,0 +1,69 @@ +package authorize + +import ( + "bytes" + "encoding/json" + "errors" + "io" + "net/http" + "time" +) + +type renewAccessTokenResponse struct { + Code int `json:"code"` + Message string `json:"message"` + Data RenewAccessTokenBody `json:"data"` + RequestId string `json:"request_id"` +} + +// RenewAccessTokenBody 刷新access_token返回信息 +type RenewAccessTokenBody struct { + AccessToken string `json:"access_token"` + AccessTokenExpiresAt time.Time `json:"access_token_expires_at"` +} + +// RenewAccessTokenRequest 刷新access_token请求 +type RenewAccessTokenRequest struct { + RefreshToken string `json:"refresh_token" binding:"required"` +} + +// RenewAccessToken 刷新Token +func RenewAccessToken(url string, parameter RenewAccessTokenRequest, timeout int) (*RenewAccessTokenBody, error) { + client := &http.Client{Timeout: time.Second * time.Duration(timeout)} + args, err := json.Marshal(parameter) + if err != nil { + return nil, err + } + + request, err := http.NewRequest("POST", url, bytes.NewBuffer(args)) + if err != nil { + return nil, err + } + + request.Header.Set("Content-type", "application/json") + response, err := client.Do(request) + if err != nil { + return nil, err + } + + if response.StatusCode != 200 { + return nil, err + } + + all, err := io.ReadAll(response.Body) + if err != nil { + return nil, err + } + + var resp renewAccessTokenResponse + err = json.Unmarshal(all, &resp) + if err != nil { + return nil, err + } + + if resp.Code == 200 && resp.Message == "ok" { + return &resp.Data, nil + } + + return nil, errors.New("刷新access_token失败") +} diff --git a/pkg/authorize/valid_token.go b/pkg/authorize/valid_token.go new file mode 100644 index 0000000..518caec --- /dev/null +++ b/pkg/authorize/valid_token.go @@ -0,0 +1,62 @@ +package authorize + +import ( + "bytes" + "encoding/json" + "io" + "net/http" + "time" +) + +type validAccessTokenResponse struct { + Code int `json:"code"` + Message string `json:"message"` + Data interface{} `json:"data"` + RequestId string `json:"request_id"` +} + +// ValidAccessTokenRequest 校验access_token请求 +type ValidAccessTokenRequest struct { + AccessToken string `json:"access_token" binding:"required"` +} + +// ValidAccessToken 校验Token +func ValidAccessToken(url string, parameter ValidAccessTokenRequest, timeout int) bool { + client := &http.Client{Timeout: time.Second * time.Duration(timeout)} + args, err := json.Marshal(parameter) + if err != nil { + return false + } + + request, err := http.NewRequest("POST", url, bytes.NewBuffer(args)) + if err != nil { + return false + } + + request.Header.Set("Content-type", "application/json") + response, err := client.Do(request) + if err != nil { + return false + } + + if response.StatusCode != 200 { + return false + } + + all, err := io.ReadAll(response.Body) + if err != nil { + return false + } + + var resp validAccessTokenResponse + err = json.Unmarshal(all, &resp) + if err != nil { + return false + } + + if resp.Code == 200 && resp.Message == "ok" { + return true + } + + return false +}