mirror of
https://github.com/1f349/go-webdav.git
synced 2024-12-22 08:14:15 +00:00
caldav: add MKCOL support
This commit is contained in:
parent
20fad80dff
commit
0ea114ec79
@ -228,3 +228,10 @@ func (r *reportReq) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
|
|||||||
|
|
||||||
return d.DecodeElement(v, &start)
|
return d.DecodeElement(v, &start)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type mkcolReq struct {
|
||||||
|
XMLName xml.Name `xml:"DAV: mkcol"`
|
||||||
|
ResourceType internal.ResourceType `xml:"set>prop>resourcetype"`
|
||||||
|
DisplayName string `xml:"set>prop>displayname"`
|
||||||
|
// TODO this could theoretically contain all addressbook properties?
|
||||||
|
}
|
||||||
|
@ -30,8 +30,11 @@ type PutCalendarObjectOptions struct {
|
|||||||
// Backend is a CalDAV server backend.
|
// Backend is a CalDAV server backend.
|
||||||
type Backend interface {
|
type Backend interface {
|
||||||
CalendarHomeSetPath(ctx context.Context) (string, error)
|
CalendarHomeSetPath(ctx context.Context) (string, error)
|
||||||
|
|
||||||
|
CreateCalendar(ctx context.Context, calendar *Calendar) error
|
||||||
ListCalendars(ctx context.Context) ([]Calendar, error)
|
ListCalendars(ctx context.Context) ([]Calendar, error)
|
||||||
GetCalendar(ctx context.Context, path string) (*Calendar, error)
|
GetCalendar(ctx context.Context, path string) (*Calendar, error)
|
||||||
|
|
||||||
GetCalendarObject(ctx context.Context, path string, req *CalendarCompRequest) (*CalendarObject, error)
|
GetCalendarObject(ctx context.Context, path string, req *CalendarCompRequest) (*CalendarObject, error)
|
||||||
ListCalendarObjects(ctx context.Context, path string, req *CalendarCompRequest) ([]CalendarObject, error)
|
ListCalendarObjects(ctx context.Context, path string, req *CalendarCompRequest) ([]CalendarObject, error)
|
||||||
QueryCalendarObjects(ctx context.Context, path string, query *CalendarQuery) ([]CalendarObject, error)
|
QueryCalendarObjects(ctx context.Context, path string, query *CalendarQuery) ([]CalendarObject, error)
|
||||||
@ -702,7 +705,28 @@ func (b *backend) Delete(r *http.Request) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *backend) Mkcol(r *http.Request) error {
|
func (b *backend) Mkcol(r *http.Request) error {
|
||||||
return internal.HTTPErrorf(http.StatusNotImplemented, "caldav: Mkcol not implemented")
|
if b.resourceTypeAtPath(r.URL.Path) != resourceTypeCalendar {
|
||||||
|
return internal.HTTPErrorf(http.StatusForbidden, "caldav: calendar creation not allowed at given location")
|
||||||
|
}
|
||||||
|
|
||||||
|
cal := Calendar{
|
||||||
|
Path: r.URL.Path,
|
||||||
|
}
|
||||||
|
|
||||||
|
if !internal.IsRequestBodyEmpty(r) {
|
||||||
|
var m mkcolReq
|
||||||
|
if err := internal.DecodeXMLRequest(r, &m); err != nil {
|
||||||
|
return internal.HTTPErrorf(http.StatusBadRequest, "carddav: error parsing mkcol request: %s", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if !m.ResourceType.Is(internal.CollectionName) || !m.ResourceType.Is(calendarName) {
|
||||||
|
return internal.HTTPErrorf(http.StatusBadRequest, "carddav: unexpected resource type")
|
||||||
|
}
|
||||||
|
cal.Name = m.DisplayName
|
||||||
|
// TODO ...
|
||||||
|
}
|
||||||
|
|
||||||
|
return b.Backend.CreateCalendar(r.Context(), &cal)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *backend) Copy(r *http.Request, dest *internal.Href, recursive, overwrite bool) (created bool, err error) {
|
func (b *backend) Copy(r *http.Request, dest *internal.Href, recursive, overwrite bool) (created bool, err error) {
|
||||||
|
@ -182,6 +182,10 @@ type testBackend struct {
|
|||||||
objectMap map[string][]CalendarObject
|
objectMap map[string][]CalendarObject
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t testBackend) CreateCalendar(ctx context.Context, calendar *Calendar) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (t testBackend) ListCalendars(ctx context.Context) ([]Calendar, error) {
|
func (t testBackend) ListCalendars(ctx context.Context) ([]Calendar, error) {
|
||||||
return t.calendars, nil
|
return t.calendars, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user