func gettask(c *gin.Context) (*todo.Todo, *todolist.TodoList, bool) { u, ok := user.FromContext(c) if !ok { ctl.Render403(c) return nil, nil, false } id, err := strconv.Atoi(c.Param("id")) if err != nil { ctl.Render404(c) return nil, nil, false } td, ok := todo.Find(uint(id)) if !ok { ctl.Render404(c) return nil, nil, false } l, ok := todolist.Find(td.TodoListID) if !ok { ctl.Render500(c) return nil, nil, false } if u.ID != l.UserID { ctl.Render403(c) return nil, nil, false } return td, l, true }
func roomGET(c *gin.Context) { roomid := c.Param("roomid") userid := fmt.Sprint(rand.Int31()) c.HTML(200, "chat_room", gin.H{ "roomid": roomid, "userid": userid, }) }
func stream(c *gin.Context) { roomid := c.Param("roomid") listener := openListener(roomid) defer closeListener(roomid, listener) c.Stream(func(w io.Writer) bool { c.SSEvent("message", <-listener) return true }) }
func roomPOST(c *gin.Context) { roomid := c.Param("roomid") userid := c.PostForm("user") message := c.PostForm("message") room(roomid).Submit(userid + ": " + message) c.JSON(200, gin.H{ "status": "success", "message": message, }) }
func roomGET(c *gin.Context) { roomid := c.Param("roomid") nick := c.Query("nick") if len(nick) < 2 { nick = "" } if len(nick) > 13 { nick = nick[0:12] + "..." } c.HTML(200, "room_login.templ.html", gin.H{ "roomid": roomid, "nick": nick, "timestamp": time.Now().Unix(), }) }
// User возвращает страницу с информацией о пользователе. // GET /admin/u/:name func User(c *gin.Context) { if !assertAccess(c) { return } u, ok := user.Find(c.Param("name")) if !ok { ctl.Render404(c) return } u.LoadLists() for _, i := range u.Lists { i.LoadTodos() } // Шаблон ожидает заполненую структуру пользователя ctl.RenderHTML(c, "admin_user.tmpl", gin.H{ "User": u, }) }
func getlist(c *gin.Context) (*todolist.TodoList, bool) { u, ok := user.FromContext(c) if !ok { ctl.Render403(c) return nil, false } id, err := strconv.Atoi(c.Param("id")) if err != nil { ctl.Render404(c) return nil, false } l, ok := todolist.Find(uint(id)) if !ok { ctl.Render404(c) return nil, false } if l.UserID != u.ID { ctl.Render403(c) return nil, false } return l, true }
func streamRoom(c *gin.Context) { roomid := c.Param("roomid") listener := openListener(roomid) ticker := time.NewTicker(1 * time.Second) users.Add("connected", 1) defer func() { closeListener(roomid, listener) ticker.Stop() users.Add("disconnected", 1) }() c.Stream(func(w io.Writer) bool { select { case msg := <-listener: messages.Add("outbound", 1) c.SSEvent("message", msg) case <-ticker.C: c.SSEvent("stats", Stats()) } return true }) }
func roomPOST(c *gin.Context) { roomid := c.Param("roomid") nick := c.Query("nick") message := c.PostForm("message") message = strings.TrimSpace(message) validMessage := len(message) > 1 && len(message) < 200 validNick := len(nick) > 1 && len(nick) < 14 if !validMessage || !validNick { c.JSON(400, gin.H{ "status": "failed", "error": "the message or nickname is too long", }) return } post := gin.H{ "nick": html.EscapeString(nick), "message": html.EscapeString(message), } messages.Add("inbound", 1) room(roomid).Submit(post) c.JSON(200, post) }
func roomDELETE(c *gin.Context) { roomid := c.Param("roomid") deleteBroadcast(roomid) }