@@ -681,31 +681,24 @@ func (r *Client) send(rb func() (*http.Request, error)) (response *http.Response
681
681
err = liberr .Wrap (err )
682
682
return
683
683
}
684
- } else if r .refreshToken (response .StatusCode , request .URL .Path ) {
685
- unAuthErr := errors .New ("401 Unauthorized" )
686
- if i < r .Retry {
687
- Log .Info ("|401| Unauthorized, refreshing auth token." )
688
- token := api.Login {Refresh : r .token .Refresh }
689
- refreshErr := r .Post (api .AuthRefreshRoot , & token )
690
- if refreshErr != nil {
691
- Log .Error (refreshErr , "Token refresh failed." )
692
- time .Sleep (RetryDelay )
693
- } else {
694
- r .SetToken (token )
695
- }
696
- continue
697
- } else {
698
- r .Error = liberr .Wrap (unAuthErr )
699
- err = r .Error
700
- return
701
- }
702
684
} else {
703
685
Log .Info (
704
686
fmt .Sprintf (
705
687
"|%d| %s %s" ,
706
688
response .StatusCode ,
707
689
request .Method ,
708
690
request .URL .Path ))
691
+ if response .StatusCode == http .StatusUnauthorized {
692
+ refreshed , nErr := r .refreshToken (request )
693
+ if nErr != nil {
694
+ r .Error = liberr .Wrap (nErr )
695
+ err = r .Error
696
+ return
697
+ }
698
+ if refreshed {
699
+ continue
700
+ }
701
+ }
709
702
break
710
703
}
711
704
}
@@ -817,9 +810,21 @@ func (f *Field) disposition() (d string) {
817
810
return
818
811
}
819
812
820
- func (r * Client ) refreshToken (status int , path string ) (refresh bool ) {
821
- if status == 401 && ! strings .HasSuffix (path , api .AuthRefreshRoot ) && r .token .Refresh != "" {
822
- refresh = true
823
- }
824
- return
813
+ // refreshToken refreshes the token.
814
+ func (r * Client ) refreshToken (request * http.Request ) (refreshed bool , err error ) {
815
+ if r .token .Token == "" ||
816
+ strings .HasSuffix (request .URL .Path , api .AuthRefreshRoot ) {
817
+ return
818
+ }
819
+ login := & api.Login {Refresh : r .token .Refresh }
820
+ err = r .Post (api .AuthRefreshRoot , login )
821
+ if err == nil {
822
+ r .token .Token = login .Token
823
+ refreshed = true
824
+ return
825
+ }
826
+ if errors .Is (err , & RestError {}) {
827
+ err = nil
828
+ }
829
+ return
825
830
}
0 commit comments