2025-02-02 22:33:24 +01:00
|
|
|
package omadaapi
|
|
|
|
|
2025-02-04 21:46:37 +01:00
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"git.tordarus.net/tordarus/omada-api/model"
|
|
|
|
)
|
|
|
|
|
|
|
|
const ErrCodeAccessTokenExpired = -44112
|
|
|
|
|
|
|
|
func handleResponseErrors[T any](api *Api, response *model.Response[T], retry func() (*model.Response[T], error)) (*model.Response[T], error) {
|
|
|
|
switch response.ErrorCode {
|
|
|
|
case 0:
|
|
|
|
return response, nil
|
|
|
|
case ErrCodeAccessTokenExpired:
|
|
|
|
if err := api.Refresh(); err != nil {
|
|
|
|
return nil, fmt.Errorf("could not refresh access token: %w", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
newResp, err := retry()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return handleResponseErrors(api, newResp, retry)
|
|
|
|
default:
|
|
|
|
return nil, fmt.Errorf("invalid error code %d with message: %s", response.ErrorCode, response.Message)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func handlePagedResponseErrors[T any](api *Api, response *model.PagedResponse[T], retry func() (*model.PagedResponse[T], error)) (*model.PagedResponse[T], error) {
|
|
|
|
switch response.ErrorCode {
|
|
|
|
case 0:
|
|
|
|
return response, nil
|
|
|
|
case ErrCodeAccessTokenExpired:
|
|
|
|
if err := api.Refresh(); err != nil {
|
|
|
|
return nil, fmt.Errorf("could not refresh access token: %w", err)
|
2025-02-02 22:33:24 +01:00
|
|
|
}
|
2025-02-04 21:46:37 +01:00
|
|
|
|
|
|
|
newResp, err := retry()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return handlePagedResponseErrors(api, newResp, retry)
|
|
|
|
default:
|
|
|
|
return nil, fmt.Errorf("invalid error code %d with message: %s", response.ErrorCode, response.Message)
|
|
|
|
}
|
2025-02-02 22:33:24 +01:00
|
|
|
}
|