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 )