package api import ( "encoding/json" "fmt" "os" "path" "github.com/julienschmidt/httprouter" ) var DashboardDir string func init() { router.GET("/api/public/:sid", apiHandler(getPublic)) router.DELETE("/api/public/:sid", apiHandler(deletePublic)) router.PUT("/api/public/:sid", apiHandler(savePublic)) } type FICPublicScene struct { Type string `json:"type"` Params map[string]interface{} `json:"params"` } 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 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 } } func savePublicTo(path string, s FICPublicDisplay) error { 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 } } func getPublic(ps httprouter.Params, body []byte) (interface{}, error) { if _, err := os.Stat(path.Join(DashboardDir, fmt.Sprintf("public%s.json", ps.ByName("sid")))); !os.IsNotExist(err) { return readPublic(path.Join(DashboardDir, fmt.Sprintf("public%s.json", ps.ByName("sid")))) } else { return FICPublicDisplay{Scenes: []FICPublicScene{}, Side: []FICPublicScene{}}, nil } } func deletePublic(ps httprouter.Params, body []byte) (interface{}, error) { if err := savePublicTo(path.Join(DashboardDir, fmt.Sprintf("public%s.json", ps.ByName("sid"))), FICPublicDisplay{}); err != nil { return nil, err } else { return FICPublicDisplay{Scenes: []FICPublicScene{}, Side: []FICPublicScene{}}, nil } } func savePublic(ps httprouter.Params, body []byte) (interface{}, error) { var scenes FICPublicDisplay if err := json.Unmarshal(body, &scenes); err != nil { return nil, err } if err := savePublicTo(path.Join(DashboardDir, fmt.Sprintf("public%s.json", ps.ByName("sid"))), scenes); err != nil { return nil, err } else { return scenes, err } }