From 026674bc2c4eb5f53bcb38e7efce2fe2dfebe974 Mon Sep 17 00:00:00 2001 From: f0x52 Date: Mon, 13 Sep 2021 14:45:33 +0200 Subject: Thread views on the web (#207) * Webviews for status threads * fix up templates * add ForkAwesome and gotosocial-styling into repo * clean up gotosocial-styling, old styling * update CONTRIBUTING with new css building, and nodemon recommendation * update Dockerfile with new css bundling * those weren't supposed to make it in * upgrade gotosocial-styling deps * update authorize template with main wrapper * update css pipeline * abstract status from thread to avoid copy-pasting * basic CW implementation * fix PR review suggestions * fix no-image-desc icon alignment * remove template loading println * remove println * remove changes to testmodels * reset changes to testmodels --- internal/web/thread.go | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 internal/web/thread.go (limited to 'internal/web/thread.go') diff --git a/internal/web/thread.go b/internal/web/thread.go new file mode 100644 index 000000000..69c9674ff --- /dev/null +++ b/internal/web/thread.go @@ -0,0 +1,83 @@ +/* + GoToSocial + Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +package web + +import ( + "net/http" + + "github.com/gin-gonic/gin" + "github.com/superseriousbusiness/gotosocial/internal/oauth" +) + +type statusLink struct { + User string `uri:"user" binding:"required"` + ID string `uri:"id" binding:"required"` +} + +func (m *Module) threadTemplateHandler(c *gin.Context) { + l := m.log.WithField("func", "threadTemplateGET") + l.Trace("rendering thread template") + + ctx := c.Request.Context() + + var uriParts statusLink + + if err := c.ShouldBindUri(&uriParts); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "status not found"}) + return + } + + authed, err := oauth.Authed(c, false, false, false, false) + if err != nil { + l.Errorf("error authing status GET request: %s", err) + c.JSON(http.StatusBadRequest, gin.H{"error": "status not found"}) + return + } + + instance, err := m.processor.InstanceGet(ctx, m.config.Host) + if err != nil { + l.Debugf("error getting instance from processor: %s", err) + c.JSON(http.StatusInternalServerError, gin.H{"error": "internal server error"}) + return + } + + status, err := m.processor.StatusGet(ctx, authed, uriParts.ID) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "status not found"}) + return + } + + if uriParts.User[:1] != "@" || uriParts.User[1:] != status.Account.Username { + c.JSON(http.StatusBadRequest, gin.H{"error": "status not found"}) + return + } + + context, err := m.processor.StatusGetContext(ctx, authed, uriParts.ID) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "status not found"}) + return + } + + c.HTML(http.StatusOK, "thread.tmpl", gin.H{ + "instance": instance, + "status": status, + "context": context, + "stylesheets": []string{"/assets/Fork-Awesome/css/fork-awesome.min.css", "/assets/status.css"}, + }) +} -- cgit v1.2.3