diff --git a/cmd/feed.go b/cmd/feed.go index 39c2b7c..2763af1 100644 --- a/cmd/feed.go +++ b/cmd/feed.go @@ -48,6 +48,10 @@ func feed( var items []core.Item var err error if source != "" { + if exists, err := core.SourceExists(db, source); !exists || err != nil { + log.Fatalf("error: no such source %s", source) + } + if showInactive { items, err = core.GetAllItemsForSource(db, source) } else { diff --git a/core/source.go b/core/source.go index 942ba56..3eb0c5f 100644 --- a/core/source.go +++ b/core/source.go @@ -39,6 +39,13 @@ func GetSources(db DB) ([]string, error) { return names, nil } +func SourceExists(db DB, source string) (bool, error) { + row := db.QueryRow("select count(*) from sources where name = ?", source) + var c int + err := row.Scan(&c) + return c > 0, err +} + func DeleteSource(db DB, name string) error { _, err := db.Exec(` delete from sources diff --git a/core/source_test.go b/core/source_test.go index 4dfb2ac..520cb77 100644 --- a/core/source_test.go +++ b/core/source_test.go @@ -14,9 +14,16 @@ import ( func TestCreateSource(t *testing.T) { db := EphemeralDb(t) + if exists, err := SourceExists(db, "one"); exists || err != nil { + t.Fatal(err) + } if err := AddSource(db, "one"); err != nil { t.Fatal(err) } + if exists, err := SourceExists(db, "one"); !exists || err != nil { + t.Fatal(err) + } + if err := AddSource(db, "two"); err != nil { t.Fatal(err) } diff --git a/web/source.go b/web/source.go index a5801fd..fb09106 100644 --- a/web/source.go +++ b/web/source.go @@ -10,12 +10,11 @@ import ( func (env *Env) getSource(writer http.ResponseWriter, req *http.Request) { source := req.PathValue("source") - if source == "" { + if exists, err := core.SourceExists(env.db, source); !exists || err != nil { http.NotFound(writer, req) return } - // TODO this needs to properly error if the source doesn't exist instead of just returning [] var items []core.Item var err error inactive := req.URL.Query().Get("inactive") == "1"