Skip to content

Commit 22ae692

Browse files
committed
Rework upload includes
1 parent f5e1b96 commit 22ae692

4 files changed

Lines changed: 52 additions & 40 deletions

File tree

api/packages/publishsave.go

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"os"
1010
"path/filepath"
1111
"strconv"
12-
"strings"
1312

1413
"github.com/blezek/tga"
1514
"github.com/flatgrassdotnet/cloudbox/common"
@@ -61,31 +60,18 @@ func PublishSave(w http.ResponseWriter, r *http.Request) {
6160
return
6261
}
6362

64-
if save.Include != "" {
65-
for _, inc := range strings.Split(save.Include, ",") {
66-
// usually means it hit the end but maybe not
67-
if inc == "" {
68-
continue
69-
}
70-
71-
i, err := strconv.Atoi(inc)
72-
if err != nil {
73-
utils.WriteError(w, r, fmt.Sprintf("failed to parse inc value: %s", err))
74-
return
75-
}
76-
77-
rev, err := db.FetchPackageLatestRevision(i)
78-
if err != nil {
79-
utils.WriteError(w, r, fmt.Sprintf("failed to fetch package latest revision: %s", err))
80-
return
81-
}
82-
83-
// save revision should always be 1 unless something has gone horribly wrong
84-
_, err = db.InsertPackageInclude(pkgID, 1, i, rev)
85-
if err != nil {
86-
utils.WriteError(w, r, fmt.Sprintf("failed to insert package include: %s", err))
87-
return
88-
}
63+
for _, include := range save.Includes {
64+
rev, err := db.FetchPackageLatestRevision(include)
65+
if err != nil {
66+
utils.WriteError(w, r, fmt.Sprintf("failed to fetch package latest revision: %s", err))
67+
return
68+
}
69+
70+
// save revision should always be 1
71+
_, err = db.InsertPackageInclude(pkgID, 1, include, rev)
72+
if err != nil {
73+
utils.WriteError(w, r, fmt.Sprintf("failed to insert package include: %s", err))
74+
return
8975
}
9076
}
9177

common/upload.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ package common
2121
type Upload struct {
2222
Type string
2323
Metadata string
24-
Include string
24+
Includes []int
2525
Data []byte
2626
}

db/upload.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,16 @@
1818

1919
package db
2020

21-
import "github.com/flatgrassdotnet/cloudbox/common"
21+
import (
22+
"encoding/json"
23+
24+
"github.com/flatgrassdotnet/cloudbox/common"
25+
)
2226

2327
func InsertUpload(steamid int, upload common.Upload) (int, error) {
24-
r, err := handle.Exec("INSERT INTO uploads (steamid, type, meta, inc, data) VALUES (?, ?, ?, ?, ?)", steamid, upload.Type, upload.Metadata, upload.Include, upload.Data)
28+
includes, _ := json.Marshal(upload.Includes)
29+
30+
r, err := handle.Exec("INSERT INTO uploads (steamid, type, meta, includes, data) VALUES (?, ?, ?, ?, ?)", steamid, upload.Type, upload.Metadata, includes, upload.Data)
2531
if err != nil {
2632
return 0, err
2733
}
@@ -36,11 +42,14 @@ func InsertUpload(steamid int, upload common.Upload) (int, error) {
3642

3743
func FetchUpload(id int) (common.Upload, error) {
3844
var upload common.Upload
39-
err := handle.QueryRow("SELECT type, meta, inc, data FROM uploads WHERE id = ?", id).Scan(&upload.Type, &upload.Metadata, &upload.Include, &upload.Data)
45+
var includes string
46+
err := handle.QueryRow("SELECT type, meta, includes, data FROM uploads WHERE id = ?", id).Scan(&upload.Type, &upload.Metadata, &includes, &upload.Data)
4047
if err != nil {
4148
return upload, err
4249
}
4350

51+
json.Unmarshal([]byte(includes), &upload.Includes)
52+
4453
return upload, nil
4554
}
4655

ingame/toyboxapi/upload.go

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
package toyboxapi
2020

2121
import (
22+
"bytes"
2223
"encoding/base64"
24+
"encoding/csv"
2325
"fmt"
2426
"io"
2527
"net/http"
@@ -48,23 +50,38 @@ func Upload(w http.ResponseWriter, r *http.Request) {
4850
// metadata
4951
meta := r.URL.Query().Get("meta")
5052

51-
// unknown
52-
inc := r.URL.Query().Get("inc")
53+
// includes
54+
var includes []int
55+
if r.URL.Query().Has("inc") {
56+
incs, err := csv.NewReader(bytes.NewReader([]byte(r.URL.Query().Get("inc")))).Read()
57+
if err != nil {
58+
utils.WriteError(w, r, fmt.Sprintf("failed to decode inc: %s", err))
59+
return
60+
}
5361

54-
body, err := io.ReadAll(r.Body)
55-
if err != nil {
56-
utils.WriteError(w, r, fmt.Sprintf("failed to read post body: %s", err))
57-
return
62+
for _, inc := range incs {
63+
// ignore blank entries
64+
if inc == "" {
65+
continue
66+
}
67+
68+
id, err := strconv.Atoi(inc)
69+
if err != nil {
70+
utils.WriteError(w, r, fmt.Sprintf("failed to decode inc value: %s", err))
71+
return
72+
}
73+
74+
includes = append(includes, id)
75+
}
5876
}
5977

60-
decoded := make([]byte, base64.StdEncoding.DecodedLen(len(body)))
61-
_, err = base64.StdEncoding.Decode(decoded, body)
78+
body, err := io.ReadAll(base64.NewDecoder(base64.StdEncoding, r.Body))
6279
if err != nil {
63-
utils.WriteError(w, r, fmt.Sprintf("failed to parse post body: %s", err))
80+
utils.WriteError(w, r, fmt.Sprintf("failed to decode request body: %s", err))
6481
return
6582
}
6683

67-
id, err := db.InsertUpload(steamid, common.Upload{Type: uploadType, Metadata: meta, Include: inc, Data: decoded})
84+
id, err := db.InsertUpload(steamid, common.Upload{Type: uploadType, Metadata: meta, Includes: includes, Data: body})
6885
if err != nil {
6986
utils.WriteError(w, r, fmt.Sprintf("failed to insert upload: %s", err))
7087
return

0 commit comments

Comments
 (0)