From 86b09241480ac75a64f34543bc159c8b197dec89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lie=20Delhaie?= Date: Thu, 16 Jun 2022 22:45:24 +0200 Subject: [PATCH] Windows assets, check hash while upload --- build.sh | 19 +++++++++++--- common.go | 26 +++++++++++++++++++ config/config.go | 2 +- database/database.go | 2 +- go.mod | 10 ++++++++ go.sum | 28 ++++++++++++++++++++ main.go | 4 +++ main_windows.go | 47 ++++++++++++++++++++++++++++++++++ server/data.go | 21 ++++++++++++++- server/server.go | 50 ++++++++++++++++++------------------ upload/upload.go | 46 +++++++++++++++++++++++++++++---- winres/icon.png | Bin 0 -> 39803 bytes winres/icon_16.png | Bin 0 -> 1093 bytes winres/icon_32.png | Bin 0 -> 1692 bytes winres/icon_48.png | Bin 0 -> 2853 bytes winres/icon_64.png | Bin 0 -> 3721 bytes winres/winres.json | 59 +++++++++++++++++++++++++++++++++++++++++++ 17 files changed, 277 insertions(+), 37 deletions(-) create mode 100644 common.go create mode 100644 main_windows.go create mode 100644 winres/icon.png create mode 100644 winres/icon_16.png create mode 100644 winres/icon_32.png create mode 100644 winres/icon_48.png create mode 100644 winres/icon_64.png create mode 100644 winres/winres.json diff --git a/build.sh b/build.sh index 844bda2..26a711b 100644 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -platforms=("windows/amd64" "windows/arm64" "darwin/amd64" "darwin/arm64" "linux/amd64" "linux/arm64") +platforms=("windows/amd64" "linux/amd64" "linux/arm64" "linux/arm") if [[ -d "./build" ]] then @@ -8,7 +8,6 @@ then fi mkdir build -cd build for platform in "${platforms[@]}" do @@ -16,9 +15,21 @@ do platform_split=(${platform//\// }) GOOS=${platform_split[0]} GOARCH=${platform_split[1]} - output_name='osc-'$GOOS'-'$GOARCH + output_name='./build/osc-'$GOOS'-'$GOARCH if [ $GOOS = "windows" ]; then output_name+='.exe' + go generate + env GOAMD64=v3 GOOS=$GOOS GOARCH=$GOARCH CGO_ENABLED=1 go build -o $output_name -a + else + if [ $GOARCH = "arm" ]; then + env GOARM=7 GOOS=$GOOS GOARCH=$GOARCH CGO_ENABLED=0 go build -o $output_name -a + else + if [ $GOARCH = "amd64" ]; then + env GOAMD64=v3 GOOS=$GOOS GOARCH=$GOARCH CGO_ENABLED=0 go build -o $output_name -a + else + env GOOS=$GOOS GOARCH=$GOARCH CGO_ENABLED=0 go build -o $output_name -a + fi + fi fi - env GOOS=$GOOS GOARCH=$GOARCH go build -o $output_name -a ../main.go + done \ No newline at end of file diff --git a/common.go b/common.go new file mode 100644 index 0000000..d460eb9 --- /dev/null +++ b/common.go @@ -0,0 +1,26 @@ +package main + +import ( + "io" + "log" + "opensavecloudserver/config" + "opensavecloudserver/database" + "os" +) + +func InitCommon() { + f, err := os.OpenFile("server.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) + if err != nil { + log.Fatalf("error opening file: %v", err) + } + defer func(f *os.File) { + err := f.Close() + if err != nil { + log.Println(err) + } + }(f) + log.SetOutput(io.MultiWriter(os.Stdout, f)) + + config.Init() + database.Init() +} diff --git a/config/config.go b/config/config.go index d4e817f..7105bb2 100644 --- a/config/config.go +++ b/config/config.go @@ -38,7 +38,7 @@ type FeaturesConfiguration struct { var currentConfig *Configuration -func init() { +func Init() { path := flag.String("config", "./config.yml", "Set the configuration file path") flag.Parse() configYamlContent, err := os.ReadFile(*path) diff --git a/database/database.go b/database/database.go index 0abf8a7..cc24f4e 100644 --- a/database/database.go +++ b/database/database.go @@ -18,7 +18,7 @@ var db *gorm.DB const AdminRole string = "admin" const UserRole string = "user" -func init() { +func Init() { dbConfig := config.Database() var err error connectionString := "" diff --git a/go.mod b/go.mod index b4669e4..3f302f1 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module opensavecloudserver go 1.18 require ( + github.com/getlantern/systray v1.2.1 github.com/go-chi/chi/v5 v5.0.7 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/google/uuid v1.3.0 @@ -13,7 +14,16 @@ require ( ) require ( + github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 // indirect + github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7 // indirect + github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7 // indirect + github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7 // indirect + github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 // indirect + github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f // indirect github.com/go-sql-driver/mysql v1.6.0 // indirect + github.com/go-stack/stack v1.8.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.4 // indirect + github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect + golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 // indirect ) diff --git a/go.sum b/go.sum index ad26ba0..62d4f9c 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,25 @@ +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 h1:NRUJuo3v3WGC/g5YiyF790gut6oQr5f3FBI88Wv0dx4= +github.com/getlantern/context v0.0.0-20190109183933-c447772a6520/go.mod h1:L+mq6/vvYHKjCX2oez0CgEAJmbq1fbb/oNJIWQkBybY= +github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7 h1:6uJ+sZ/e03gkbqZ0kUG6mfKoqDb4XMAzMIwlajq19So= +github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7/go.mod h1:l+xpFBrCtDLpK9qNjxs+cHU6+BAdlBaxHqikB6Lku3A= +github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7 h1:guBYzEaLz0Vfc/jv0czrr2z7qyzTOGC9hiQ0VC+hKjk= +github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7/go.mod h1:zx/1xUUeYPy3Pcmet8OSXLbF47l+3y6hIPpyLWoR9oc= +github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7 h1:micT5vkcr9tOVk1FiH8SWKID8ultN44Z+yzd2y/Vyb0= +github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7/go.mod h1:dD3CgOrwlzca8ed61CsZouQS5h5jIzkK9ZWrTcf0s+o= +github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0FDNrgJqGRo8PCMFOBFL9py72DRs7bmc= +github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA= +github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f h1:wrYrQttPS8FHIRSlsrcuKazukx/xqO/PpLZzZXsF+EA= +github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA= +github.com/getlantern/systray v1.2.1 h1:udsC2k98v2hN359VTFShuQW6GGprRprw6kD6539JikI= +github.com/getlantern/systray v1.2.1/go.mod h1:AecygODWIsBquJCJFop8MEQcJbWFfw/1yWbVabNgpCM= github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8= github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -10,8 +28,18 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.4 h1:tHnRBy1i5F2Dh8BAFxqFzxKqqvezXrL2OW1TnX+Mlas= github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= +github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= golang.org/x/crypto v0.0.0-20220507011949-2cf3adece122 h1:NvGWuYG8dkDHFSKksI1P9faiVJ9rayE6l0+ouWVIDs8= golang.org/x/crypto v0.0.0-20220507011949-2cf3adece122/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= diff --git a/main.go b/main.go index dd8b120..616aa49 100644 --- a/main.go +++ b/main.go @@ -1,3 +1,6 @@ +//go:build !windows +// +build !windows + package main import ( @@ -9,5 +12,6 @@ import ( func main() { fmt.Printf("Open Save Cloud (Server) %s (%s %s)\n", constant.Version, runtime.GOOS, runtime.GOARCH) + InitCommon() server.Serve() } diff --git a/main_windows.go b/main_windows.go new file mode 100644 index 0000000..afeb567 --- /dev/null +++ b/main_windows.go @@ -0,0 +1,47 @@ +//go:build windows + +package main + +import ( + _ "embed" + "github.com/getlantern/systray" + "opensavecloudserver/constant" + "opensavecloudserver/server" + "os" +) + +//go:generate go-winres make + +//go:embed tray.ico +var icon []byte + +func main() { + go func() { + InitCommon() + server.Serve() + }() + systray.Run(onReady, onExit) +} + +func onReady() { + systray.SetIcon(icon) + systray.SetTitle("Open Save Cloud Server") + systray.SetTooltip("Open Save Cloud Server") + systray.AddMenuItem("Open Save Cloud", "").Disable() + systray.AddMenuItem(constant.Version, "").Disable() + systray.AddSeparator() + mQuit := systray.AddMenuItem("Quit", "Quit the server") + select { + case <-mQuit.ClickedCh: + quit() + } +} + +func quit() { + systray.Quit() + os.Exit(0) +} + +func onExit() { + systray.Quit() +} diff --git a/server/data.go b/server/data.go index 11b576b..8018bc1 100644 --- a/server/data.go +++ b/server/data.go @@ -13,6 +13,7 @@ import ( "os" "path/filepath" "strconv" + "strings" "time" "unicode/utf8" ) @@ -154,6 +155,11 @@ func UploadSave(w http.ResponseWriter, r *http.Request) { badRequest("The header X-Game-Save-Hash is missing", w, r) return } + archiveHash := strings.ToLower(r.Header.Get("X-Hash")) + if utf8.RuneCountInString(hash) == 0 { + badRequest("The header X-Hash is missing", w, r) + return + } game, err := database.GameInfoById(userId, gameId) if err != nil { internalServerError(w, r) @@ -172,7 +178,13 @@ func UploadSave(w http.ResponseWriter, r *http.Request) { log.Println(err) } }(file) - err = upload.ProcessFile(file, game) + err = upload.UploadToCache(file, game) + if err != nil { + internalServerError(w, r) + log.Println(err) + return + } + err = upload.ValidateAndMove(game, archiveHash) if err != nil { internalServerError(w, r) log.Println(err) @@ -216,6 +228,12 @@ func Download(w http.ResponseWriter, r *http.Request) { savePath := filepath.Join(config.Path().Storage, strconv.Itoa(userId), game.PathStorage) if _, err := os.Stat(savePath); err == nil { + hash, err := upload.FileHash(savePath) + if err != nil { + internalServerError(w, r) + log.Println(err) + return + } file, err := os.Open(savePath) if err != nil { internalServerError(w, r) @@ -228,6 +246,7 @@ func Download(w http.ResponseWriter, r *http.Request) { log.Println(err) } }(file) + w.Header().Add("X-Hash", strings.ToUpper(hash)) _, err = io.Copy(w, file) if err != nil { internalServerError(w, r) diff --git a/server/server.go b/server/server.go index 82032f8..008df41 100644 --- a/server/server.go +++ b/server/server.go @@ -36,35 +36,35 @@ func Serve() { r.Route("/system", func(systemRouter chi.Router) { systemRouter.Get("/information", Information) }) - r.Route("/user", func(secureRouter chi.Router) { - secureRouter.Use(authMiddleware) - secureRouter.Get("/information", UserInformation) - secureRouter.Post("/passwd", ChangePassword) + r.Route("/admin", func(adminRouter chi.Router) { + adminRouter.Use(adminMiddleware) + adminRouter.Post("/user", AddUser) + adminRouter.Post("/user/passwd/{id}", ChangeUserPassword) + adminRouter.Delete("/user/{id}", RemoveUser) + adminRouter.Get("/user/{id}", User) + adminRouter.Get("/users", AllUsers) + adminRouter.Get("/user/role/admin/{id}", SetAdmin) + adminRouter.Get("/user/role/user/{id}", SetNotAdmin) }) - r.Route("/admin", func(secureRouter chi.Router) { - secureRouter.Use(adminMiddleware) - secureRouter.Post("/user", AddUser) - secureRouter.Post("/user/passwd/{id}", ChangeUserPassword) - secureRouter.Delete("/user/{id}", RemoveUser) - secureRouter.Get("/user/{id}", User) - secureRouter.Get("/users", AllUsers) - secureRouter.Get("/user/role/admin/{id}", SetAdmin) - secureRouter.Get("/user/role/user/{id}", SetNotAdmin) - }) - r.Route("/game", func(secureRouter chi.Router) { + r.Group(func(secureRouter chi.Router) { secureRouter.Use(authMiddleware) - secureRouter.Post("/create", CreateGame) - secureRouter.Get("/all", AllGamesInformation) - secureRouter.Delete("/remove/{id}", RemoveGame) - secureRouter.Get("/info/{id}", GameInfoByID) - secureRouter.Post("/upload/init", AskForUpload) - secureRouter.Group(func(uploadRouter chi.Router) { - uploadRouter.Use(uploadMiddleware) - uploadRouter.Post("/upload", UploadSave) - uploadRouter.Get("/download", Download) + secureRouter.Route("/user", func(userRouter chi.Router) { + userRouter.Get("/information", UserInformation) + userRouter.Post("/passwd", ChangePassword) + }) + secureRouter.Route("/game", func(gameRouter chi.Router) { + gameRouter.Post("/create", CreateGame) + gameRouter.Get("/all", AllGamesInformation) + gameRouter.Delete("/remove/{id}", RemoveGame) + gameRouter.Get("/info/{id}", GameInfoByID) + gameRouter.Post("/upload/init", AskForUpload) + gameRouter.Group(func(uploadRouter chi.Router) { + uploadRouter.Use(uploadMiddleware) + uploadRouter.Post("/upload", UploadSave) + uploadRouter.Get("/download", Download) + }) }) }) - }) }) log.Println("Server is listening...") diff --git a/upload/upload.go b/upload/upload.go index 08225e8..6391882 100644 --- a/upload/upload.go +++ b/upload/upload.go @@ -1,6 +1,7 @@ package upload import ( + "crypto/sha512" "errors" "fmt" "github.com/google/uuid" @@ -107,7 +108,7 @@ func CheckUploadToken(uploadToken string) (int, bool) { return -1, false } -func ProcessFile(file multipart.File, game *database.Game) error { +func UploadToCache(file multipart.File, game *database.Game) error { filePath := path.Join(config.Path().Cache, strconv.Itoa(game.UserId)) if _, err := os.Stat(filePath); err != nil { err = os.Mkdir(filePath, 0766) @@ -126,13 +127,30 @@ func ProcessFile(file multipart.File, game *database.Game) error { log.Println(err) } }(f) - _, err = io.Copy(f, file) + if _, err := io.Copy(f, file); err != nil { + return err + } + return nil +} + +func ValidateAndMove(game *database.Game, hash string) error { + filePath := path.Join(config.Path().Cache, strconv.Itoa(game.UserId), game.PathStorage) + if err := checkHash(filePath, hash); err != nil { + return err + } + if err := moveToStorage(filePath, game); err != nil { + return err + } + return nil +} + +func checkHash(path, hash string) error { + h, err := FileHash(path) if err != nil { return err } - err = moveToStorage(filePath, game) - if err != nil { - return err + if h != hash { + return errors.New("hash is different") } return nil } @@ -187,6 +205,24 @@ func RemoveGame(userId int, game *database.Game) error { return os.Remove(filePath) } +func FileHash(path string) (string, error) { + f, err := os.Open(path) + if err != nil { + return "", err + } + defer func(f *os.File) { + err := f.Close() + if err != nil { + log.Println(err) + } + }(f) + h := sha512.New() + if _, err := io.Copy(h, f); err != nil { + return "", err + } + return fmt.Sprintf("%x", h.Sum(nil)), nil +} + // clearLocks clear lock of zombi upload func clearLocks() { mu.Lock() diff --git a/winres/icon.png b/winres/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..95a03766df5051a96207e981a9db2ca92e7ae86c GIT binary patch literal 39803 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 literal 0 HcmV?d00001 diff --git a/winres/icon_16.png b/winres/icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..70ce3908c33a8b59def14e4db9addef7921a907c GIT binary patch literal 1093 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 D!i!u? literal 0 HcmV?d00001 diff --git a/winres/icon_64.png b/winres/icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..6ebc87ed6529b508e8ab9335718b8fab9837b7dc GIT binary patch literal 3721 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