mirror of https://github.com/cloudreve/Cloudreve
				
				
				
			
		
			
				
	
	
		
			43 lines
		
	
	
		
			922 B
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			922 B
		
	
	
	
		
			Go
		
	
	
package controllers
 | 
						||
 | 
						||
import (
 | 
						||
	model "github.com/HFO4/cloudreve/models"
 | 
						||
	"github.com/HFO4/cloudreve/pkg/filesystem"
 | 
						||
	"github.com/HFO4/cloudreve/pkg/util"
 | 
						||
	"github.com/HFO4/cloudreve/pkg/webdav"
 | 
						||
	"github.com/gin-gonic/gin"
 | 
						||
)
 | 
						||
 | 
						||
var handler *webdav.Handler
 | 
						||
 | 
						||
func init() {
 | 
						||
	handler = &webdav.Handler{
 | 
						||
		Prefix:     "/dav",
 | 
						||
		LockSystem: make(map[uint]webdav.LockSystem),
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
// ServeWebDAV 处理WebDAV相关请求
 | 
						||
func ServeWebDAV(c *gin.Context) {
 | 
						||
	fs, err := filesystem.NewFileSystemFromContext(c)
 | 
						||
	if err != nil {
 | 
						||
		util.Log().Warning("无法为WebDAV初始化文件系统,%s", err)
 | 
						||
		return
 | 
						||
	}
 | 
						||
 | 
						||
	if webdavCtx, ok := c.Get("webdav"); ok {
 | 
						||
		application := webdavCtx.(*model.Webdav)
 | 
						||
 | 
						||
		// 重定根目录
 | 
						||
		if application.Root != "/" {
 | 
						||
			if exist, root := fs.IsPathExist(application.Root); exist {
 | 
						||
				root.Position = ""
 | 
						||
				root.Name = "/"
 | 
						||
				fs.Root = root
 | 
						||
			}
 | 
						||
		}
 | 
						||
	}
 | 
						||
 | 
						||
	handler.ServeHTTP(c.Writer, c.Request, fs)
 | 
						||
}
 |