Skip to content

Commit 04b7b83

Browse files
authored
Merge pull request #9376 from vxtls/main
fix(misskey): folderId format validation and root directory handling
2 parents 217d6d0 + 129895b commit 04b7b83

File tree

1 file changed

+35
-22
lines changed

1 file changed

+35
-22
lines changed

drivers/misskey/util.go

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"io"
7+
"net/http"
78
"time"
89

910
"github.com/go-resty/resty/v2"
@@ -56,23 +57,27 @@ func setBody(body interface{}) base.ReqCallback {
5657
}
5758

5859
func handleFolderId(dir model.Obj) interface{} {
59-
if dir.GetID() == "" {
60-
return nil
60+
if isRootFolder(dir) {
61+
return nil // Root folder doesn't need folderId
6162
}
6263
return dir.GetID()
6364
}
6465

66+
func isRootFolder(dir model.Obj) bool {
67+
return dir.GetID() == ""
68+
}
69+
6570
// API layer methods
6671

6772
func (d *Misskey) getFiles(dir model.Obj) ([]model.Obj, error) {
6873
var files []MFile
6974
var body map[string]string
70-
if dir.GetPath() != "/" {
75+
if !isRootFolder(dir) {
7176
body = map[string]string{"folderId": dir.GetID()}
7277
} else {
7378
body = map[string]string{}
7479
}
75-
err := d.request("/files", "POST", setBody(body), &files)
80+
err := d.request("/files", http.MethodPost, setBody(body), &files)
7681
if err != nil {
7782
return []model.Obj{}, err
7883
}
@@ -84,12 +89,12 @@ func (d *Misskey) getFiles(dir model.Obj) ([]model.Obj, error) {
8489
func (d *Misskey) getFolders(dir model.Obj) ([]model.Obj, error) {
8590
var folders []MFolder
8691
var body map[string]string
87-
if dir.GetPath() != "/" {
92+
if !isRootFolder(dir) {
8893
body = map[string]string{"folderId": dir.GetID()}
8994
} else {
9095
body = map[string]string{}
9196
}
92-
err := d.request("/folders", "POST", setBody(body), &folders)
97+
err := d.request("/folders", http.MethodPost, setBody(body), &folders)
9398
if err != nil {
9499
return []model.Obj{}, err
95100
}
@@ -106,7 +111,7 @@ func (d *Misskey) list(dir model.Obj) ([]model.Obj, error) {
106111

107112
func (d *Misskey) link(file model.Obj) (*model.Link, error) {
108113
var mFile MFile
109-
err := d.request("/files/show", "POST", setBody(map[string]string{"fileId": file.GetID()}), &mFile)
114+
err := d.request("/files/show", http.MethodPost, setBody(map[string]string{"fileId": file.GetID()}), &mFile)
110115
if err != nil {
111116
return nil, err
112117
}
@@ -117,7 +122,7 @@ func (d *Misskey) link(file model.Obj) (*model.Link, error) {
117122

118123
func (d *Misskey) makeDir(parentDir model.Obj, dirName string) (model.Obj, error) {
119124
var folder MFolder
120-
err := d.request("/folders/create", "POST", setBody(map[string]interface{}{"parentId": handleFolderId(parentDir), "name": dirName}), &folder)
125+
err := d.request("/folders/create", http.MethodPost, setBody(map[string]interface{}{"parentId": handleFolderId(parentDir), "name": dirName}), &folder)
121126
if err != nil {
122127
return nil, err
123128
}
@@ -127,23 +132,23 @@ func (d *Misskey) makeDir(parentDir model.Obj, dirName string) (model.Obj, error
127132
func (d *Misskey) move(srcObj, dstDir model.Obj) (model.Obj, error) {
128133
if srcObj.IsDir() {
129134
var folder MFolder
130-
err := d.request("/folders/update", "POST", setBody(map[string]interface{}{"folderId": srcObj.GetID(), "parentId": handleFolderId(dstDir)}), &folder)
135+
err := d.request("/folders/update", http.MethodPost, setBody(map[string]interface{}{"folderId": srcObj.GetID(), "parentId": handleFolderId(dstDir)}), &folder)
131136
return mFolder2Object(folder), err
132137
} else {
133138
var file MFile
134-
err := d.request("/files/update", "POST", setBody(map[string]interface{}{"fileId": srcObj.GetID(), "folderId": handleFolderId(dstDir)}), &file)
139+
err := d.request("/files/update", http.MethodPost, setBody(map[string]interface{}{"fileId": srcObj.GetID(), "folderId": handleFolderId(dstDir)}), &file)
135140
return mFile2Object(file), err
136141
}
137142
}
138143

139144
func (d *Misskey) rename(srcObj model.Obj, newName string) (model.Obj, error) {
140145
if srcObj.IsDir() {
141146
var folder MFolder
142-
err := d.request("/folders/update", "POST", setBody(map[string]string{"folderId": srcObj.GetID(), "name": newName}), &folder)
147+
err := d.request("/folders/update", http.MethodPost, setBody(map[string]string{"folderId": srcObj.GetID(), "name": newName}), &folder)
143148
return mFolder2Object(folder), err
144149
} else {
145150
var file MFile
146-
err := d.request("/files/update", "POST", setBody(map[string]string{"fileId": srcObj.GetID(), "name": newName}), &file)
151+
err := d.request("/files/update", http.MethodPost, setBody(map[string]string{"fileId": srcObj.GetID(), "name": newName}), &file)
147152
return mFile2Object(file), err
148153
}
149154
}
@@ -171,7 +176,7 @@ func (d *Misskey) copy(srcObj, dstDir model.Obj) (model.Obj, error) {
171176
if err != nil {
172177
return nil, err
173178
}
174-
err = d.request("/files/upload-from-url", "POST", setBody(map[string]interface{}{"url": url.URL, "folderId": handleFolderId(dstDir)}), &file)
179+
err = d.request("/files/upload-from-url", http.MethodPost, setBody(map[string]interface{}{"url": url.URL, "folderId": handleFolderId(dstDir)}), &file)
175180
if err != nil {
176181
return nil, err
177182
}
@@ -181,10 +186,10 @@ func (d *Misskey) copy(srcObj, dstDir model.Obj) (model.Obj, error) {
181186

182187
func (d *Misskey) remove(obj model.Obj) error {
183188
if obj.IsDir() {
184-
err := d.request("/folders/delete", "POST", setBody(map[string]string{"folderId": obj.GetID()}), nil)
189+
err := d.request("/folders/delete", http.MethodPost, setBody(map[string]string{"folderId": obj.GetID()}), nil)
185190
return err
186191
} else {
187-
err := d.request("/files/delete", "POST", setBody(map[string]string{"fileId": obj.GetID()}), nil)
192+
err := d.request("/files/delete", http.MethodPost, setBody(map[string]string{"fileId": obj.GetID()}), nil)
188193
return err
189194
}
190195
}
@@ -196,16 +201,24 @@ func (d *Misskey) put(ctx context.Context, dstDir model.Obj, stream model.FileSt
196201
Reader: stream,
197202
UpdateProgress: up,
198203
})
204+
205+
// Build form data, only add folderId if not root folder
206+
formData := map[string]string{
207+
"name": stream.GetName(),
208+
"comment": "",
209+
"isSensitive": "false",
210+
"force": "false",
211+
}
212+
213+
folderId := handleFolderId(dstDir)
214+
if folderId != nil {
215+
formData["folderId"] = folderId.(string)
216+
}
217+
199218
req := base.RestyClient.R().
200219
SetContext(ctx).
201220
SetFileReader("file", stream.GetName(), reader).
202-
SetFormData(map[string]string{
203-
"folderId": handleFolderId(dstDir).(string),
204-
"name": stream.GetName(),
205-
"comment": "",
206-
"isSensitive": "false",
207-
"force": "false",
208-
}).
221+
SetFormData(formData).
209222
SetResult(&file).
210223
SetAuthToken(d.AccessToken)
211224

0 commit comments

Comments
 (0)