瀏覽代碼

[dav] urls not fully qualified

cgars 7 年之前
父節點
當前提交
6b26c432df
共有 3 個文件被更改,包括 18 次插入14 次删除
  1. 3 3
      cmd/web.go
  2. 7 3
      pkg/dav/dav.go
  3. 8 8
      pkg/dav/dav_test.go

+ 3 - 3
cmd/web.go

@@ -158,7 +158,7 @@ func newMacaron() *macaron.Macaron {
 	}))
 	m.Use(context.Contexter())
 	// Webdav handler todo: implement
-	h := &webdav.Handler{FileSystem:&dav.GinFS{}, LockSystem:webdav.NewMemLS()}
+	h := &webdav.Handler{FileSystem: &dav.GinFS{BasePath: setting.RepoRootPath}, LockSystem: webdav.NewMemLS()}
 	m.Map(h)
 	return m
 }
@@ -172,6 +172,7 @@ func runWeb(c *cli.Context) error {
 
 	m := newMacaron()
 
+
 	reqSignIn := context.Toggle(&context.ToggleOptions{SignInRequired: true})
 	ignSignIn := context.Toggle(&context.ToggleOptions{SignInRequired: setting.Service.RequireSignInView})
 	ignSignInAndCsrf := context.Toggle(&context.ToggleOptions{DisableCSRF: true})
@@ -419,7 +420,7 @@ func runWeb(c *cli.Context) error {
 		m.Combo("/fork/:repoid").Get(repo.Fork).
 			Post(bindIgnErr(form.CreateRepo{}), repo.ForkPost)
 	}, reqSignIn)
-
+	m.Any("/:username/:reponame/_dav/", dav.Dav, context.RepoAssignment(), context.RepoRef())
 	m.Group("/:username/:reponame", func() {
 		m.Group("/settings", func() {
 			m.Combo("").Get(repo.Settings).
@@ -560,7 +561,6 @@ func runWeb(c *cli.Context) error {
 			m.Combo("/_delete/*").Get(repo.DeleteFile).
 				Post(bindIgnErr(form.DeleteRepoFile{}), repo.DeleteFilePost)
 			m.Combo("/_add/*").Get(repo.AddFile).Post(bindIgnErr(form.EditRepoFile{}), repo.NewFilePost)
-			m.Any("/_dav", dav.Dav)
 			m.Group("", func() {
 				m.Combo("/_upload/*").Get(repo.UploadFile).
 					Post(bindIgnErr(form.UploadRepoFile{}), repo.UploadFilePost)

+ 7 - 3
pkg/dav/dav.go

@@ -14,8 +14,8 @@ import (
 )
 
 var (
-	RE_GETRNAME = regexp.MustCompile(".+/(.+)/_dav")
-	RE_GETROWN  = regexp.MustCompile(`..+\/(.+)\/.+\/_dav`)
+	RE_GETRNAME = regexp.MustCompile(`.+\/(.+)\/_dav`)
+	RE_GETROWN  = regexp.MustCompile(`\/(.+)\/.+\/_dav`)
 	RE_GETFPATH = regexp.MustCompile("/_dav/(.+)")
 )
 
@@ -25,6 +25,7 @@ func Dav(c *context.Context, handler *webdav.Handler) {
 		return
 	}
 	handler.ServeHTTP(c.Resp, c.Req.Request)
+	c.WriteHeader(http.StatusOK)
 	return
 }
 
@@ -54,7 +55,10 @@ func (fs *GinFS) OpenFile(name string, flag int, perm os.FileMode) (webdav.File,
 	oname, _ := getOName(name)
 	path, _ := getFPath(name)
 	rpath := fmt.Sprintf("%s/%s/%s.git", fs.BasePath, oname, rname)
-	grepo, _ := git.OpenRepository(rpath)
+	grepo, err := git.OpenRepository(rpath)
+	if err != nil {
+		return nil, err
+	}
 	com, err := grepo.GetBranchCommit("master")
 	if err != nil {
 		return nil, err

+ 8 - 8
pkg/dav/dav_test.go

@@ -7,7 +7,7 @@ import (
 )
 
 func TestGetRepoName(t *testing.T){
-	name, err := getRName("https://gin.g-node.org/cgars/test/_dav/adasdasd/daasdas/asdasdsa")
+	name, err := getRName("/cgars/test/_dav/adasdasd/daasdas/asdasdsa")
 	if err != nil{
 		t.Logf("Repo Name not dtermined from path")
 		t.Fail()
@@ -22,7 +22,7 @@ func TestGetRepoName(t *testing.T){
 }
 
 func TestOwnerName(t *testing.T) {
-	name, err := getOName("https://gin.g-node.org/cgars/test/_dav/adasdasd/daasdas/asdasdsa")
+	name, err := getOName("/cgars/test/_dav/adasdasd/daasdas/asdasdsa")
 	if err != nil {
 		t.Logf("Repo Name not dtermined from path")
 		t.Fail()
@@ -38,7 +38,7 @@ func TestOwnerName(t *testing.T) {
 
 func TestOpenfile(t *testing.T) {
 	fs := GinFS{"../../trepos"}
-	f, err := fs.OpenFile("https://gin.g-node.org/user1/repo1/_dav/testfile1.txt", 0, 0)
+	f, err := fs.OpenFile("/user1/repo1/_dav/testfile1.txt", 0, 0)
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -49,7 +49,7 @@ func TestOpenfile(t *testing.T) {
 	}
 
 	// lets try a directoty
-	f, err = fs.OpenFile("https://gin.g-node.org/user1/repo1/_dav/", 0, 0)
+	f, err = fs.OpenFile("/user1/repo1/_dav/", 0, 0)
 	st, err = f.Stat()
 	if err != nil {
 		log.Fatal(err)
@@ -62,7 +62,7 @@ func TestOpenfile(t *testing.T) {
 
 func TestReadDir(t *testing.T) {
 	fs := GinFS{"../../trepos"}
-	f, err := fs.OpenFile("https://gin.g-node.org/user1/repo1/_dav/", 0, 0)
+	f, err := fs.OpenFile("/user1/repo1/_dav/", 0, 0)
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -76,7 +76,7 @@ func TestReadDir(t *testing.T) {
 		return
 	}
 
-	f, err = fs.OpenFile("https://gin.g-node.org/user1/repo1/_dav/fold1", 0, 0)
+	f, err = fs.OpenFile("/user1/repo1/_dav/fold1", 0, 0)
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -94,7 +94,7 @@ func TestReadDir(t *testing.T) {
 
 func TestReadFile(t *testing.T) {
 	fs := GinFS{"../../trepos"}
-	f, err := fs.OpenFile("https://gin.g-node.org/user1/repo1/_dav/testfile1.txt", 0, 0)
+	f, err := fs.OpenFile("/user1/repo1/_dav/testfile1.txt", 0, 0)
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -110,7 +110,7 @@ func TestReadFile(t *testing.T) {
 	}
 
 	// Open a file in a subfolder
-	f, err = fs.OpenFile("https://gin.g-node.org/user1/repo1/_dav/fold1/file1.txt", 0, 0)
+	f, err = fs.OpenFile("/user1/repo1/_dav/fold1/file1.txt", 0, 0)
 	if err != nil {
 		log.Fatal(err)
 	}