diff --git a/API.md b/API.md index 9591c19..662ed4d 100644 --- a/API.md +++ b/API.md @@ -109,7 +109,7 @@ type DataModel struct { 其中`Type`字段为数据集的类型,表示该数据集的访问方式,目前仅支持`Type=="dir"`访问目录格式数据,后续可能支持mysql等数据库。 本系统中,对本地文件的访问使用Webdav协议。 `AccessInfo`字段为该数据集的访问方式,在`Type=="dir"`时为该目录的路径。 -例如某数据集对象中,`AccessInfo=='/some/data/dir/'`,同时本系统后端地址为`https://ms.educg.net/admin/ `,那么通过WebDav协议访问`https://ms.educg.net/files/some/data/dir/ `即可访问该目录。 +例如某数据集对象中,`AccessInfo=='/some/data/dir/'`,同时文件服务器地址为`https://ms.educg.net/files/ `,那么通过WebDav协议访问`https://ms.educg.net/files/some/data/dir/ `即可访问该目录。 CURD: diff --git a/README.md b/README.md index 113fd1e..aace13e 100644 --- a/README.md +++ b/README.md @@ -17,4 +17,11 @@ type: kubernetes.io/service-account-token EOF kubectl get secret dev-secret -o yaml +``` + + +## 持续查看Log + +```bash +while true; do bash -c "kubectl get pods | grep k8s-manager-deployment | awk '{print \$1}' | xargs kubectl logs -f"; sleep 1; done ``` \ No newline at end of file diff --git a/install-dev.yaml b/install-dev.yaml index aece39b..decb1e1 100644 --- a/install-dev.yaml +++ b/install-dev.yaml @@ -22,7 +22,7 @@ spec: - containerPort: 8080 env: - name: GIN_MODE - value: release + value: debug - name: URL_PREFIX value: admin - name: DB_HOST @@ -70,6 +70,7 @@ metadata: name: manager-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 + nginx.ingress.kubernetes.io/proxy-body-size: 10g spec: ingressClassName: nginx rules: diff --git a/main.go b/main.go index 3587bc2..a82c387 100644 --- a/main.go +++ b/main.go @@ -73,6 +73,8 @@ func main() { r.POST("/fork", controller.ForkApp) + // controller.AddWebdavHandler(r) + r.POST("/image", controller.AddImage) r.PUT("/image", controller.UpdateImage) r.DELETE("/image", controller.DeleteImage) diff --git a/src/controller/webdav_controller.go b/src/controller/webdav_controller.go new file mode 100644 index 0000000..16cf9a3 --- /dev/null +++ b/src/controller/webdav_controller.go @@ -0,0 +1,52 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + log "github.com/sirupsen/logrus" + "golang.org/x/net/webdav" + "net/http" + "sync" +) + +var fs *webdav.Handler +var fsLock sync.Mutex + +func WebDav(c *gin.Context) { + if fs == nil { + fsLock.Lock() + if fs == nil { + fs = &webdav.Handler{ + Prefix: "/webdav", + FileSystem: webdav.Dir("/mnt/CGdata/ms"), + LockSystem: webdav.NewMemLS(), + Logger: func(h *http.Request, e error) { + log.Error(e) + }, + } + } + fsLock.Unlock() + } + log.Info("Webdav ", c.Request.Method, c.Request.URL.Path) + fs.ServeHTTP(c.Writer, c.Request) +} + +func AddWebdavHandler(r *gin.Engine) { + methods := []string{ + "OPTIONS", + "GET", "HEAD", "POST", + "DELETE", + "PUT", + "MKCOL", + "COPY", "MOVE", + "LOCK", + "UNLOCK", + "PROPFIND", + "PROPPATCH", + } + + for _, m := range methods { + r.Handle(m, "/webdav", WebDav) + r.Handle(m, "/webdav/*path", WebDav) + } + +} diff --git a/src/jwt_utils.go b/src/jwt_utils.go index b99d8ea..5a637f0 100644 --- a/src/jwt_utils.go +++ b/src/jwt_utils.go @@ -48,6 +48,10 @@ func JWTAuthMiddleware(c *gin.Context) { // 登录过程,不验证身份 return } + if strings.HasPrefix(c.Request.URL.Path, "/webdav") { + // Webdav暂时不验证身份 + return + } authHeader := c.Request.Header.Get("Authorization") if authHeader == "" { var err error diff --git a/webdav/webdav.yaml b/webdav/webdav.yaml index 3430111..34ed470 100644 --- a/webdav/webdav.yaml +++ b/webdav/webdav.yaml @@ -54,6 +54,9 @@ metadata: name: webdav-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 + nginx.ingress.kubernetes.io/proxy-body-size: 10g + nginx.ingress.kubernetes.io/proxy-buffering: "on" + nginx.ingress.kubernetes.io/proxy-buffer-size: "1024k" spec: ingressClassName: nginx rules: