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