88 "net/http"
99 "net/url"
1010 "strings"
11- "time"
1211)
1312
1413type Token struct {
@@ -31,23 +30,17 @@ const tokenPath = "token"
3130const tokenNewPath = "new/"
3231const tokenRefreshPath = "refresh/"
3332
34- // accessExpires returns the time when access token expires divided by divisor
35- func (t * Token ) accessExpires (divisor int ) time.Time {
36- return time .Now ().Add (time .Second * time .Duration (t .AccessExpires / divisor ))
37- }
38-
39- // refreshExpires returns the time when refresh token expires divided by divisor
40- func (t * Token ) refreshExpires (divisor int ) time.Time {
41- return time .Now ().Add (time .Second * time .Duration (t .RefreshExpires / divisor ))
42- }
33+ // newToken gets a new access token
34+ func (c * Client ) newToken (ctx context.Context ) error {
35+ c .m .Lock ()
36+ defer c .m .Unlock ()
4337
44- func (c * Client ) newToken (ctx context.Context ) (* Token , error ) {
4538 data , err := json .Marshal (Secret {
4639 SecretId : c .secretId ,
4740 AccessId : c .secretKey ,
4841 })
4942 if err != nil {
50- return nil , err
43+ return err
5144 }
5245
5346 req := & http.Request {
@@ -61,29 +54,35 @@ func (c *Client) newToken(ctx context.Context) (*Token, error) {
6154
6255 resp , err := c .c .Do (req )
6356 if err != nil {
64- return nil , err
57+ return err
6558 }
6659 defer resp .Body .Close ()
6760
6861 body , readErr := io .ReadAll (resp .Body )
6962 if readErr != nil {
70- return nil , readErr
63+ return readErr
7164 }
7265 if resp .StatusCode != http .StatusOK {
73- return nil , & APIError {StatusCode : resp .StatusCode , Body : string (body )}
66+ return & APIError {StatusCode : resp .StatusCode , Body : string (body )}
7467 }
7568
7669 t := & Token {}
7770 if err := json .Unmarshal (body , t ); err != nil {
78- return nil , err
71+ return err
7972 }
80- return t , nil
73+
74+ c .token = t
75+ return nil
8176}
8277
83- func (c * Client ) refreshToken (ctx context.Context ) (* Token , error ) {
78+ // refreshToken gets a new access token using the refresh token
79+ func (c * Client ) refreshToken (ctx context.Context ) error {
80+ c .m .Lock ()
81+ defer c .m .Unlock ()
82+
8483 data , err := json .Marshal (TokenRefresh {Refresh : c .token .Refresh })
8584 if err != nil {
86- return nil , err
85+ return err
8786 }
8887
8988 req := & http.Request {
@@ -97,21 +96,24 @@ func (c *Client) refreshToken(ctx context.Context) (*Token, error) {
9796
9897 resp , err := c .c .Do (req )
9998 if err != nil {
100- return nil , err
99+ return err
101100 }
102101 defer resp .Body .Close ()
103102
104103 body , readErr := io .ReadAll (resp .Body )
105104 if readErr != nil {
106- return nil , readErr
105+ return readErr
107106 }
108107 if resp .StatusCode != http .StatusOK {
109- return nil , & APIError {StatusCode : resp .StatusCode , Body : string (body )}
108+ return & APIError {StatusCode : resp .StatusCode , Body : string (body )}
110109 }
111110
112111 t := & Token {}
113112 if err := json .Unmarshal (body , t ); err != nil {
114- return nil , err
113+ return err
115114 }
116- return t , nil
115+
116+ c .token .Access = t .Access
117+ c .token .AccessExpires = t .AccessExpires
118+ return nil
117119}
0 commit comments