Skip to content

Commit a0a1372

Browse files
committed
Merge branch 'dev'
2 parents 3dc42a3 + 02747e3 commit a0a1372

10 files changed

Lines changed: 183 additions & 171 deletions

File tree

go.mod

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ go 1.26.4
44

55
require (
66
github.com/codeclysm/extract/v4 v4.0.0
7+
github.com/ftbteam/keystone v0.0.5
78
github.com/hashicorp/go-version v1.9.0
9+
github.com/imroc/req/v3 v3.59.0
810
github.com/minio/selfupdate v0.6.0
911
github.com/pterm/pterm v0.12.83
1012
golang.org/x/term v0.44.0
@@ -15,17 +17,25 @@ require (
1517
atomicgo.dev/cursor v0.2.0 // indirect
1618
atomicgo.dev/keyboard v0.2.10 // indirect
1719
atomicgo.dev/schedule v0.1.0 // indirect
20+
github.com/andybalholm/brotli v1.2.0 // indirect
21+
github.com/aviddiviner/go-murmur v0.0.0-20150519214947-b9740d71e571 // indirect
1822
github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
1923
github.com/containerd/console v1.0.5 // indirect
24+
github.com/google/go-querystring v1.1.0 // indirect
2025
github.com/gookit/color v1.6.1 // indirect
2126
github.com/h2non/filetype v1.1.3 // indirect
27+
github.com/icholy/digest v1.1.0 // indirect
2228
github.com/juju/errors v1.0.0 // indirect
2329
github.com/klauspost/compress v1.18.6 // indirect
2430
github.com/lithammer/fuzzysearch v1.1.8 // indirect
2531
github.com/mattn/go-runewidth v0.0.23 // indirect
32+
github.com/quic-go/qpack v0.6.0 // indirect
33+
github.com/quic-go/quic-go v0.60.0 // indirect
34+
github.com/refraction-networking/utls v1.8.2 // indirect
2635
github.com/ulikunitz/xz v0.5.15 // indirect
2736
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
2837
golang.org/x/crypto v0.51.0 // indirect
38+
golang.org/x/net v0.55.0 // indirect
2939
golang.org/x/sys v0.46.0 // indirect
3040
golang.org/x/text v0.37.0 // indirect
3141
)

go.sum

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@ atomicgo.dev/schedule v0.1.0 h1:nTthAbhZS5YZmgYbb2+DH8uQIZcTlIrd4eYr3UQxEjs=
1111
atomicgo.dev/schedule v0.1.0/go.mod h1:xeUa3oAkiuHYh8bKiQBRojqAMq3PXXbJujjb0hw8pEU=
1212
github.com/MarvinJWendt/testza v0.5.2 h1:53KDo64C1z/h/d/stCYCPY69bt/OSwjq5KpFNwi+zB4=
1313
github.com/MarvinJWendt/testza v0.5.2/go.mod h1:xu53QFE5sCdjtMCKk8YMQ2MnymimEctc4n3EjyIYvEY=
14+
github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ=
15+
github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
1416
github.com/arduino/go-paths-helper v1.12.1 h1:WkxiVUxBjKWlLMiMuYy8DcmVrkxdP7aKxQOAq7r2lVM=
1517
github.com/arduino/go-paths-helper v1.12.1/go.mod h1:jcpW4wr0u69GlXhTYydsdsqAjLaYK5n7oWHfKqOG6LM=
18+
github.com/aviddiviner/go-murmur v0.0.0-20150519214947-b9740d71e571 h1:seCdAEDyB0Hti/v1VajB7pAOIk9zmz/0/KE0D0oFqnc=
19+
github.com/aviddiviner/go-murmur v0.0.0-20150519214947-b9740d71e571/go.mod h1:VzSzsYCY3W9xWYWD8T2GLDidWTe5rTZv+UdDMGhLfjg=
1620
github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk=
1721
github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
1822
github.com/codeclysm/extract/v4 v4.0.0 h1:H87LFsUNaJTu2e/8p/oiuiUsOK/TaPQ5wxsjPnwPEIY=
@@ -21,6 +25,13 @@ github.com/containerd/console v1.0.5 h1:R0ymNeydRqH2DmakFNdmjR2k0t7UPuiOV/N/27/q
2125
github.com/containerd/console v1.0.5/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
2226
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2327
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
28+
github.com/ftbteam/keystone v0.0.5 h1:1IO/xICIA0EPbr5NAg8HMrszF8B/K8iXO0kc5uoZXtQ=
29+
github.com/ftbteam/keystone v0.0.5/go.mod h1:Prtg8X+pW5TWdQADymyHoAVUfhKgUQTDYSFznVjvknI=
30+
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
31+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
32+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
33+
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
34+
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
2435
github.com/gookit/assert v0.1.1 h1:lh3GcawXe/p+cU7ESTZ5Ui3Sm/x8JWpIis4/1aF0mY0=
2536
github.com/gookit/assert v0.1.1/go.mod h1:jS5bmIVQZTIwk42uXl4lyj4iaaxx32tqH16CFj0VX2E=
2637
github.com/gookit/color v1.6.1 h1:KoTnDxJPRgrL0SoX0f8rCFg2zI0t4E3GZZBMo2nN8LU=
@@ -29,14 +40,18 @@ github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg=
2940
github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY=
3041
github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA=
3142
github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
43+
github.com/icholy/digest v1.1.0 h1:HfGg9Irj7i+IX1o1QAmPfIBNu/Q5A5Tu3n/MED9k9H4=
44+
github.com/icholy/digest v1.1.0/go.mod h1:QNrsSGQ5v7v9cReDI0+eyjsXGUoRSUZQHeQ5C4XLa0Y=
45+
github.com/imroc/req/v3 v3.59.0 h1:PqKhJHyBmJYob47LVuTHwRZE00ZO6icbLHe5Zra13jo=
46+
github.com/imroc/req/v3 v3.59.0/go.mod h1:cwLwwaE90Pq6ZMmKuHA9FivJbg3avnCH8/RA5lUUs74=
3247
github.com/juju/errors v1.0.0 h1:yiq7kjCLll1BiaRuNY53MGI0+EQ3rF6GB+wvboZDefM=
3348
github.com/juju/errors v1.0.0/go.mod h1:B5x9thDqx0wIMH3+aLIMP9HjItInYWObRovoCFM5Qe8=
3449
github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao=
3550
github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
3651
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
3752
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
38-
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
39-
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
53+
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
54+
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
4055
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
4156
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
4257
github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4=
@@ -49,15 +64,29 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
4964
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
5065
github.com/pterm/pterm v0.12.83 h1:ie+YmGmA727VuhxBlyGr74Ks+7McV6kT99IB8EU80aA=
5166
github.com/pterm/pterm v0.12.83/go.mod h1:xlgc6bFWyJIMtmLJvGim+L7jhSReilOlOnodeIYe4Tk=
67+
github.com/quic-go/go-ossfuzz-seeds v0.1.0 h1:APacT+iIaNF6fd8AGEiN3bT/Jtkd2jz4v4TzM7MFjy0=
68+
github.com/quic-go/go-ossfuzz-seeds v0.1.0/go.mod h1:3IOHRbJIc+L6YKMwfDtJAM9Vj9k0YY4muhuyUYk5tbk=
69+
github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8=
70+
github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII=
71+
github.com/quic-go/quic-go v0.60.0 h1:xcQioE8OM66UQLeUMHltK1CCcOu3JbVB4JAQdDQSB+0=
72+
github.com/quic-go/quic-go v0.60.0/go.mod h1:wpKpjmPpftl30sL6pFh7REVpjbcCVy4zt2vDyK1TuJk=
73+
github.com/refraction-networking/utls v1.8.2 h1:j4Q1gJj0xngdeH+Ox/qND11aEfhpgoEvV+S9iJ2IdQo=
74+
github.com/refraction-networking/utls v1.8.2/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM=
75+
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
76+
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
5277
github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw=
5378
github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
54-
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
55-
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
79+
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
80+
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
5681
github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY=
5782
github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
5883
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
5984
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
85+
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
86+
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
6087
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
88+
go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
89+
go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
6190
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
6291
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
6392
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
@@ -74,6 +103,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
74103
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
75104
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
76105
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
106+
golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
107+
golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
77108
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
78109
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
79110
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -108,7 +139,10 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
108139
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
109140
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
110141
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
142+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
111143
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
112144
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
113145
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
114146
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
147+
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
148+
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=

main.go

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import (
2525
"time"
2626

2727
"github.com/codeclysm/extract/v4"
28+
"github.com/ftbteam/keystone"
29+
"github.com/imroc/req/v3"
2830
"github.com/pterm/pterm"
2931
"github.com/pterm/pterm/putils"
3032
"golang.org/x/term"
@@ -134,6 +136,16 @@ func main() {
134136
pterm.DefaultCenter.WithCenterEachLineSeparately().Printfln("Server installer version: %s(%s)\n%s", util.ReleaseVersion, util.GitCommit, time.Now().UTC().Format(time.RFC1123))
135137
pterm.DefaultCenter.WithCenterEachLineSeparately().Println(pterm.Bold.Sprintf("Installer Issue tracker\nhttps://github.com/FTBTeam/FTB-Server-Installer/issues"))
136138

139+
// Set request client user agent
140+
util.ReqClient.SetUserAgent(util.UserAgent)
141+
142+
util.ReqClient.OnBeforeRequest(func(c *req.Client, r *req.Request) (err error) {
143+
if util.ApiKey != "public" && strings.HasPrefix(r.RawURL, "https://api.feed-the-beast.com") {
144+
r.SetHeader("Authorization", fmt.Sprintf("Bearer %s", util.ApiKey))
145+
}
146+
return nil
147+
})
148+
137149
versionInfo, err := checkForUpdate()
138150
if err != nil {
139151
pterm.Warning.Printfln("Error checking for installer update: %v", err)
@@ -689,11 +701,12 @@ func runValidation(manifest structs.Manifest) error {
689701
var invalidFiles []structs.File
690702
for _, f := range manifest.Files {
691703
if f.HashType != "" && f.Hash != "" {
692-
fileHash, err := util.FileHash(filepath.Join(installDir, f.Path, f.Name), f.HashType)
704+
fileHash, err := processValidationFiles(f)
693705
if err != nil {
694706
pterm.Error.Println("Error getting file hash:", err.Error())
695707
continue
696708
}
709+
697710
if fileHash != f.Hash {
698711
pterm.Warning.Printfln("Unexpected file hash from %s\nExpected: %s\nGot: %s", f.Name, f.Hash, fileHash)
699712
invalidFiles = append(invalidFiles, f)
@@ -722,6 +735,21 @@ func runValidation(manifest structs.Manifest) error {
722735
return nil
723736
}
724737

738+
func processValidationFiles(f structs.File) (string, error) {
739+
packFile, err := os.Open(filepath.Join(installDir, f.Path, f.Name))
740+
if err != nil {
741+
return "", err
742+
}
743+
defer packFile.Close()
744+
745+
hashType, err := keystone.CryptoFromString(f.HashType)
746+
if err != nil {
747+
return "", err
748+
}
749+
750+
return keystone.FileHash(packFile, hashType)
751+
}
752+
725753
func isSameModpack(currentManifest, newManifest structs.Manifest) bool {
726754
if currentManifest.Id != newManifest.Id {
727755
return false

modloaders/fabric.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package modloaders
22

33
import (
4-
"encoding/json"
54
"fmt"
65
"ftb-server-downloader/structs"
76
"ftb-server-downloader/util"
@@ -105,16 +104,17 @@ func (s Fabric) Install(useOwnJava bool) error {
105104

106105
func getInstaller() ([]FabricInstaller, error) {
107106
url := fmt.Sprintf("%s/v2/versions/installer", fabricMeta)
108-
resp, err := util.DoGet(url)
107+
108+
var fabricInstaller []FabricInstaller
109+
resp, err := util.ReqClient.R().
110+
SetSuccessResult(&fabricInstaller).
111+
Get(url)
109112
if err != nil {
110-
return []FabricInstaller{}, err
113+
return nil, err
111114
}
112-
defer resp.Body.Close()
113-
var fabricInstaller []FabricInstaller
114115

115-
err = json.NewDecoder(resp.Body).Decode(&fabricInstaller)
116-
if err != nil {
117-
return []FabricInstaller{}, err
116+
if !resp.IsSuccessState() {
117+
return nil, fmt.Errorf("error getting fabric installer from %s (%s)", url, resp.Status)
118118
}
119119

120120
return fabricInstaller, nil

modloaders/forge.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,12 @@ func (s Forge) Install(useOwnJava bool) error {
160160
}
161161

162162
func doesForgeExist(url string) bool {
163-
resp, err := util.DoHead(url)
164-
if err != nil {
163+
resp, err := util.ReqClient.R().
164+
Head(url)
165+
if err != nil || !resp.IsSuccessState() {
165166
return false
166167
}
167-
defer resp.Body.Close()
168+
168169
return true
169170
}
170171

modloaders/util.go

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package modloaders
33
import (
44
"fmt"
55
"ftb-server-downloader/util"
6-
"io"
76
"os"
87
"path/filepath"
98

@@ -33,20 +32,21 @@ func Log4JFixer(installDir string, mcVersion string) (string, error) {
3332

3433
if mcSemVer.GreaterThanOrEqual(semVer.Must(semVer.NewVersion("1.7"))) && mcSemVer.LessThanOrEqual(semVer.Must(semVer.NewVersion("1.11.2"))) {
3534
pterm.Info.Printfln("Downloading log4j fix log4j2_17-111.xml")
36-
get, err := util.DoGet("https://launcher.mojang.com/v1/objects/4bb89a97a66f350bc9f73b3ca8509632682aea2e/log4j2_17-111.xml")
37-
if err != nil {
38-
return "", err
39-
}
40-
defer get.Body.Close()
4135

42-
out, err := os.Create(filepath.Join(installDir, patchesPath, "log4j2_17-111.xml"))
36+
const log4JUrl = "https://launcher.mojang.com/v1/objects/4bb89a97a66f350bc9f73b3ca8509632682aea2e/log4j2_17-111.xml"
37+
log4jPath := filepath.Join(installDir, patchesPath, "log4j2_17-111.xml")
38+
39+
resp, err := util.ReqClient.R().
40+
SetOutputFile(log4jPath).
41+
Get(log4JUrl)
42+
4343
if err != nil {
4444
return "", err
4545
}
46-
defer out.Close()
47-
_, err = io.Copy(out, get.Body)
48-
if err != nil {
49-
return "", err
46+
47+
if !resp.IsSuccessState() {
48+
_ = os.Remove(log4jPath)
49+
return "", fmt.Errorf("failed to download log4j fix: %s", resp.Status)
5050
}
5151

5252
return fmt.Sprintf("-Dlog4j.configurationFile=%s", filepath.Join(patchesPath, "log4j2_17-111.xml")), nil
@@ -55,20 +55,20 @@ func Log4JFixer(installDir string, mcVersion string) (string, error) {
5555

5656
if mcSemVer.GreaterThanOrEqual(semVer.Must(semVer.NewVersion("1.12"))) && mcSemVer.LessThanOrEqual(semVer.Must(semVer.NewVersion("1.16.5"))) {
5757
pterm.Info.Printfln("Downloading log4j fix log4j2_112-116.xml")
58-
get, err := util.DoGet("https://launcher.mojang.com/v1/objects/02937d122c86ce73319ef9975b58896fc1b491d1/log4j2_112-116.xml")
59-
if err != nil {
60-
return "", err
61-
}
62-
defer get.Body.Close()
58+
const log4jUrl = "https://launcher.mojang.com/v1/objects/02937d122c86ce73319ef9975b58896fc1b491d1/log4j2_112-116.xml"
59+
log4jPath := filepath.Join(installDir, patchesPath, "log4j2_112-116.xml")
60+
61+
resp, err := util.ReqClient.R().
62+
SetOutputFile(log4jPath).
63+
Get(log4jUrl)
6364

64-
out, err := os.Create(filepath.Join(installDir, patchesPath, "log4j2_112-116.xml"))
6565
if err != nil {
6666
return "", err
6767
}
68-
defer out.Close()
69-
_, err = io.Copy(out, get.Body)
70-
if err != nil {
71-
return "", err
68+
69+
if !resp.IsSuccessState() {
70+
_ = os.Remove(log4jPath)
71+
return "", fmt.Errorf("failed to download log4j fix: %s", resp.Status)
7272
}
7373
return fmt.Sprintf("-Dlog4j.configurationFile=%s", filepath.Join(patchesPath, "log4j2_112-116.xml")), nil
7474
}

modloaders/vanilla.go

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package modloaders
22

33
import (
4-
"encoding/json"
54
"errors"
65
"fmt"
76
"ftb-server-downloader/structs"
@@ -17,17 +16,16 @@ type Vanilla struct {
1716
}
1817

1918
func GetVanilla(target structs.ModpackTargets, installDir string) (Vanilla, error) {
20-
21-
rawMeta, err := util.DoGet(launcherMeta)
19+
var meta LauncherMeta
20+
rawMeta, err := util.ReqClient.R().
21+
SetSuccessResult(&meta).
22+
Get(launcherMeta)
2223
if err != nil {
2324
return Vanilla{}, err
2425
}
25-
defer rawMeta.Body.Close()
2626

27-
var meta LauncherMeta
28-
err = json.NewDecoder(rawMeta.Body).Decode(&meta)
29-
if err != nil {
30-
return Vanilla{}, err
27+
if !rawMeta.IsSuccessState() {
28+
return Vanilla{}, fmt.Errorf("failed to fetch launcher meta: %s", rawMeta.Status)
3129
}
3230

3331
return Vanilla{
@@ -38,7 +36,6 @@ func GetVanilla(target structs.ModpackTargets, installDir string) (Vanilla, erro
3836
}
3937

4038
func (v Vanilla) GetDownload() ([]structs.File, error) {
41-
var mlFiles []structs.File
4239

4340
var servDlUrl string
4441
for _, version := range v.Meta.Versions {
@@ -49,21 +46,23 @@ func (v Vanilla) GetDownload() ([]structs.File, error) {
4946
}
5047

5148
if servDlUrl == "" {
52-
return mlFiles, errors.New("version not found")
49+
return nil, errors.New("version not found")
5350
}
5451

55-
rawVer, err := util.DoGet(servDlUrl)
52+
var version VanillaVersion
53+
rawVer, err := util.ReqClient.R().
54+
SetSuccessResult(&version).
55+
Get(servDlUrl)
56+
5657
if err != nil {
57-
return []structs.File{}, err
58+
return nil, err
5859
}
59-
defer rawVer.Body.Close()
6060

61-
var version VanillaVersion
62-
err = json.NewDecoder(rawVer.Body).Decode(&version)
63-
if err != nil {
64-
return []structs.File{}, err
61+
if !rawVer.IsSuccessState() {
62+
return nil, fmt.Errorf("failed to fetch vanilla version: %s", rawVer.Status)
6563
}
6664

65+
var mlFiles []structs.File
6766
mlFiles = append(mlFiles, structs.File{
6867
Name: fmt.Sprintf("minecraft_server.%s.jar", v.Version),
6968
Url: version.Downloads.Server.URL,

0 commit comments

Comments
 (0)