support webdav
This commit is contained in:
parent
9e3f47b149
commit
66e9a60bf4
2
API.md
2
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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
```
|
||||
|
|
@ -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:
|
||||
|
|
|
|||
2
main.go
2
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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Reference in New Issue