diff options
-rw-r--r-- | api/feed.go | 14 | ||||
-rw-r--r-- | daemon/routes.go | 1 | ||||
-rw-r--r-- | http/handler/xml_response.go | 6 |
3 files changed, 21 insertions, 0 deletions
diff --git a/api/feed.go b/api/feed.go index c3fc048..16e3d7d 100644 --- a/api/feed.go +++ b/api/feed.go @@ -7,6 +7,8 @@ package api import ( "errors" + "github.com/miniflux/miniflux/reader/opml" + "github.com/miniflux/miniflux/http/handler" ) @@ -132,6 +134,18 @@ func (c *Controller) GetFeeds(ctx *handler.Context, request *handler.Request, re response.JSON().Standard(feeds) } +// Export is the API handler that incoves an OPML export. +func (c *Controller) Export(ctx *handler.Context, request *handler.Request, response *handler.Response) { + opmlHandler := opml.NewHandler(c.store) + + opml, err := opmlHandler.Export(ctx.LoggedUser().ID) + if err != nil { + response.JSON().ServerError(errors.New("unable to export feeds to OPML")) + } + + response.XML().Serve(opml) +} + // GetFeed is the API handler to get a feed. func (c *Controller) GetFeed(ctx *handler.Context, request *handler.Request, response *handler.Response) { userID := ctx.UserID() diff --git a/daemon/routes.go b/daemon/routes.go index 0d07069..216cdb8 100644 --- a/daemon/routes.go +++ b/daemon/routes.go @@ -68,6 +68,7 @@ func routes(cfg *config.Config, store *storage.Storage, feedHandler *feed.Handle router.Handle("/v1/feeds/{feedID}", apiHandler.Use(apiController.UpdateFeed)).Methods("PUT") router.Handle("/v1/feeds/{feedID}", apiHandler.Use(apiController.RemoveFeed)).Methods("DELETE") router.Handle("/v1/feeds/{feedID}/icon", apiHandler.Use(apiController.FeedIcon)).Methods("GET") + router.Handle("/v1/export", apiHandler.Use(apiController.Export)).Methods("GET") router.Handle("/v1/feeds/{feedID}/entries", apiHandler.Use(apiController.GetFeedEntries)).Methods("GET") router.Handle("/v1/feeds/{feedID}/entries/{entryID}", apiHandler.Use(apiController.GetFeedEntry)).Methods("GET") diff --git a/http/handler/xml_response.go b/http/handler/xml_response.go index b5a24ca..5b647a1 100644 --- a/http/handler/xml_response.go +++ b/http/handler/xml_response.go @@ -21,3 +21,9 @@ func (x *XMLResponse) Download(filename, data string) { x.writer.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s", filename)) x.writer.Write([]byte(data)) } + +// Serve forces the XML to be sent to browser. +func (x *XMLResponse) Serve(data string) { + x.writer.Header().Set("Content-Type", "text/xml") + x.writer.Write([]byte(data)) +} |