github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/backend/swift/auth.go (about)

     1  package swift
     2  
     3  import (
     4  	"net/http"
     5  	"time"
     6  
     7  	"github.com/ncw/swift"
     8  )
     9  
    10  // auth is an authenticator for swift.  It overrides the StorageUrl
    11  // and AuthToken with fixed values.
    12  type auth struct {
    13  	parentAuth swift.Authenticator
    14  	storageURL string
    15  	authToken  string
    16  }
    17  
    18  // newAuth creates a swift authenticator wrapper to override the
    19  // StorageUrl and AuthToken values.
    20  //
    21  // Note that parentAuth can be nil
    22  func newAuth(parentAuth swift.Authenticator, storageURL string, authToken string) *auth {
    23  	return &auth{
    24  		parentAuth: parentAuth,
    25  		storageURL: storageURL,
    26  		authToken:  authToken,
    27  	}
    28  }
    29  
    30  // Request creates an http.Request for the auth - return nil if not needed
    31  func (a *auth) Request(c *swift.Connection) (*http.Request, error) {
    32  	if a.parentAuth == nil {
    33  		return nil, nil
    34  	}
    35  	return a.parentAuth.Request(c)
    36  }
    37  
    38  // Response parses the http.Response
    39  func (a *auth) Response(resp *http.Response) error {
    40  	if a.parentAuth == nil {
    41  		return nil
    42  	}
    43  	return a.parentAuth.Response(resp)
    44  }
    45  
    46  // The public storage URL - set Internal to true to read
    47  // internal/service net URL
    48  func (a *auth) StorageUrl(Internal bool) string { // nolint
    49  	if a.storageURL != "" {
    50  		return a.storageURL
    51  	}
    52  	if a.parentAuth == nil {
    53  		return ""
    54  	}
    55  	return a.parentAuth.StorageUrl(Internal)
    56  }
    57  
    58  // The access token
    59  func (a *auth) Token() string {
    60  	if a.authToken != "" {
    61  		return a.authToken
    62  	}
    63  	if a.parentAuth == nil {
    64  		return ""
    65  	}
    66  	return a.parentAuth.Token()
    67  }
    68  
    69  // Expires returns the time the token expires if known or Zero if not.
    70  func (a *auth) Expires() (t time.Time) {
    71  	if do, ok := a.parentAuth.(swift.Expireser); ok {
    72  		t = do.Expires()
    73  	}
    74  	return t
    75  }
    76  
    77  // The CDN url if available
    78  func (a *auth) CdnUrl() string { // nolint
    79  	if a.parentAuth == nil {
    80  		return ""
    81  	}
    82  	return a.parentAuth.CdnUrl()
    83  }
    84  
    85  // Check the interfaces are satisfied
    86  var (
    87  	_ swift.Authenticator = (*auth)(nil)
    88  	_ swift.Expireser     = (*auth)(nil)
    89  )