Windows assets, check hash while upload

This commit is contained in:
Aurélie Delhaie
2022-06-16 22:45:24 +02:00
parent 5ed0cfa837
commit 86b0924148
17 changed files with 277 additions and 37 deletions

View File

@@ -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)

View File

@@ -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...")