github.com/qiniu/go-sdk/v7@v7.27.0/internal/clientv2/interceptor_uptoken.go (about)

     1  package clientv2
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/qiniu/go-sdk/v7/storagev2/uptoken"
     7  )
     8  
     9  type UpTokenConfig struct {
    10  	// 上传凭证
    11  	UpToken uptoken.UpTokenProvider
    12  }
    13  
    14  type uptokenInterceptor struct {
    15  	config UpTokenConfig
    16  }
    17  
    18  func NewUpTokenInterceptor(config UpTokenConfig) Interceptor {
    19  	return &uptokenInterceptor{
    20  		config: config,
    21  	}
    22  }
    23  
    24  func (interceptor *uptokenInterceptor) Priority() InterceptorPriority {
    25  	return InterceptorPriorityAuth
    26  }
    27  
    28  func (interceptor *uptokenInterceptor) Intercept(req *http.Request, handler Handler) (*http.Response, error) {
    29  	if interceptor == nil || req == nil {
    30  		return handler(req)
    31  	}
    32  
    33  	if upToken := interceptor.config.UpToken; upToken != nil {
    34  		if upToken, err := upToken.GetUpToken(req.Context()); err != nil {
    35  			return nil, err
    36  		} else {
    37  			req.Header.Set("Authorization", "UpToken "+upToken)
    38  		}
    39  	}
    40  
    41  	return handler(req)
    42  }