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