Add support for depth header.
This commit is contained in:
parent
74ee6c1bba
commit
466e406f74
@ -31,6 +31,25 @@ func (this *DavService) Init() {
|
||||
}
|
||||
}
|
||||
|
||||
//获取Header头中的Depth值,暂不支持 infinity
|
||||
func (this *DavService) ParseDepth(request *http.Request) int {
|
||||
|
||||
depth := 1
|
||||
if hdr := request.Header.Get("Depth"); hdr != "" {
|
||||
switch hdr {
|
||||
case "0":
|
||||
return 0
|
||||
case "1":
|
||||
return 1
|
||||
case "infinity":
|
||||
return 1
|
||||
}
|
||||
} else {
|
||||
this.PanicBadRequest("必须指定Header Depth")
|
||||
}
|
||||
return depth
|
||||
}
|
||||
|
||||
func (this *DavService) makePropstatResponse(href string, pstats []dav.Propstat) *dav.Response {
|
||||
resp := dav.Response{
|
||||
Href: []string{(&url.URL{Path: href}).EscapedPath()},
|
||||
@ -51,13 +70,6 @@ func (this *DavService) makePropstatResponse(href string, pstats []dav.Propstat)
|
||||
return &resp
|
||||
}
|
||||
|
||||
//从一个matter中获取其propnames,每个propname都是一个xml标签。
|
||||
func (this *DavService) PropNames(matter *Matter) []xml.Name {
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
//从一个matter中获取其 []dav.Propstat
|
||||
func (this *DavService) PropstatsFromXmlNames(matter *Matter, xmlNames []xml.Name) []dav.Propstat {
|
||||
|
||||
@ -132,6 +144,9 @@ func (this *DavService) HandlePropfind(writer http.ResponseWriter, request *http
|
||||
|
||||
fmt.Printf("列出文件/文件夹 %s\n", subPath)
|
||||
|
||||
//获取请求的层数。暂不支持 infinity
|
||||
depth := this.ParseDepth(request)
|
||||
|
||||
//获取请求者
|
||||
user := this.checkUser(writer, request)
|
||||
|
||||
@ -148,7 +163,12 @@ func (this *DavService) HandlePropfind(writer http.ResponseWriter, request *http
|
||||
matter = this.matterDao.checkByUserUuidAndPath(user.Uuid, subPath)
|
||||
}
|
||||
|
||||
matters := this.matterDao.List(matter.Uuid, user.Uuid, nil)
|
||||
|
||||
var matters []*Matter
|
||||
if depth == 0 {
|
||||
matters = []*Matter{matter}
|
||||
} else {
|
||||
matters = this.matterDao.List(matter.Uuid, user.Uuid, nil)
|
||||
|
||||
if len(matters) == 0 {
|
||||
this.PanicNotFound("%s不存在", subPath)
|
||||
@ -156,6 +176,7 @@ func (this *DavService) HandlePropfind(writer http.ResponseWriter, request *http
|
||||
|
||||
//将当前的matter添加到头部
|
||||
matters = append([]*Matter{matter}, matters...)
|
||||
}
|
||||
|
||||
//准备一个输出结果的Writer
|
||||
multiStatusWriter := dav.MultiStatusWriter{Writer: writer}
|
||||
|
Loading…
Reference in New Issue
Block a user