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等数据库。
|
其中`Type`字段为数据集的类型,表示该数据集的访问方式,目前仅支持`Type=="dir"`访问目录格式数据,后续可能支持mysql等数据库。
|
||||||
本系统中,对本地文件的访问使用Webdav协议。
|
本系统中,对本地文件的访问使用Webdav协议。
|
||||||
`AccessInfo`字段为该数据集的访问方式,在`Type=="dir"`时为该目录的路径。
|
`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:
|
CURD:
|
||||||
|
|
|
||||||
|
|
@ -17,4 +17,11 @@ type: kubernetes.io/service-account-token
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
kubectl get secret dev-secret -o yaml
|
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
|
- containerPort: 8080
|
||||||
env:
|
env:
|
||||||
- name: GIN_MODE
|
- name: GIN_MODE
|
||||||
value: release
|
value: debug
|
||||||
- name: URL_PREFIX
|
- name: URL_PREFIX
|
||||||
value: admin
|
value: admin
|
||||||
- name: DB_HOST
|
- name: DB_HOST
|
||||||
|
|
@ -70,6 +70,7 @@ metadata:
|
||||||
name: manager-ingress
|
name: manager-ingress
|
||||||
annotations:
|
annotations:
|
||||||
nginx.ingress.kubernetes.io/rewrite-target: /$2
|
nginx.ingress.kubernetes.io/rewrite-target: /$2
|
||||||
|
nginx.ingress.kubernetes.io/proxy-body-size: 10g
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
ingressClassName: nginx
|
||||||
rules:
|
rules:
|
||||||
|
|
|
||||||
2
main.go
2
main.go
|
|
@ -73,6 +73,8 @@ func main() {
|
||||||
|
|
||||||
r.POST("/fork", controller.ForkApp)
|
r.POST("/fork", controller.ForkApp)
|
||||||
|
|
||||||
|
// controller.AddWebdavHandler(r)
|
||||||
|
|
||||||
r.POST("/image", controller.AddImage)
|
r.POST("/image", controller.AddImage)
|
||||||
r.PUT("/image", controller.UpdateImage)
|
r.PUT("/image", controller.UpdateImage)
|
||||||
r.DELETE("/image", controller.DeleteImage)
|
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
|
return
|
||||||
}
|
}
|
||||||
|
if strings.HasPrefix(c.Request.URL.Path, "/webdav") {
|
||||||
|
// Webdav暂时不验证身份
|
||||||
|
return
|
||||||
|
}
|
||||||
authHeader := c.Request.Header.Get("Authorization")
|
authHeader := c.Request.Header.Get("Authorization")
|
||||||
if authHeader == "" {
|
if authHeader == "" {
|
||||||
var err error
|
var err error
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,9 @@ metadata:
|
||||||
name: webdav-ingress
|
name: webdav-ingress
|
||||||
annotations:
|
annotations:
|
||||||
nginx.ingress.kubernetes.io/rewrite-target: /$2
|
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:
|
spec:
|
||||||
ingressClassName: nginx
|
ingressClassName: nginx
|
||||||
rules:
|
rules:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue