1package azblob 2 3import ( 4 "context" 5 6 "github.com/Azure/azure-pipeline-go/pipeline" 7) 8 9// Credential represent any credential type; it is used to create a credential policy Factory. 10type Credential interface { 11 pipeline.Factory 12 credentialMarker() 13} 14 15type credentialFunc pipeline.FactoryFunc 16 17func (f credentialFunc) New(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.Policy { 18 return f(next, po) 19} 20 21// credentialMarker is a package-internal method that exists just to satisfy the Credential interface. 22func (credentialFunc) credentialMarker() {} 23 24////////////////////////////// 25 26// NewAnonymousCredential creates an anonymous credential for use with HTTP(S) requests that read public resource 27// or for use with Shared Access Signatures (SAS). 28func NewAnonymousCredential() Credential { 29 return anonymousCredentialFactory 30} 31 32var anonymousCredentialFactory Credential = &anonymousCredentialPolicyFactory{} // Singleton 33 34// anonymousCredentialPolicyFactory is the credential's policy factory. 35type anonymousCredentialPolicyFactory struct { 36} 37 38// New creates a credential policy object. 39func (f *anonymousCredentialPolicyFactory) New(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.Policy { 40 return &anonymousCredentialPolicy{next: next} 41} 42 43// credentialMarker is a package-internal method that exists just to satisfy the Credential interface. 44func (*anonymousCredentialPolicyFactory) credentialMarker() {} 45 46// anonymousCredentialPolicy is the credential's policy object. 47type anonymousCredentialPolicy struct { 48 next pipeline.Policy 49} 50 51// Do implements the credential's policy interface. 52func (p anonymousCredentialPolicy) Do(ctx context.Context, request pipeline.Request) (pipeline.Response, error) { 53 // For anonymous credentials, this is effectively a no-op 54 return p.next.Do(ctx, request) 55} 56