Liu Song’s Projects


~/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"`
+}