Chris Lu
3 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 375 additions and 36 deletions
-
31docker/compose/local-cluster-compose.yml
-
39weed/filer/filer_conf.go
-
25weed/s3api/auth_credentials.go
-
97weed/s3api/s3api_bucket_handlers.go
-
1weed/s3api/s3api_handlers.go
-
8weed/s3api/s3api_object_skip_handlers.go
-
147weed/s3api/s3api_policy.go
-
22weed/s3api/s3api_server.go
-
16weed/s3api/s3api_xsd_generated.go
-
6weed/s3api/s3err/s3api_errors.go
-
19weed/shell/command_fs_configure.go
@ -0,0 +1,147 @@ |
|||
package s3api |
|||
|
|||
import ( |
|||
"encoding/xml" |
|||
"time" |
|||
) |
|||
|
|||
// Status represents lifecycle configuration status
|
|||
type ruleStatus string |
|||
|
|||
// Supported status types
|
|||
const ( |
|||
Enabled ruleStatus = "Enabled" |
|||
Disabled ruleStatus = "Disabled" |
|||
) |
|||
|
|||
// Lifecycle - Configuration for bucket lifecycle.
|
|||
type Lifecycle struct { |
|||
XMLName xml.Name `xml:"LifecycleConfiguration"` |
|||
Rules []Rule `xml:"Rule"` |
|||
} |
|||
|
|||
// Rule - a rule for lifecycle configuration.
|
|||
type Rule struct { |
|||
XMLName xml.Name `xml:"Rule"` |
|||
ID string `xml:"ID,omitempty"` |
|||
Status ruleStatus `xml:"Status"` |
|||
Filter Filter `xml:"Filter,omitempty"` |
|||
Prefix Prefix `xml:"Prefix,omitempty"` |
|||
Expiration Expiration `xml:"Expiration,omitempty"` |
|||
Transition Transition `xml:"Transition,omitempty"` |
|||
} |
|||
|
|||
// Filter - a filter for a lifecycle configuration Rule.
|
|||
type Filter struct { |
|||
XMLName xml.Name `xml:"Filter"` |
|||
set bool |
|||
|
|||
Prefix Prefix |
|||
|
|||
And And |
|||
andSet bool |
|||
|
|||
Tag Tag |
|||
tagSet bool |
|||
} |
|||
|
|||
// Prefix holds the prefix xml tag in <Rule> and <Filter>
|
|||
type Prefix struct { |
|||
string |
|||
set bool |
|||
} |
|||
|
|||
// MarshalXML - decodes XML data.
|
|||
func (p Prefix) MarshalXML(e *xml.Encoder, startElement xml.StartElement) error { |
|||
if !p.set { |
|||
return nil |
|||
} |
|||
return e.EncodeElement(p.string, startElement) |
|||
} |
|||
|
|||
func (f Filter) MarshalXML(e *xml.Encoder, start xml.StartElement) error { |
|||
if err := e.EncodeToken(start); err != nil { |
|||
return err |
|||
} |
|||
if err := e.EncodeElement(f.Prefix, xml.StartElement{Name: xml.Name{Local: "Prefix"}}); err != nil { |
|||
return err |
|||
} |
|||
return e.EncodeToken(xml.EndElement{Name: start.Name}) |
|||
} |
|||
|
|||
// And - a tag to combine a prefix and multiple tags for lifecycle configuration rule.
|
|||
type And struct { |
|||
XMLName xml.Name `xml:"And"` |
|||
Prefix Prefix `xml:"Prefix,omitempty"` |
|||
Tags []Tag `xml:"Tag,omitempty"` |
|||
} |
|||
|
|||
// Expiration - expiration actions for a rule in lifecycle configuration.
|
|||
type Expiration struct { |
|||
XMLName xml.Name `xml:"Expiration"` |
|||
Days int `xml:"Days,omitempty"` |
|||
Date ExpirationDate `xml:"Date,omitempty"` |
|||
DeleteMarker ExpireDeleteMarker `xml:"ExpiredObjectDeleteMarker"` |
|||
|
|||
set bool |
|||
} |
|||
|
|||
// MarshalXML encodes expiration field into an XML form.
|
|||
func (e Expiration) MarshalXML(enc *xml.Encoder, startElement xml.StartElement) error { |
|||
if !e.set { |
|||
return nil |
|||
} |
|||
type expirationWrapper Expiration |
|||
return enc.EncodeElement(expirationWrapper(e), startElement) |
|||
} |
|||
|
|||
// ExpireDeleteMarker represents value of ExpiredObjectDeleteMarker field in Expiration XML element.
|
|||
type ExpireDeleteMarker struct { |
|||
val bool |
|||
set bool |
|||
} |
|||
|
|||
// MarshalXML encodes delete marker boolean into an XML form.
|
|||
func (b ExpireDeleteMarker) MarshalXML(e *xml.Encoder, startElement xml.StartElement) error { |
|||
if !b.set { |
|||
return nil |
|||
} |
|||
return e.EncodeElement(b.val, startElement) |
|||
} |
|||
|
|||
// ExpirationDate is a embedded type containing time.Time to unmarshal
|
|||
// Date in Expiration
|
|||
type ExpirationDate struct { |
|||
time.Time |
|||
} |
|||
|
|||
// MarshalXML encodes expiration date if it is non-zero and encodes
|
|||
// empty string otherwise
|
|||
func (eDate ExpirationDate) MarshalXML(e *xml.Encoder, startElement xml.StartElement) error { |
|||
if eDate.Time.IsZero() { |
|||
return nil |
|||
} |
|||
return e.EncodeElement(eDate.Format(time.RFC3339), startElement) |
|||
} |
|||
|
|||
// Transition - transition actions for a rule in lifecycle configuration.
|
|||
type Transition struct { |
|||
XMLName xml.Name `xml:"Transition"` |
|||
Days int `xml:"Days,omitempty"` |
|||
Date time.Time `xml:"Date,omitempty"` |
|||
StorageClass string `xml:"StorageClass,omitempty"` |
|||
|
|||
set bool |
|||
} |
|||
|
|||
// MarshalXML encodes transition field into an XML form.
|
|||
func (t Transition) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { |
|||
if !t.set { |
|||
return nil |
|||
} |
|||
type transitionWrapper Transition |
|||
return enc.EncodeElement(transitionWrapper(t), start) |
|||
} |
|||
|
|||
// TransitionDays is a type alias to unmarshal Days in Transition
|
|||
type TransitionDays int |
Write
Preview
Loading…
Cancel
Save
Reference in new issue