mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[feature] Add opt-in RSS feed for account's latest Public posts (#897)
* start adding rss functionality * add gorilla/feeds dependency * first bash at building rss feed still needs work, this is an interim commit * tidy up a bit * add publicOnly option to GetAccountLastPosted * implement rss endpoint * fix test * add initial user docs for rss * update rss logo * docs update * add rssFeed to frontend * feed -> feed.rss * enableRSS * increase rss logo size a lil bit * add rss toggle * move emojify to text package * fiddle with rss feed formatting * add Text field to test statuses * move status to rss item to typeconverter * update bun schema for enablerss * simplify 304 checking * assume account not rss * update tests * update swagger docs * allow more characters in title, trim nicer * update last posted to be more consistent
This commit is contained in:
@@ -21,7 +21,6 @@ package web
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"codeberg.org/gruf/go-cache/v2"
|
||||
"github.com/gin-gonic/gin"
|
||||
@@ -36,6 +35,7 @@ const (
|
||||
confirmEmailPath = "/" + uris.ConfirmEmailPath
|
||||
profilePath = "/@:" + usernameKey
|
||||
customCSSPath = profilePath + "/custom.css"
|
||||
rssFeedPath = profilePath + "/feed.rss"
|
||||
statusPath = profilePath + "/statuses/:" + statusIDKey
|
||||
assetsPathPrefix = "/assets"
|
||||
userPanelPath = "/settings/user"
|
||||
@@ -44,23 +44,26 @@ const (
|
||||
tokenParam = "token"
|
||||
usernameKey = "username"
|
||||
statusIDKey = "status"
|
||||
|
||||
cacheControlHeader = "Cache-Control" // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
|
||||
cacheControlNoCache = "no-cache" // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#response_directives
|
||||
ifModifiedSinceHeader = "If-Modified-Since" // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since
|
||||
ifNoneMatchHeader = "If-None-Match" // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match
|
||||
eTagHeader = "ETag" // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
|
||||
lastModifiedHeader = "Last-Modified" // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified
|
||||
)
|
||||
|
||||
// Module implements the api.ClientModule interface for web pages.
|
||||
type Module struct {
|
||||
processor processing.Processor
|
||||
assetsETagCache cache.Cache[string, eTagCacheEntry]
|
||||
processor processing.Processor
|
||||
eTagCache cache.Cache[string, eTagCacheEntry]
|
||||
}
|
||||
|
||||
// New returns a new api.ClientModule for web pages.
|
||||
func New(processor processing.Processor) api.ClientModule {
|
||||
assetsETagCache := cache.New[string, eTagCacheEntry]()
|
||||
assetsETagCache.SetTTL(time.Hour, false)
|
||||
assetsETagCache.Start(time.Minute)
|
||||
|
||||
return &Module{
|
||||
processor: processor,
|
||||
assetsETagCache: assetsETagCache,
|
||||
processor: processor,
|
||||
eTagCache: newETagCache(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,6 +102,8 @@ func (m *Module) Route(s router.Router) error {
|
||||
// serve custom css at /@username/custom.css
|
||||
s.AttachHandler(http.MethodGet, customCSSPath, m.customCSSGETHandler)
|
||||
|
||||
s.AttachHandler(http.MethodGet, rssFeedPath, m.rssFeedGETHandler)
|
||||
|
||||
// serve statuses
|
||||
s.AttachHandler(http.MethodGet, statusPath, m.threadGETHandler)
|
||||
|
||||
|
Reference in New Issue
Block a user