63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
func AddService(w http.ResponseWriter, req *http.Request) {
|
|
req.ParseMultipartForm(10 << 20)
|
|
file, handler, err := req.FormFile("img")
|
|
if err != nil {
|
|
fmt.Println("error retrieving the file: ", err)
|
|
return
|
|
}
|
|
defer file.Close()
|
|
|
|
dst, err := os.Create(os.Getenv("IMG_UPLOAD_PATH") + "/" + handler.Filename)
|
|
if err != nil {
|
|
fmt.Println("Error creating destination file:", err)
|
|
return
|
|
}
|
|
defer dst.Close()
|
|
if _, err := io.Copy(dst, file); err != nil {
|
|
fmt.Println("Error copying file:", err)
|
|
return
|
|
}
|
|
newService := make(map[string]any)
|
|
newService["img"] = "img/" + handler.Filename
|
|
newService["href"] = req.FormValue("href")
|
|
newService["text"] = req.FormValue("text")
|
|
newService["alt"] = req.FormValue("text") + "icon"
|
|
newService["key"] = uuid.New().String()
|
|
allservices := ReadServicesFile()
|
|
var allservicesmap []map[string]any
|
|
err = json.Unmarshal([]byte(allservices), &allservicesmap)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
exists := false
|
|
for i := range allservicesmap {
|
|
if allservicesmap[i]["href"] == newService["href"] {
|
|
exists = true
|
|
break
|
|
}
|
|
}
|
|
if !exists {
|
|
allservicesmap = append(allservicesmap, newService)
|
|
res, err := json.Marshal(allservicesmap)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
os.WriteFile(os.Getenv("SERVICES_FILE"), res, 4755)
|
|
fmt.Fprintf(w, "%s", res)
|
|
return
|
|
}
|
|
fmt.Fprint(w, "{\"status\":\"already exists\"}")
|
|
}
|