MCPcopy Create free account
hub / github.com/OpenListTeam/OpenList / FsMove

Function FsMove

server/handles/fsmanage.go:69–168  ·  view source on GitHub ↗

FsMove performs batch move (individual item permission checks skipped for performance).

(c *gin.Context)

Source from the content-addressed store, hash-verified

67
68// FsMove performs batch move (individual item permission checks skipped for performance).
69func FsMove(c *gin.Context) {
70 var req MoveCopyReq
71 if err := c.ShouldBind(&req); err != nil {
72 common.ErrorResp(c, err, 400)
73 return
74 }
75 if len(req.Names) == 0 {
76 common.ErrorStrResp(c, "Empty file names", 400)
77 return
78 }
79 user := c.Request.Context().Value(conf.UserKey).(*model.User)
80 if !user.CanMove() {
81 common.ErrorResp(c, errs.PermissionDenied, 403)
82 return
83 }
84 srcDir, err := user.JoinPath(req.SrcDir)
85 if err != nil {
86 common.ErrorResp(c, err, 403)
87 return
88 }
89 srcMeta, err := op.GetNearestMeta(srcDir)
90 if err != nil && !errors.Is(errors.Cause(err), errs.MetaNotFound) {
91 common.ErrorResp(c, err, 500, true)
92 return
93 }
94 if !common.CanWrite(user, srcMeta, srcDir) {
95 common.ErrorResp(c, errs.PermissionDenied, 403)
96 return
97 }
98 dstDir, err := user.JoinPath(req.DstDir)
99 if err != nil {
100 common.ErrorResp(c, err, 403)
101 return
102 }
103 dstMeta, err := op.GetNearestMeta(dstDir)
104 if err != nil && !errors.Is(errors.Cause(err), errs.MetaNotFound) {
105 common.ErrorResp(c, err, 500, true)
106 return
107 }
108 if !common.CanWrite(user, dstMeta, dstDir) {
109 common.ErrorResp(c, errs.PermissionDenied, 403)
110 return
111 }
112 if !strings.HasSuffix(srcDir, "/") {
113 srcDir += "/"
114 }
115 for i, name := range req.Names {
116 // ensure req.Names is not a relative path
117 srcPath := stdpath.Join(srcDir, name)
118 if !strings.HasPrefix(srcPath+"/", srcDir) {
119 req.Names[i] = ""
120 continue
121 }
122 req.Names[i] = srcPath
123 if !req.Overwrite {
124 base := stdpath.Base(srcPath)
125 if base == "." || base == "/" {
126 common.ErrorStrResp(c, fmt.Sprintf("invalid file name [%s]", name), 400)

Callers

nothing calls this directly

Calls 10

ErrorRespFunction · 0.92
ErrorStrRespFunction · 0.92
GetNearestMetaFunction · 0.92
CanWriteFunction · 0.92
GetFunction · 0.92
MoveFunction · 0.92
SuccessRespFunction · 0.92
getTaskInfosFunction · 0.85
CanMoveMethod · 0.80
JoinPathMethod · 0.80

Tested by

no test coverage detected