package main import ( "local/m/mchess_server/server" "log" "net/http" "os" "github.com/gin-gonic/autotls" "github.com/gin-gonic/gin" "github.com/google/uuid" "github.com/gorilla/websocket" ) var cert_path = "/etc/letsencrypt/live/chess.sw-gross.de/" var cert_file = cert_path + "fullchain.pem" var key_file = cert_path + "privkey.pem" var upgrader = websocket.Upgrader{} // album represents data about a record album. type album struct { ID string `json:"id"` Title string `json:"title"` Artist string `json:"artist"` Price float64 `json:"price"` } // albums slice to seed record album data. var albums = []album{ {ID: "1", Title: "Blue Train", Artist: "John Coltrane", Price: 56.99}, {ID: "2", Title: "Jeru", Artist: "Gerry Mulligan", Price: 17.99}, {ID: "3", Title: "Sarah Vaughan and Clifford Brown", Artist: "Sarah Vaughan", Price: 39.99}, } func main() { hostname, err := os.Hostname() if err != nil { log.Fatal(err) } router := gin.Default() router.GET("/api/albums", getAlbums) router.GET("/api/albums/:id", getAlbumByID) router.POST("/api/albums", postAlbums) router.GET("/api/random", playRandomGame) http.HandleFunc("/api/ws", server.PlayHandler) if hostname == "mbook" { log.Println("Starting service WITHOUT TLS") log.Fatal(router.Run("localhost:8080")) } else { log.Fatal(autotls.Run(router, "chess.sw-gross.de")) } } func playRandomGame(c *gin.Context) { player_uuid := uuid.New() server.GetLobby().RegisterPlayer(server.NewPlayer(player_uuid)) c.IndentedJSON(http.StatusOK, player_uuid) } // getAlbums responds with the list of all albums as JSON. func getAlbums(c *gin.Context) { c.IndentedJSON(http.StatusOK, albums) } // postAlbums adds an album from JSON received in the request body. func postAlbums(c *gin.Context) { var newAlbum album // Call BindJSON to bind the received JSON to // newAlbum. if err := c.BindJSON(&newAlbum); err != nil { return } // Add the new album to the slice. albums = append(albums, newAlbum) c.IndentedJSON(http.StatusCreated, newAlbum) } // getAlbumByID locates the album whose ID value matches the id // parameter sent by the client, then returns that album as a response. func getAlbumByID(c *gin.Context) { id := c.Param("id") // Loop over the list of albums, looking for // an album whose ID value matches the parameter. for _, a := range albums { if a.ID == id { c.IndentedJSON(http.StatusOK, a) return } } c.IndentedJSON(http.StatusNotFound, gin.H{"message": "album not found"}) }