code.gitea.io/gitea@v1.21.7/routers/web/feed/profile.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package feed 5 6 import ( 7 "time" 8 9 activities_model "code.gitea.io/gitea/models/activities" 10 "code.gitea.io/gitea/modules/context" 11 "code.gitea.io/gitea/modules/markup" 12 "code.gitea.io/gitea/modules/markup/markdown" 13 14 "github.com/gorilla/feeds" 15 ) 16 17 // ShowUserFeedRSS show user activity as RSS feed 18 func ShowUserFeedRSS(ctx *context.Context) { 19 showUserFeed(ctx, "rss") 20 } 21 22 // ShowUserFeedAtom show user activity as Atom feed 23 func ShowUserFeedAtom(ctx *context.Context) { 24 showUserFeed(ctx, "atom") 25 } 26 27 // showUserFeed show user activity as RSS / Atom feed 28 func showUserFeed(ctx *context.Context, formatType string) { 29 includePrivate := ctx.IsSigned && (ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID) 30 31 actions, _, err := activities_model.GetFeeds(ctx, activities_model.GetFeedsOptions{ 32 RequestedUser: ctx.ContextUser, 33 Actor: ctx.Doer, 34 IncludePrivate: includePrivate, 35 OnlyPerformedBy: !ctx.ContextUser.IsOrganization(), 36 IncludeDeleted: false, 37 Date: ctx.FormString("date"), 38 }) 39 if err != nil { 40 ctx.ServerError("GetFeeds", err) 41 return 42 } 43 44 ctxUserDescription, err := markdown.RenderString(&markup.RenderContext{ 45 Ctx: ctx, 46 Links: markup.Links{ 47 Base: ctx.ContextUser.HTMLURL(), 48 }, 49 Metas: map[string]string{ 50 "user": ctx.ContextUser.GetDisplayName(), 51 }, 52 }, ctx.ContextUser.Description) 53 if err != nil { 54 ctx.ServerError("RenderString", err) 55 return 56 } 57 58 feed := &feeds.Feed{ 59 Title: ctx.Tr("home.feed_of", ctx.ContextUser.DisplayName()), 60 Link: &feeds.Link{Href: ctx.ContextUser.HTMLURL()}, 61 Description: ctxUserDescription, 62 Created: time.Now(), 63 } 64 65 feed.Items, err = feedActionsToFeedItems(ctx, actions) 66 if err != nil { 67 ctx.ServerError("convert feed", err) 68 return 69 } 70 71 writeFeed(ctx, feed, formatType) 72 } 73 74 // writeFeed write a feeds.Feed as atom or rss to ctx.Resp 75 func writeFeed(ctx *context.Context, feed *feeds.Feed, formatType string) { 76 if formatType == "atom" { 77 ctx.Resp.Header().Set("Content-Type", "application/atom+xml;charset=utf-8") 78 if err := feed.WriteAtom(ctx.Resp); err != nil { 79 ctx.ServerError("Render Atom failed", err) 80 } 81 } else { 82 ctx.Resp.Header().Set("Content-Type", "application/rss+xml;charset=utf-8") 83 if err := feed.WriteRss(ctx.Resp); err != nil { 84 ctx.ServerError("Render RSS failed", err) 85 } 86 } 87 }