* Fix URL for CalDAV if necessary
* Implemented upload and delete of CalDAV items
This commit is contained in:
parent
e3288f9848
commit
d7cc883cbb
|
@ -4,9 +4,11 @@ import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
"text/template"
|
"text/template"
|
||||||
"time"
|
"time"
|
||||||
|
@ -174,6 +176,54 @@ func (c *CalDAV) GetEvents() ([]CalDAVItem, error) {
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c CalDAV) UploadItem(item CalDAVItem) error {
|
||||||
|
itemURL, _ := url.Parse(item.HRef)
|
||||||
|
base, _ := url.Parse(c.URL)
|
||||||
|
|
||||||
|
// Build the absolute URL for the item
|
||||||
|
itemURL = base.ResolveReference(itemURL)
|
||||||
|
|
||||||
|
req, err := http.NewRequest("PUT", itemURL.String(), strings.NewReader(item.ICal.String()))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
req.SetBasicAuth(c.Username, c.Password)
|
||||||
|
resp, err := c.httpClient.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode >= 300 {
|
||||||
|
return fmt.Errorf("Unexpected result while uploading %s: %d", itemURL.String(), resp.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c CalDAV) DeleteItem(item CalDAVItem) error {
|
||||||
|
itemURL, _ := url.Parse(item.HRef)
|
||||||
|
base, _ := url.Parse(c.URL)
|
||||||
|
|
||||||
|
// Build the absolute URL for the item
|
||||||
|
itemURL = base.ResolveReference(itemURL)
|
||||||
|
|
||||||
|
req, err := http.NewRequest("DELETE", itemURL.String(), nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
req.SetBasicAuth(c.Username, c.Password)
|
||||||
|
resp, err := c.httpClient.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode >= 300 {
|
||||||
|
return fmt.Errorf("Unexpected result while deleting %s: %d", itemURL.String(), resp.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type MultiStatus struct {
|
type MultiStatus struct {
|
||||||
Response []PropFindResponse `xml:"response"`
|
Response []PropFindResponse `xml:"response"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ServerSettings struct {
|
type ServerSettings struct {
|
||||||
|
@ -29,5 +30,10 @@ func LoadSettings() Settings {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if settings.CalDAV.URL != "" && strings.HasSuffix(settings.CalDAV.URL, "/") {
|
||||||
|
settings.CalDAV.URL += "/"
|
||||||
|
}
|
||||||
|
|
||||||
return settings
|
return settings
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue