From 32b1ffe1f08d384ccced782442fd1493bfe57042 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=9E=E3=83=AA=E3=82=A6=E3=82=B9?= Date: Fri, 6 Jan 2023 23:48:21 -0500 Subject: [PATCH] Implemented connect check, fixed smaller issues --- aggregator/aggregator.go | 10 ++++++---- cmd/connect.go | 33 +++++++++++++++++++++++++++++++++ system/discourse/api/client.go | 2 +- system/discourse/discourse.go | 4 ++++ system/hackernews/connect.go | 1 + system/hackernews/hackernews.go | 5 +++++ system/lemmy/lemmy.go | 4 ++++ system/lobsters/api/client.go | 2 +- system/lobsters/lobsters.go | 5 +++++ 9 files changed, 60 insertions(+), 6 deletions(-) diff --git a/aggregator/aggregator.go b/aggregator/aggregator.go index 9828c05..fe87504 100644 --- a/aggregator/aggregator.go +++ b/aggregator/aggregator.go @@ -55,7 +55,7 @@ func (a *Aggregator) ListPosts() ([]post.Post, []error) { var posts []post.Post // TODO: Clean up implementation - if os.Getenv("neonmodem_TEST") == "true" { + if os.Getenv("NEONMODEM_TEST") == "true" { jsonPosts, err := os.ReadFile("posts.db") if err == nil { err = json.Unmarshal(jsonPosts, &posts) @@ -86,9 +86,11 @@ func (a *Aggregator) ListPosts() ([]post.Post, []error) { }) // TODO: Clean up implementation - jsonPosts, err := json.Marshal(posts) - if err == nil { - os.WriteFile("posts.db", jsonPosts, 0600) + if os.Getenv("NEONMODEM_TEST") == "true" { + jsonPosts, err := json.Marshal(posts) + if err == nil { + os.WriteFile("posts.db", jsonPosts, 0600) + } } return posts, errs diff --git a/cmd/connect.go b/cmd/connect.go index 94103fc..a47515c 100644 --- a/cmd/connect.go +++ b/cmd/connect.go @@ -2,7 +2,9 @@ package cmd import ( "fmt" + "net/url" "os" + "strings" "github.com/mrusme/neonmodem/config" "github.com/mrusme/neonmodem/system" @@ -25,6 +27,7 @@ func connectBase() *cobra.Command { Long: "Add a new connection to a BBS.", PreRun: func(cmd *cobra.Command, args []string) { sysType, _ := cmd.Flags().GetString("type") + sysType = strings.ToLower(sysType) if sysType != "hackernews" { cmd.MarkFlagRequired("url") } @@ -36,6 +39,36 @@ func connectBase() *cobra.Command { LOG.Panicln(err) } + sysURLparsed, err := url.Parse(sysURL) + if err != nil { + fmt.Print(err) + os.Exit(1) + } + + if caps := sys.GetCapabilities(); !caps.IsCapableOf("connect:multiple") { + for _, existingSys := range CFG.Systems { + if existingSys.Type == sysType { + existingSysURL, ok := existingSys.Config["url"] + if !ok { + fmt.Println("Cannot add multiple instances of this system!") + os.Exit(1) + } + + existingSysURLparsed, err := url.Parse(existingSysURL.(string)) + if err != nil { + fmt.Print(err) + os.Exit(1) + } + + //&& existingSysURLparsed.RequestURI() == sysURLparsed.RequestURI() + if existingSysURLparsed.Host == sysURLparsed.Host { + fmt.Println("Cannot add multiple instances of this system!") + os.Exit(1) + } + } + } + } + if err := sys.Connect(sysURL); err != nil { LOG.Panicln(err) } diff --git a/system/discourse/api/client.go b/system/discourse/api/client.go index adedc4c..5d8716b 100644 --- a/system/discourse/api/client.go +++ b/system/discourse/api/client.go @@ -131,7 +131,7 @@ func (c *Client) NewRequest( return nil, err } - req.Header.Add("User-Agent", "neonmodem") + req.Header.Add("User-Agent", "Neon Modem Overdrive") req.Header.Add("Accept", "application/json") req.Header.Add("Content-Type", "application/json") req.Header.Add("User-Api-Client-Id", c.credentials["client_id"]) diff --git a/system/discourse/discourse.go b/system/discourse/discourse.go index abae16e..17b2879 100644 --- a/system/discourse/discourse.go +++ b/system/discourse/discourse.go @@ -50,6 +50,10 @@ func (sys *System) GetCapabilities() adapter.Capabilities { var caps []adapter.Capability caps = append(caps, + adapter.Capability{ + ID: "connect:multiple", + Name: "Connect Multiple", + }, adapter.Capability{ ID: "list:forums", Name: "List Forums", diff --git a/system/hackernews/connect.go b/system/hackernews/connect.go index 2935b68..26631b6 100644 --- a/system/hackernews/connect.go +++ b/system/hackernews/connect.go @@ -9,6 +9,7 @@ func (sys *System) Connect(sysURL string) error { if sys.config == nil { sys.config = make(map[string]interface{}) } + sys.config["url"] = "https://news.ycombinator.com" sys.config["credentials"] = credentials return nil diff --git a/system/hackernews/hackernews.go b/system/hackernews/hackernews.go index 600467b..6c68ef5 100644 --- a/system/hackernews/hackernews.go +++ b/system/hackernews/hackernews.go @@ -48,6 +48,11 @@ func (sys *System) GetCapabilities() adapter.Capabilities { var caps []adapter.Capability caps = append(caps, + // TODO: Requires accounts + // adapter.Capability{ + // ID: "connect:multiple", + // Name: "Connect Multiple", + // }, adapter.Capability{ ID: "list:forums", Name: "List Forums", diff --git a/system/lemmy/lemmy.go b/system/lemmy/lemmy.go index 569a292..b543d19 100644 --- a/system/lemmy/lemmy.go +++ b/system/lemmy/lemmy.go @@ -47,6 +47,10 @@ func (sys *System) GetCapabilities() adapter.Capabilities { var caps []adapter.Capability caps = append(caps, + adapter.Capability{ + ID: "connect:multiple", + Name: "Connect Multiple", + }, adapter.Capability{ ID: "list:forums", Name: "List Forums", diff --git a/system/lobsters/api/client.go b/system/lobsters/api/client.go index 2fcb2ba..f5606c3 100644 --- a/system/lobsters/api/client.go +++ b/system/lobsters/api/client.go @@ -128,7 +128,7 @@ func (c *Client) NewRequest( return nil, err } - req.Header.Add("User-Agent", "neonmodem") + req.Header.Add("User-Agent", "Neon Modem Overdrive") req.Header.Add("Accept", "application/json") req.Header.Add("Content-Type", "application/json") diff --git a/system/lobsters/lobsters.go b/system/lobsters/lobsters.go index 9a4dd0a..ed46258 100644 --- a/system/lobsters/lobsters.go +++ b/system/lobsters/lobsters.go @@ -49,6 +49,11 @@ func (sys *System) GetCapabilities() adapter.Capabilities { var caps []adapter.Capability caps = append(caps, + // TODO: Requires accounts + // adapter.Capability{ + // ID: "connect:multiple", + // Name: "Connect Multiple", + // }, adapter.Capability{ ID: "list:forums", Name: "List Forums",