diff --git a/cfg/environ.go b/cfg/environ.go index edf0eb9..3cb7841 100644 --- a/cfg/environ.go +++ b/cfg/environ.go @@ -8,16 +8,42 @@ import ( ) const ( - MASTODON_ACCESS_TOKEN = "MASTODON_ACCESS_TOKEN" - MASTODON_SERVER_ADDRESS = "MASTODON_SERVER_ADDRESS" - MASTODON_TOOT_FOOTER = "MASTODON_TOOT_FOOTER" - MASTODON_TOOT_MAX_CHARACTERS = "MASTODON_TOOT_MAX_CHARACTERS" - MASTODON_TOOT_VISIBILITY = "MASTODON_TOOT_VISIBILITY" - TELEGRAM_BOT_TOKEN = "TELEGRAM_BOT_TOKEN" - TELEGRAM_CHAT_ID = "TELEGRAM_CHAT_ID" - TELEGRAM_DEBUG = "TELEGRAM_DEBUG" + mastodonAccessToken = "MASTODON_ACCESS_TOKEN" + mastodonServerAddress = "MASTODON_SERVER_ADDRESS" + mastodonTootFooter = "MASTODON_TOOT_FOOTER" + mastodonTootMaxCharacters = "MASTODON_TOOT_MAX_CHARACTERS" + mastodonTootVisibility = "MASTODON_TOOT_VISIBILITY" + telegramBotToken = "TELEGRAM_BOT_TOKEN" + telegramChatID = "TELEGRAM_CHAT_ID" + telegramDebug = "TELEGRAM_DEBUG" ) +func GetMastodonAccessToken() string { + return os.Getenv(mastodonAccessToken) +} + +func GetMastodonServerAddress() string { + return os.Getenv(mastodonServerAddress) +} + +func GetMastodonTootFooter() string { + return os.Getenv(mastodonTootFooter) +} + +// Parse Mastodon max characters and return 500 as default in case of errors. +func parseMastodonMaxCharacters(s string) int { + if n, err := strconv.ParseUint(s, 10, 32); err == nil { + return int(n) + } + + return 500 +} + +// Return the max characters allowed for toots. +func GetMastodonMaxCharacters() int { + return parseMastodonMaxCharacters(os.Getenv(mastodonTootMaxCharacters)) +} + // Check the specified Mastodon visibility and return it if valid or return // unlisted if it's not valid. // The specified string will be cheched case unsensitive. @@ -35,18 +61,38 @@ func parseMastodonVisibility(s string) string { // Return configured Mastodon visibility for toot. func GetMastodonVisibility() string { - return parseMastodonVisibility(os.Getenv(MASTODON_TOOT_VISIBILITY)) + return parseMastodonVisibility(os.Getenv(mastodonTootVisibility)) } -// Parse Mastodon max characters and return 500 as default in case of errors. -func parseMastodonMaxCharacters(s string) int { - if n, err := strconv.ParseUint(s, 10, 32); err == nil { - return int(n) +func parseBoolOrFalse(s string) bool { + r, err := strconv.ParseBool(s) + if err != nil { + return false } - return 500 + return r } -func GetMastodonMaxCharacters() int { - return parseMastodonMaxCharacters(os.Getenv(MASTODON_TOOT_MAX_CHARACTERS)) +// Return if Telegram bot will run in debug mode or not. +func GetTelegramDebug() bool { + return parseBoolOrFalse(os.Getenv(telegramDebug)) +} + +func GetTelegramBotToken() string { + return os.Getenv(telegramBotToken) +} + +// Parse the telegram chat or return 0. +func parseTelegramChatID(s string) int64 { + r, err := strconv.ParseInt(s, 10, 64) + if err != nil { + return 0 + } + + return r +} + +// Return the configured Telegram chat ID. +func GetTelegramChatID() int64 { + return parseTelegramChatID(os.Getenv(telegramChatID)) } diff --git a/cfg/environ_test.go b/cfg/environ_test.go index 52c7f20..cc2ed58 100644 --- a/cfg/environ_test.go +++ b/cfg/environ_test.go @@ -28,3 +28,13 @@ func TestParseMastodonMaxCharacters(t *testing.T) { assert.Equal(t, parseMastodonMaxCharacters("-42"), 500) assert.Equal(t, parseMastodonMaxCharacters("hello"), 500) } + +func TestParseBoolOrFalse(t *testing.T) { + assert.Equal(t, parseBoolOrFalse("True"), true) + assert.Equal(t, parseBoolOrFalse("TRUE"), true) + assert.Equal(t, parseBoolOrFalse("true"), true) + assert.Equal(t, parseBoolOrFalse(""), false) + assert.Equal(t, parseBoolOrFalse("False"), false) + assert.Equal(t, parseBoolOrFalse("FALSE"), false) + assert.Equal(t, parseBoolOrFalse("false"), false) +} diff --git a/cmd/run.go b/cmd/run.go index 26af649..557b13f 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -5,8 +5,6 @@ import ( "io" "log" "net/http" - "os" - "strconv" mastodonapi "github.com/cking/go-mastodon" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" @@ -17,16 +15,6 @@ import ( "noa.mornie.org/eriol/telegram-group2mastodon/utils" ) -const ( - MASTODON_ACCESS_TOKEN = "MASTODON_ACCESS_TOKEN" - MASTODON_SERVER_ADDRESS = "MASTODON_SERVER_ADDRESS" - MASTODON_TOOT_FOOTER = "MASTODON_TOOT_FOOTER" - MASTODON_TOOT_MAX_CHARACTERS = "MASTODON_TOOT_MAX_CHARACTERS" - TELEGRAM_BOT_TOKEN = "TELEGRAM_BOT_TOKEN" - TELEGRAM_CHAT_ID = "TELEGRAM_CHAT_ID" - TELEGRAM_DEBUG = "TELEGRAM_DEBUG" -) - // runCmd represents the run command var runCmd = &cobra.Command{ Use: "run", @@ -36,21 +24,21 @@ var runCmd = &cobra.Command{ Every messages posted in the Telegram groups the bot is in will be posted into the specified Mastodon account.`, Run: func(cmd *cobra.Command, args []string) { - mastodonInstance := os.Getenv(MASTODON_SERVER_ADDRESS) + mastodonInstance := cfg.GetMastodonServerAddress() c := mastodonapi.NewClient(&mastodonapi.Config{ Server: mastodonInstance, - AccessToken: os.Getenv(MASTODON_ACCESS_TOKEN), + AccessToken: cfg.GetMastodonAccessToken(), }) log.Println("Crating a new client for mastondon istance:", mastodonInstance) - allowedTelegramChat := parseTelegramChatID(os.Getenv(TELEGRAM_CHAT_ID)) + allowedTelegramChat := cfg.GetTelegramChatID() log.Println("Allowed telegram chat id:", allowedTelegramChat) - bot, err := tgbotapi.NewBotAPI(os.Getenv(TELEGRAM_BOT_TOKEN)) + bot, err := tgbotapi.NewBotAPI(cfg.GetTelegramBotToken()) if err != nil { log.Panic(err) } - bot.Debug = parseBoolOrFalse(os.Getenv(TELEGRAM_DEBUG)) + bot.Debug = cfg.GetTelegramDebug() u := tgbotapi.NewUpdate(0) u.Timeout = 30 @@ -71,7 +59,7 @@ the specified Mastodon account.`, messageID := update.Message.MessageID maxChars := cfg.GetMastodonMaxCharacters() tootVisibility := cfg.GetMastodonVisibility() - tootFooter := os.Getenv(MASTODON_TOOT_FOOTER) + tootFooter := cfg.GetMastodonTootFooter() if update.Message.Text != "" { log.Printf("Text message received. Message id: %d\n", messageID) @@ -118,15 +106,6 @@ func init() { rootCmd.AddCommand(runCmd) } -func parseBoolOrFalse(s string) bool { - r, err := strconv.ParseBool(s) - if err != nil { - return false - } - - return r -} - func downloadFile(url string) (io.ReadCloser, error) { response, err := http.Get(url) if err != nil { @@ -139,12 +118,3 @@ func downloadFile(url string) (io.ReadCloser, error) { return response.Body, nil } - -func parseTelegramChatID(s string) int64 { - r, err := strconv.ParseInt(s, 10, 64) - if err != nil { - return 0 - } - - return r -} diff --git a/cmd/run_test.go b/cmd/run_test.go deleted file mode 100644 index b7b9dc2..0000000 --- a/cmd/run_test.go +++ /dev/null @@ -1,17 +0,0 @@ -package cmd - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestParseBoolOrFalse(t *testing.T) { - assert.Equal(t, parseBoolOrFalse("True"), true) - assert.Equal(t, parseBoolOrFalse("TRUE"), true) - assert.Equal(t, parseBoolOrFalse("true"), true) - assert.Equal(t, parseBoolOrFalse(""), false) - assert.Equal(t, parseBoolOrFalse("False"), false) - assert.Equal(t, parseBoolOrFalse("FALSE"), false) - assert.Equal(t, parseBoolOrFalse("false"), false) -}