You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

profile.go 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package feed
  5. import (
  6. "net/http"
  7. "time"
  8. "code.gitea.io/gitea/models"
  9. user_model "code.gitea.io/gitea/models/user"
  10. "code.gitea.io/gitea/modules/context"
  11. "github.com/gorilla/feeds"
  12. )
  13. // ShowUserFeed show user activity as RSS / Atom feed
  14. func ShowUserFeed(ctx *context.Context, ctxUser *user_model.User, formatType string) {
  15. actions, err := models.GetFeeds(ctx, models.GetFeedsOptions{
  16. RequestedUser: ctxUser,
  17. Actor: ctx.User,
  18. IncludePrivate: false,
  19. OnlyPerformedBy: !ctxUser.IsOrganization(),
  20. IncludeDeleted: false,
  21. Date: ctx.FormString("date"),
  22. })
  23. if err != nil {
  24. ctx.ServerError("GetFeeds", err)
  25. return
  26. }
  27. feed := &feeds.Feed{
  28. Title: ctx.Tr("home.feed_of", ctxUser.DisplayName()),
  29. Link: &feeds.Link{Href: ctxUser.HTMLURL()},
  30. Description: ctxUser.Description,
  31. Created: time.Now(),
  32. }
  33. feed.Items, err = feedActionsToFeedItems(ctx, actions)
  34. if err != nil {
  35. ctx.ServerError("convert feed", err)
  36. return
  37. }
  38. writeFeed(ctx, feed, formatType)
  39. }
  40. // writeFeed write a feeds.Feed as atom or rss to ctx.Resp
  41. func writeFeed(ctx *context.Context, feed *feeds.Feed, formatType string) {
  42. ctx.Resp.WriteHeader(http.StatusOK)
  43. if formatType == "atom" {
  44. ctx.Resp.Header().Set("Content-Type", "application/atom+xml;charset=utf-8")
  45. if err := feed.WriteAtom(ctx.Resp); err != nil {
  46. ctx.ServerError("Render Atom failed", err)
  47. }
  48. } else {
  49. ctx.Resp.Header().Set("Content-Type", "application/rss+xml;charset=utf-8")
  50. if err := feed.WriteRss(ctx.Resp); err != nil {
  51. ctx.ServerError("Render RSS failed", err)
  52. }
  53. }
  54. }