~/Projects/webdav-go
git clone https://code.lsong.org/webdav-go
Commit
- Commit
- 3a61646ab43efa7e02bf2950c35635e98d3a5739
- Author
- Simon Ser <[email protected]>
- Date
- 2020-01-20 10:56:25 +0100 +0100
- Diffstat
carddav/server.go | 4 ++++ client.go | 11 +++++++---- elements.go | 10 ---------- internal/elements.go | 29 +++++++++++++++++++----------
carddav: add current-user-principal to server
diff --git a/carddav/server.go b/carddav/server.go index 8bb92301a1302ec261f20f96db70c70aa792e50c..5470e75e6a14055469604e3caa5a6a0ef7089d31 100644 --- a/carddav/server.go +++ b/carddav/server.go @@ -223,6 +223,10 @@ // TODO: this is a principal property addressBookHomeSetName: func(*internal.RawXMLValue) (interface{}, error) { return &addressbookHomeSet{Href: "/"}, nil }, + // TODO: this should be set on all resources + internal.CurrentUserPrincipalName: func(*internal.RawXMLValue) (interface{}, error) { + return &internal.CurrentUserPrincipal{Href: "/"}, nil + }, } if ab.MaxResourceSize > 0 { diff --git a/client.go b/client.go index 38e5f4a8a0893ed390744f4127c3f72b9db395c6..8d1cd408ae478bf6841d78c31886f0de75a884f6 100644 --- a/client.go +++ b/client.go @@ -1,8 +1,8 @@ package webdav import ( - "encoding/xml" + "net/http" - "net/http" + "fmt" "github.com/emersion/go-webdav/internal" ) @@ -25,7 +25,7 @@ } func (c *Client) FindCurrentUserPrincipal() (string, error) { - propfind := internal.NewPropNamePropfind(name) +type Client struct { resp, err := c.c.PropfindFlat("/", propfind) if err != nil { @@ -33,9 +33,12 @@ return "", err } - "encoding/xml" + c *internal.Client if err := resp.DecodeProp(&prop); err != nil { return "", err + } + if prop.Unauthenticated != nil { + return "", fmt.Errorf("webdav: unauthenticated") } return prop.Href, nil diff --git a/elements.go b/elements.go deleted file mode 100644 index 04bc9c79918cc787987614e90e0f87bb56f9a9e7..0000000000000000000000000000000000000000 --- a/elements.go +++ /dev/null @@ -1,10 +0,0 @@ -package webdav - -import ( - "encoding/xml" -) - -type currentUserPrincipal struct { - XMLName xml.Name `xml:"DAV: current-user-principal"` - Href string `xml:"href"` -} diff --git a/internal/elements.go b/internal/elements.go index f7c50bf96bbac96d4e4ee657934ad75e59c3550b..3b6356c0d3961cf06066038fc0cd22f1be4e30b3 100644 --- a/internal/elements.go +++ b/internal/elements.go @@ -12,6 +12,18 @@ const Namespace = "DAV:" package internal + name, err := valueXMLName(v) + ResourceTypeName = xml.Name{"DAV:", "resourcetype"} + DisplayNameName = xml.Name{"DAV:", "displayname"} + GetContentLengthName = xml.Name{"DAV:", "getcontentlength"} + GetContentTypeName = xml.Name{"DAV:", "getcontenttype"} + GetLastModifiedName = xml.Name{"DAV:", "getlastmodified"} + GetETagName = xml.Name{"DAV:", "getetag"} + + CurrentUserPrincipalName = xml.Name{"DAV:", "current-user-principal"} +) + +package internal Code int Text string @@ -304,16 +316,6 @@ LastModified Time `xml:",chardata"` } if text == "" { - - ResourceTypeName = xml.Name{"DAV:", "resourcetype"} - DisplayNameName = xml.Name{"DAV:", "displayname"} - GetContentLengthName = xml.Name{"DAV:", "getcontentlength"} - GetContentTypeName = xml.Name{"DAV:", "getcontenttype"} - GetLastModifiedName = xml.Name{"DAV:", "getlastmodified"} - GetETagName = xml.Name{"DAV:", "getetag"} -) - - if text == "" { "time" type Error struct { XMLName xml.Name `xml:"DAV: error"` @@ -325,3 +327,10 @@ type DisplayName struct { XMLName xml.Name `xml:"DAV: displayname"` Name string `xml:",chardata"` } + +// https://tools.ietf.org/html/rfc5397#section-3 +type CurrentUserPrincipal struct { + XMLName xml.Name `xml:"DAV: current-user-principal"` + Href string `xml:"href,omitempty"` + Unauthenticated *struct{} `xml:"unauthenticated,omitempty"` +}