forked from cerc-io/plugeth
c76ad94492
This commit adds a build step to travis to auto-delete unstable archives older than 14 days (our regular release schedule) from Azure via ci.go purge. The commit also pulls in the latest Azure storage code, also switching over from the old import path (github.com/Azure/azure-sdk-for-go) to the new split one (github.com/Azure/azure-storage-go).
93 lines
2.6 KiB
Go
93 lines
2.6 KiB
Go
package storage
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
)
|
|
|
|
// BlobStorageClient contains operations for Microsoft Azure Blob Storage
|
|
// Service.
|
|
type BlobStorageClient struct {
|
|
client Client
|
|
auth authentication
|
|
}
|
|
|
|
// GetServiceProperties gets the properties of your storage account's blob service.
|
|
// See: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/get-blob-service-properties
|
|
func (b *BlobStorageClient) GetServiceProperties() (*ServiceProperties, error) {
|
|
return b.client.getServiceProperties(blobServiceName, b.auth)
|
|
}
|
|
|
|
// SetServiceProperties sets the properties of your storage account's blob service.
|
|
// See: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/set-blob-service-properties
|
|
func (b *BlobStorageClient) SetServiceProperties(props ServiceProperties) error {
|
|
return b.client.setServiceProperties(props, blobServiceName, b.auth)
|
|
}
|
|
|
|
// ListContainersParameters defines the set of customizable parameters to make a
|
|
// List Containers call.
|
|
//
|
|
// See https://msdn.microsoft.com/en-us/library/azure/dd179352.aspx
|
|
type ListContainersParameters struct {
|
|
Prefix string
|
|
Marker string
|
|
Include string
|
|
MaxResults uint
|
|
Timeout uint
|
|
}
|
|
|
|
// GetContainerReference returns a Container object for the specified container name.
|
|
func (b BlobStorageClient) GetContainerReference(name string) Container {
|
|
return Container{
|
|
bsc: &b,
|
|
Name: name,
|
|
}
|
|
}
|
|
|
|
// ListContainers returns the list of containers in a storage account along with
|
|
// pagination token and other response details.
|
|
//
|
|
// See https://msdn.microsoft.com/en-us/library/azure/dd179352.aspx
|
|
func (b BlobStorageClient) ListContainers(params ListContainersParameters) (*ContainerListResponse, error) {
|
|
q := mergeParams(params.getParameters(), url.Values{"comp": {"list"}})
|
|
uri := b.client.getEndpoint(blobServiceName, "", q)
|
|
headers := b.client.getStandardHeaders()
|
|
|
|
var out ContainerListResponse
|
|
resp, err := b.client.exec(http.MethodGet, uri, headers, nil, b.auth)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.body.Close()
|
|
err = xmlUnmarshal(resp.body, &out)
|
|
|
|
// assign our client to the newly created Container objects
|
|
for i := range out.Containers {
|
|
out.Containers[i].bsc = &b
|
|
}
|
|
return &out, err
|
|
}
|
|
|
|
func (p ListContainersParameters) getParameters() url.Values {
|
|
out := url.Values{}
|
|
|
|
if p.Prefix != "" {
|
|
out.Set("prefix", p.Prefix)
|
|
}
|
|
if p.Marker != "" {
|
|
out.Set("marker", p.Marker)
|
|
}
|
|
if p.Include != "" {
|
|
out.Set("include", p.Include)
|
|
}
|
|
if p.MaxResults != 0 {
|
|
out.Set("maxresults", fmt.Sprintf("%v", p.MaxResults))
|
|
}
|
|
if p.Timeout != 0 {
|
|
out.Set("timeout", fmt.Sprintf("%v", p.Timeout))
|
|
}
|
|
|
|
return out
|
|
}
|