117 lines
No EOL
2.8 KiB
Go
117 lines
No EOL
2.8 KiB
Go
package main
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"net/http"
|
|
"path/filepath"
|
|
"io"
|
|
"encoding/json"
|
|
|
|
"github.com/gorilla/mux"
|
|
"github.com/azukaar/cosmos-server/src/utils"
|
|
)
|
|
|
|
var validExtensions = map[string]bool{
|
|
".jpg": true,
|
|
".jpeg": true,
|
|
".png": true,
|
|
".gif": true,
|
|
".bmp": true,
|
|
".svg": true,
|
|
".webp": true,
|
|
".tiff": true,
|
|
".avif": true,
|
|
}
|
|
|
|
func UploadBackground(w http.ResponseWriter, req *http.Request) {
|
|
if utils.AdminOnly(w, req) != nil {
|
|
return
|
|
}
|
|
|
|
if(req.Method == "POST") {
|
|
// parse the form data
|
|
err := req.ParseMultipartForm(1 << 20)
|
|
if err != nil {
|
|
utils.HTTPError(w, "Error parsing form data", http.StatusInternalServerError, "FORM001")
|
|
return
|
|
}
|
|
|
|
// retrieve the file part of the form
|
|
file, header, err := req.FormFile("background")
|
|
if err != nil {
|
|
utils.HTTPError(w, "Error retrieving file from form data", http.StatusInternalServerError, "FORM002")
|
|
return
|
|
}
|
|
defer file.Close()
|
|
|
|
// get the file extension
|
|
ext := filepath.Ext(header.Filename)
|
|
|
|
if !validExtensions[ext] {
|
|
utils.HTTPError(w, "Invalid file extension " + ext, http.StatusBadRequest, "FILE001")
|
|
return
|
|
}
|
|
|
|
// create a new file in the config directory
|
|
dst, err := os.Create(utils.CONFIGFOLDER + "background" + ext)
|
|
if err != nil {
|
|
utils.HTTPError(w, "Error creating destination file", http.StatusInternalServerError, "FILE004")
|
|
return
|
|
}
|
|
defer dst.Close()
|
|
|
|
// copy the uploaded file to the destination file
|
|
if _, err := io.Copy(dst, file); err != nil {
|
|
utils.HTTPError(w, "Error writing to destination file", http.StatusInternalServerError, "FILE005")
|
|
return
|
|
}
|
|
|
|
// return a response to the client
|
|
json.NewEncoder(w).Encode(map[string]interface{}{
|
|
"status": "OK",
|
|
"data": map[string]interface{}{
|
|
"filename": header.Filename,
|
|
"size": header.Size,
|
|
"extension": ext,
|
|
},
|
|
})
|
|
|
|
} else {
|
|
utils.Error("UploadBackground: Method not allowed - " + req.Method, nil)
|
|
utils.HTTPError(w, "Method not allowed", http.StatusMethodNotAllowed, "HTTP001")
|
|
return
|
|
}
|
|
}
|
|
|
|
func GetBackground(w http.ResponseWriter, req *http.Request) {
|
|
if utils.LoggedInOnly(w, req) != nil {
|
|
return
|
|
}
|
|
|
|
vars := mux.Vars(req)
|
|
ext := vars["ext"]
|
|
|
|
if !validExtensions["." + ext] {
|
|
utils.HTTPError(w, "Invalid file extension", http.StatusBadRequest, "FILE001")
|
|
return
|
|
}
|
|
|
|
if(req.Method == "GET") {
|
|
// get the background image
|
|
bg, err := ioutil.ReadFile(utils.CONFIGFOLDER + "background." + ext)
|
|
if err != nil {
|
|
utils.HTTPError(w, "Error reading background image", http.StatusInternalServerError, "FILE003")
|
|
return
|
|
}
|
|
|
|
// return a response to the client
|
|
w.Header().Set("Content-Type", "image/" + ext)
|
|
w.Write(bg)
|
|
|
|
} else {
|
|
utils.Error("GetBackground: Method not allowed - " + req.Method, nil)
|
|
utils.HTTPError(w, "Method not allowed", http.StatusMethodNotAllowed, "HTTP001")
|
|
return
|
|
}
|
|
} |