diff options
author | 2021-09-13 14:45:33 +0200 | |
---|---|---|
committer | 2021-09-13 14:45:33 +0200 | |
commit | 026674bc2c4eb5f53bcb38e7efce2fe2dfebe974 (patch) | |
tree | aeb8d5a884379b86597bc530f0375fc5dbe5357d /internal/web | |
parent | update my personal library versions (#220) (diff) | |
download | gotosocial-026674bc2c4eb5f53bcb38e7efce2fe2dfebe974.tar.xz |
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
Diffstat (limited to 'internal/web')
-rw-r--r-- | internal/web/base.go | 10 | ||||
-rw-r--r-- | internal/web/thread.go | 83 |
2 files changed, 87 insertions, 6 deletions
diff --git a/internal/web/base.go b/internal/web/base.go index eabde676c..2759c3f9e 100644 --- a/internal/web/base.go +++ b/internal/web/base.go @@ -57,13 +57,8 @@ func (m *Module) baseHandler(c *gin.Context) { return } - // FIXME: fill in more variables? c.HTML(http.StatusOK, "index.tmpl", gin.H{ - "instance": instance, - "countUsers": 3, - "countStatuses": 42069, - "version": "1.0.0", - "adminUsername": "@admin", + "instance": instance, }) } @@ -101,6 +96,9 @@ func (m *Module) Route(s router.Router) error { // serve front-page s.AttachHandler(http.MethodGet, "/", m.baseHandler) + // serve statuses + s.AttachHandler(http.MethodGet, "/:user/statuses/:id", m.threadTemplateHandler) + // 404 handler s.AttachNoRouteHandler(m.NotFoundHandler) 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 <http://www.gnu.org/licenses/>. +*/ + +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"}, + }) +} |