server/admin/api/public.go

108 lines
2.9 KiB
Go
Raw Normal View History

2017-01-20 18:18:43 +00:00
package api
import (
"encoding/json"
"fmt"
2022-05-16 09:38:46 +00:00
"log"
"net/http"
2017-01-20 18:18:43 +00:00
"os"
"path"
2022-05-16 09:38:46 +00:00
"github.com/gin-gonic/gin"
2017-01-20 18:18:43 +00:00
)
var DashboardDir string
2022-05-16 09:38:46 +00:00
func declarePublicRoutes(router *gin.RouterGroup) {
router.GET("/public/:sid", getPublic)
router.DELETE("/public/:sid", deletePublic)
router.PUT("/public/:sid", savePublic)
2017-01-20 18:18:43 +00:00
}
type FICPublicScene struct {
2018-03-09 18:07:08 +00:00
Type string `json:"type"`
Params map[string]interface{} `json:"params"`
2017-01-20 18:18:43 +00:00
}
2019-01-19 07:01:29 +00:00
type FICPublicDisplay struct {
Scenes []FICPublicScene `json:"scenes"`
Side []FICPublicScene `json:"side"`
CustomCountdown map[string]interface{} `json:"customCountdown"`
HideEvents bool `json:"hideEvents"`
HideCountdown bool `json:"hideCountdown"`
HideCarousel bool `json:"hideCarousel"`
}
func readPublic(path string) (FICPublicDisplay, error) {
var s FICPublicDisplay
2017-01-20 18:18:43 +00:00
if fd, err := os.Open(path); err != nil {
return s, err
} else {
defer fd.Close()
jdec := json.NewDecoder(fd)
if err := jdec.Decode(&s); err != nil {
return s, err
}
return s, nil
}
}
2019-01-19 07:01:29 +00:00
func savePublicTo(path string, s FICPublicDisplay) error {
2017-01-20 18:18:43 +00:00
if fd, err := os.Create(path); err != nil {
return err
} else {
defer fd.Close()
jenc := json.NewEncoder(fd)
if err := jenc.Encode(s); err != nil {
return err
}
return nil
}
}
2022-05-16 09:38:46 +00:00
func getPublic(c *gin.Context) {
if _, err := os.Stat(path.Join(DashboardDir, fmt.Sprintf("public%s.json", c.Params.ByName("sid")))); !os.IsNotExist(err) {
p, err := readPublic(path.Join(DashboardDir, fmt.Sprintf("public%s.json", c.Params.ByName("sid"))))
if err != nil {
log.Println("Unable to readPublic in getPublic:", err.Error())
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs during scene retrieval."})
return
}
c.JSON(http.StatusOK, p)
2017-01-20 18:18:43 +00:00
}
2022-05-16 09:38:46 +00:00
c.JSON(http.StatusOK, FICPublicDisplay{Scenes: []FICPublicScene{}, Side: []FICPublicScene{}})
2017-01-20 18:18:43 +00:00
}
2022-05-16 09:38:46 +00:00
func deletePublic(c *gin.Context) {
if err := savePublicTo(path.Join(DashboardDir, fmt.Sprintf("public%s.json", c.Params.ByName("sid"))), FICPublicDisplay{}); err != nil {
log.Println("Unable to deletePublic:", err.Error())
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs during scene deletion."})
return
2017-01-20 18:18:43 +00:00
}
2022-05-16 09:38:46 +00:00
c.JSON(http.StatusOK, FICPublicDisplay{Scenes: []FICPublicScene{}, Side: []FICPublicScene{}})
2017-01-20 18:18:43 +00:00
}
2022-05-16 09:38:46 +00:00
func savePublic(c *gin.Context) {
2019-01-19 07:01:29 +00:00
var scenes FICPublicDisplay
2022-05-16 09:38:46 +00:00
err := c.ShouldBindJSON(&scenes)
if err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()})
return
2017-01-20 18:18:43 +00:00
}
2022-05-16 09:38:46 +00:00
if err := savePublicTo(path.Join(DashboardDir, fmt.Sprintf("public%s.json", c.Params.ByName("sid"))), scenes); err != nil {
log.Println("Unable to savePublicTo:", err.Error())
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs during scene saving."})
return
2017-01-20 18:18:43 +00:00
}
2022-05-16 09:38:46 +00:00
c.JSON(http.StatusOK, scenes)
2017-01-20 18:18:43 +00:00
}