1
0
Fork 0
mirror of https://github.com/miniflux/v2.git synced 2025-06-27 16:36:00 +00:00

fix(googlereader): return a 400 instead of 500 for invalid edit requests

This commit is contained in:
Frédéric Guillot 2025-05-02 18:10:40 -07:00
parent 9a8a8bdca3
commit e8c3435bb9

View file

@ -97,6 +97,12 @@ const (
ParamContinuation = "c" ParamContinuation = "c"
) )
var (
errEmptyFeedTitle = errors.New("googlereader: empty feed title")
errFeedNotFound = errors.New("googlereader: feed not found")
errCategoryNotFound = errors.New("googlereader: category not found")
)
// StreamType represents the possible stream types // StreamType represents the possible stream types
type StreamType int type StreamType int
@ -796,17 +802,23 @@ func unsubscribe(streams []Stream, store *storage.Storage, userID int64) error {
return nil return nil
} }
func rename(stream Stream, title string, store *storage.Storage, userID int64) error { func rename(feedStream Stream, title string, store *storage.Storage, userID int64) error {
slog.Debug("[GoogleReader] Renaming feed",
slog.Int64("user_id", userID),
slog.Any("feed_stream", feedStream),
slog.String("new_title", title),
)
if title == "" { if title == "" {
return errors.New("empty title") return errEmptyFeedTitle
} }
feed, err := getFeed(stream, store, userID) feed, err := getFeed(feedStream, store, userID)
if err != nil { if err != nil {
return err return err
} }
if feed == nil { if feed == nil {
return errors.New("feed not found") return errFeedNotFound
} }
feedModification := model.FeedModificationRequest{ feedModification := model.FeedModificationRequest{
@ -816,21 +828,27 @@ func rename(stream Stream, title string, store *storage.Storage, userID int64) e
return store.UpdateFeed(feed) return store.UpdateFeed(feed)
} }
func move(stream Stream, destination Stream, store *storage.Storage, userID int64) error { func move(feedStream Stream, labelStream Stream, store *storage.Storage, userID int64) error {
feed, err := getFeed(stream, store, userID) slog.Debug("[GoogleReader] Moving feed",
slog.Int64("user_id", userID),
slog.Any("feed_stream", feedStream),
slog.Any("label_stream", labelStream),
)
feed, err := getFeed(feedStream, store, userID)
if err != nil { if err != nil {
return err return err
} }
if feed == nil { if feed == nil {
return errors.New("feed not found") return errFeedNotFound
} }
category, err := getOrCreateCategory(destination, store, userID) category, err := getOrCreateCategory(labelStream, store, userID)
if err != nil { if err != nil {
return err return err
} }
if category == nil { if category == nil {
return errors.New("category not found or unable to create category") return errCategoryNotFound
} }
feedModification := model.FeedModificationRequest{ feedModification := model.FeedModificationRequest{
@ -895,7 +913,11 @@ func (h *handler) editSubscriptionHandler(w http.ResponseWriter, r *http.Request
case "edit": case "edit":
if title != "" { if title != "" {
if err := rename(streamIds[0], title, h.store, userID); err != nil { if err := rename(streamIds[0], title, h.store, userID); err != nil {
json.ServerError(w, r, err) if errors.Is(err, errFeedNotFound) || errors.Is(err, errEmptyFeedTitle) {
json.BadRequest(w, r, err)
} else {
json.ServerError(w, r, err)
}
return return
} }
} }
@ -907,12 +929,16 @@ func (h *handler) editSubscriptionHandler(w http.ResponseWriter, r *http.Request
} }
if err := move(streamIds[0], newLabel, h.store, userID); err != nil { if err := move(streamIds[0], newLabel, h.store, userID); err != nil {
json.ServerError(w, r, err) if errors.Is(err, errFeedNotFound) || errors.Is(err, errCategoryNotFound) {
json.BadRequest(w, r, err)
} else {
json.ServerError(w, r, err)
}
return return
} }
} }
default: default:
json.ServerError(w, r, fmt.Errorf("googlereader: unrecognized action %s", action)) json.BadRequest(w, r, fmt.Errorf("googlereader: unrecognized action %s", action))
return return
} }