mirror of
https://github.com/Dvorinka/PPve.git
synced 2026-06-04 04:22:58 +00:00
116 lines
2.5 KiB
Go
116 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"sync"
|
|
)
|
|
|
|
type BannerStyle struct {
|
|
BackgroundColor string `json:"backgroundColor"`
|
|
TextColor string `json:"textColor"`
|
|
FontSize string `json:"fontSize"`
|
|
TextAlign string `json:"textAlign"`
|
|
Padding string `json:"padding"`
|
|
Margin string `json:"margin"`
|
|
BorderRadius string `json:"borderRadius"`
|
|
IsVisible bool `json:"isVisible"`
|
|
}
|
|
|
|
type BannerContent struct {
|
|
Text string `json:"text"`
|
|
Image string `json:"image,omitempty"`
|
|
Link string `json:"link,omitempty"`
|
|
Style BannerStyle `json:"style"`
|
|
}
|
|
|
|
var (
|
|
banner BannerContent
|
|
bannerLock sync.RWMutex
|
|
bannerFile = "banner.json"
|
|
)
|
|
|
|
func init() {
|
|
// Initialize with default values
|
|
banner = BannerContent{
|
|
Text: "Důležité oznámení: Tento banner lze upravit v administraci.",
|
|
Style: BannerStyle{
|
|
BackgroundColor: "#f8d7da",
|
|
TextColor: "#721c24",
|
|
FontSize: "16px",
|
|
TextAlign: "center",
|
|
Padding: "10px",
|
|
IsVisible: true,
|
|
},
|
|
}
|
|
loadBanner()
|
|
}
|
|
|
|
func loadBanner() {
|
|
if _, err := os.Stat(bannerFile); os.IsNotExist(err) {
|
|
saveBanner()
|
|
return
|
|
}
|
|
|
|
data, err := os.ReadFile(bannerFile)
|
|
if err != nil {
|
|
log.Printf("Error reading banner file: %v", err)
|
|
return
|
|
}
|
|
|
|
bannerLock.Lock()
|
|
defer bannerLock.Unlock()
|
|
|
|
if err := json.Unmarshal(data, &banner); err != nil {
|
|
log.Printf("Error parsing banner data: %v", err)
|
|
}
|
|
}
|
|
|
|
func saveBanner() error {
|
|
bannerLock.RLock()
|
|
defer bannerLock.RUnlock()
|
|
|
|
data, err := json.MarshalIndent(banner, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return os.WriteFile(bannerFile, data, 0644)
|
|
}
|
|
|
|
func GetBannerHandler(w http.ResponseWriter, r *http.Request) {
|
|
bannerLock.RLock()
|
|
defer bannerLock.RUnlock()
|
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
json.NewEncoder(w).Encode(banner)
|
|
}
|
|
|
|
func UpdateBannerHandler(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != http.MethodPost {
|
|
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
|
|
return
|
|
}
|
|
|
|
var newBanner BannerContent
|
|
if err := json.NewDecoder(r.Body).Decode(&newBanner); err != nil {
|
|
http.Error(w, "Invalid request body", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
bannerLock.Lock()
|
|
banner = newBanner
|
|
err := saveBanner()
|
|
bannerLock.Unlock()
|
|
|
|
if err != nil {
|
|
http.Error(w, "Error saving banner", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
json.NewEncoder(w).Encode(map[string]string{"status": "success"})
|
|
}
|