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).
119 lines
2.6 KiB
Go
119 lines
2.6 KiB
Go
package storage
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
)
|
|
|
|
// ServiceProperties represents the storage account service properties
|
|
type ServiceProperties struct {
|
|
Logging *Logging
|
|
HourMetrics *Metrics
|
|
MinuteMetrics *Metrics
|
|
Cors *Cors
|
|
}
|
|
|
|
// Logging represents the Azure Analytics Logging settings
|
|
type Logging struct {
|
|
Version string
|
|
Delete bool
|
|
Read bool
|
|
Write bool
|
|
RetentionPolicy *RetentionPolicy
|
|
}
|
|
|
|
// RetentionPolicy indicates if retention is enabled and for how many days
|
|
type RetentionPolicy struct {
|
|
Enabled bool
|
|
Days *int
|
|
}
|
|
|
|
// Metrics provide request statistics.
|
|
type Metrics struct {
|
|
Version string
|
|
Enabled bool
|
|
IncludeAPIs *bool
|
|
RetentionPolicy *RetentionPolicy
|
|
}
|
|
|
|
// Cors includes all the CORS rules
|
|
type Cors struct {
|
|
CorsRule []CorsRule
|
|
}
|
|
|
|
// CorsRule includes all settings for a Cors rule
|
|
type CorsRule struct {
|
|
AllowedOrigins string
|
|
AllowedMethods string
|
|
MaxAgeInSeconds int
|
|
ExposedHeaders string
|
|
AllowedHeaders string
|
|
}
|
|
|
|
func (c Client) getServiceProperties(service string, auth authentication) (*ServiceProperties, error) {
|
|
query := url.Values{
|
|
"restype": {"service"},
|
|
"comp": {"properties"},
|
|
}
|
|
uri := c.getEndpoint(service, "", query)
|
|
headers := c.getStandardHeaders()
|
|
|
|
resp, err := c.exec(http.MethodGet, uri, headers, nil, auth)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.body.Close()
|
|
|
|
if err := checkRespCode(resp.statusCode, []int{http.StatusOK}); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var out ServiceProperties
|
|
err = xmlUnmarshal(resp.body, &out)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &out, nil
|
|
}
|
|
|
|
func (c Client) setServiceProperties(props ServiceProperties, service string, auth authentication) error {
|
|
query := url.Values{
|
|
"restype": {"service"},
|
|
"comp": {"properties"},
|
|
}
|
|
uri := c.getEndpoint(service, "", query)
|
|
|
|
// Ideally, StorageServiceProperties would be the output struct
|
|
// This is to avoid golint stuttering, while generating the correct XML
|
|
type StorageServiceProperties struct {
|
|
Logging *Logging
|
|
HourMetrics *Metrics
|
|
MinuteMetrics *Metrics
|
|
Cors *Cors
|
|
}
|
|
input := StorageServiceProperties{
|
|
Logging: props.Logging,
|
|
HourMetrics: props.HourMetrics,
|
|
MinuteMetrics: props.MinuteMetrics,
|
|
Cors: props.Cors,
|
|
}
|
|
|
|
body, length, err := xmlMarshal(input)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
headers := c.getStandardHeaders()
|
|
headers["Content-Length"] = fmt.Sprintf("%v", length)
|
|
|
|
resp, err := c.exec(http.MethodPut, uri, headers, body, auth)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer readAndCloseBody(resp.body)
|
|
|
|
return checkRespCode(resp.statusCode, []int{http.StatusAccepted})
|
|
}
|