mirror of
https://github.com/1f349/go-webdav.git
synced 2024-12-22 16:24:14 +00:00
ac9af45270
The `If-Match` and `If-None-Match` conditional headers can have either a wildcard or a (quoted) ETag as value. However, the ETag _could_ be a literal `*`, so care must be taken to allow these cases to be distinguished. The values of these headers have to be handled by the backend, so export a type that facilitates working with these values.
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package webdav
|
|
|
|
import (
|
|
"encoding/xml"
|
|
|
|
"github.com/emersion/go-webdav/internal"
|
|
)
|
|
|
|
var (
|
|
principalName = xml.Name{"DAV:", "principal"}
|
|
principalAlternateURISetName = xml.Name{"DAV:", "alternate-URI-set"}
|
|
principalURLName = xml.Name{"DAV:", "principal-URL"}
|
|
groupMembershipName = xml.Name{"DAV:", "group-membership"}
|
|
)
|
|
|
|
// https://datatracker.ietf.org/doc/html/rfc3744#section-4.1
|
|
type principalAlternateURISet struct {
|
|
XMLName xml.Name `xml:"DAV: alternate-URI-set"`
|
|
Hrefs []internal.Href `xml:"href"`
|
|
}
|
|
|
|
// https://datatracker.ietf.org/doc/html/rfc3744#section-4.2
|
|
type principalURL struct {
|
|
XMLName xml.Name `xml:"DAV: principal-URL"`
|
|
Href internal.Href `xml:"href"`
|
|
}
|
|
|
|
// https://datatracker.ietf.org/doc/html/rfc3744#section-4.4
|
|
type groupMembership struct {
|
|
XMLName xml.Name `xml:"DAV: group-membership"`
|
|
Hrefs []internal.Href `xml:"href"`
|
|
}
|
|
|
|
// ConditionalMatch represents the value of a conditional header
|
|
// according to RFC 2068 section 14.25 and RFC 2068 section 14.26
|
|
// The (optional) value can either be a wildcard or an ETag.
|
|
type ConditionalMatch string
|
|
|
|
func (val ConditionalMatch) IsSet() bool {
|
|
return val != ""
|
|
}
|
|
|
|
func (val ConditionalMatch) IsWildcard() bool {
|
|
return val == "*"
|
|
}
|
|
|
|
func (val ConditionalMatch) ETag() (string, error) {
|
|
var e internal.ETag
|
|
if err := e.UnmarshalText([]byte(val)); err != nil {
|
|
return "", err
|
|
}
|
|
return string(e), nil
|
|
}
|