From 6a54ed86c79a2f3acfc4bc63c9f08335d20001cd Mon Sep 17 00:00:00 2001 From: Dmitry Verkhoturov Date: Mon, 24 May 2021 17:09:39 +0200 Subject: [PATCH] move telegram token and timeout to a separate CLI section This simplifies token and timeout reuse for the notify module (used now) and for the auth module later (not yet in the code). SMTP credentials are already set up that way. --- README.md | 6 ++++-- backend/app/cmd/server.go | 25 ++++++++++++++++++++----- compose-dev-backend.yml | 2 +- docs/latest/telegram.md | 2 +- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f483bc94..8d4befd8 100644 --- a/README.md +++ b/README.md @@ -158,14 +158,14 @@ _this is the recommended way to run remark42_ | auth.email.template | AUTH_EMAIL_TEMPLATE | none (predefined) | custom email message template file | | notify.type | NOTIFY_TYPE | none | type of notification (telegram, slack and/or email) | | notify.queue | NOTIFY_QUEUE | `100` | size of notification queue | -| notify.telegram.token | NOTIFY_TELEGRAM_TOKEN | | telegram token | | notify.telegram.chan | NOTIFY_TELEGRAM_CHAN | | telegram channel | -| notify.telegram.timeout | NOTIFY_TELEGRAM_TIMEOUT | `5s` | telegram timeout | | notify.slack.token | NOTIFY_SLACK_TOKEN | | slack token | | notify.slack.chan | NOTIFY_SLACK_CHAN | `general` | slack channel | | notify.email.fromAddress | NOTIFY_EMAIL_FROM | | from email address | | notify.email.verification_subj | NOTIFY_EMAIL_VERIFICATION_SUBJ | `Email verification` | verification message subject | | notify.email.notify_admin | NOTIFY_EMAIL_ADMIN | `false` | notify admin on new comments via ADMIN_SHARED_EMAIL | +| telegram.token | TELEGRAM_TOKEN | | telegram token (used for auth and telegram notifications) | +| telegram.timeout | TELEGRAM_TIMEOUT | `5s` | telegram connection timeout | | smtp.host | SMTP_HOST | | SMTP host | | smtp.port | SMTP_PORT | | SMTP port | | smtp.username | SMTP_USERNAME | | SMTP user name | @@ -226,6 +226,8 @@ trouble with unrecognized command-line options in the future. | auth.email.tls | smtp.tls | AUTH_EMAIL_TLS | SMTP_TLS | `false` | enable TLS | 1.5.0 | | auth.email.timeout | smtp.timeout | AUTH_EMAIL_TIMEOUT | SMTP_TIMEOUT | `10s` | smtp timeout | 1.5.0 | | img-proxy | image-proxy.http2https | IMG_PROXY | IMAGE_PROXY_HTTP2HTTPS | `false` | enable http->https proxy for images | 1.5.0 | +| notify.telegram.token | telegram.token | NOTIFY_TELEGRAM_TOKEN | TELEGRAM_TOKEN | telegram token | 1.9.0 | +| notify.telegram.timeout | telegram.timeout | NOTIFY_TELEGRAM_TIMEOUT | TELEGRAM_TIMEOUT | telegram timeout | 1.9.0 | ##### Required parameters diff --git a/backend/app/cmd/server.go b/backend/app/cmd/server.go index 161681e8..e2aa45fb 100644 --- a/backend/app/cmd/server.go +++ b/backend/app/cmd/server.go @@ -49,6 +49,7 @@ type ServerCommand struct { Admin AdminGroup `group:"admin" namespace:"admin" env-namespace:"ADMIN"` Notify NotifyGroup `group:"notify" namespace:"notify" env-namespace:"NOTIFY"` SMTP SMTPGroup `group:"smtp" namespace:"smtp" env-namespace:"SMTP"` + Telegram TelegramGroup `group:"telegram" namespace:"telegram" env-namespace:"TELEGRAM"` Image ImageGroup `group:"image" namespace:"image" env-namespace:"IMAGE"` SSL SSLGroup `group:"ssl" namespace:"ssl" env-namespace:"SSL"` ImageProxy ImageProxyGroup `group:"image-proxy" namespace:"image-proxy" env-namespace:"IMAGE_PROXY"` @@ -188,6 +189,12 @@ type AdminGroup struct { RPC RPCGroup `group:"rpc" namespace:"rpc" env-namespace:"RPC"` } +// TelegramGroup defines token for Telegram used in notify and auth modules +type TelegramGroup struct { + Token string `long:"host" env:"HOST" description:"SMTP host"` + Timeout time.Duration `long:"timeout" env:"TIMEOUT" default:"5s" description:"telegram timeout"` +} + // SMTPGroup defines options for SMTP server connection, used in auth and notify modules type SMTPGroup struct { Host string `long:"host" env:"HOST" description:"SMTP host"` @@ -203,10 +210,10 @@ type NotifyGroup struct { Type []string `long:"type" env:"TYPE" description:"type of notification" choice:"none" choice:"telegram" choice:"email" choice:"slack" default:"none" env-delim:","` //nolint QueueSize int `long:"queue" env:"QUEUE" description:"size of notification queue" default:"100"` Telegram struct { - Token string `long:"token" env:"TOKEN" description:"telegram token"` Channel string `long:"chan" env:"CHAN" description:"telegram channel"` - Timeout time.Duration `long:"timeout" env:"TIMEOUT" default:"5s" description:"telegram timeout"` API string `long:"api" env:"API" default:"https://api.telegram.org/bot" description:"telegram api prefix"` + Token string `long:"token" env:"TOKEN" description:"[deprecated, use --telegram.token] telegram token"` + Timeout time.Duration `long:"timeout" env:"TIMEOUT" default:"5s" description:"[deprecated, use --telegram.timeout] telegram timeout"` } `group:"telegram" namespace:"telegram" env-namespace:"TELEGRAM"` Email struct { From string `long:"from_address" env:"FROM" description:"from email address"` @@ -290,7 +297,6 @@ func (s *ServerCommand) Execute(_ []string) error { // HandleDeprecatedFlags sets new flags from deprecated returns their list func (s *ServerCommand) HandleDeprecatedFlags() (result []DeprecatedFlag) { - // 1.5.0 if s.Auth.Email.Host != "" && s.SMTP.Host == "" { s.SMTP.Host = s.Auth.Email.Host result = append(result, DeprecatedFlag{Old: "auth.email.host", New: "smtp.host", RemoveVersion: "1.7.0"}) @@ -322,6 +328,15 @@ func (s *ServerCommand) HandleDeprecatedFlags() (result []DeprecatedFlag) { s.ImageProxy.HTTP2HTTPS = s.LegacyImageProxy result = append(result, DeprecatedFlag{Old: "img-proxy", New: "image-proxy.http2https", RemoveVersion: "1.7.0"}) } + if s.Notify.Telegram.Token != "" && s.Telegram.Token == "" { + s.Telegram.Token = s.Notify.Telegram.Token + result = append(result, DeprecatedFlag{Old: "notify.telegram.token", New: "telegram.token", RemoveVersion: "1.10.0"}) + } + const telegramDefaultDuration = time.Second * 5 + if s.Notify.Telegram.Timeout != telegramDefaultDuration && s.Telegram.Timeout == telegramDefaultDuration { + s.Telegram.Token = s.Notify.Telegram.Token + result = append(result, DeprecatedFlag{Old: "notify.telegram.timeout", New: "telegram.timeout", RemoveVersion: "1.10.0"}) + } return result } @@ -821,8 +836,8 @@ func (s *ServerCommand) makeNotify(dataStore *service.DataStore, authenticator * } destinations = append(destinations, slack) case "telegram": - tg, err := notify.NewTelegram(s.Notify.Telegram.Token, s.Notify.Telegram.Channel, - s.Notify.Telegram.Timeout, s.Notify.Telegram.API) + tg, err := notify.NewTelegram(s.Telegram.Token, s.Notify.Telegram.Channel, + s.Telegram.Timeout, s.Notify.Telegram.API) if err != nil { return nil, errors.Wrap(err, "failed to create telegram notification destination") } diff --git a/compose-dev-backend.yml b/compose-dev-backend.yml index 55d6367d..02a00d3b 100644 --- a/compose-dev-backend.yml +++ b/compose-dev-backend.yml @@ -42,7 +42,7 @@ services: - AUTH_DEV=true # activate local oauth "dev" - ADMIN_SHARED_ID=dev_user # set admin flag for default user on local ouath2 - NOTIFY_TYPE - - NOTIFY_TELEGRAM_TOKEN + - TELEGRAM_TOKEN - NOTIFY_TELEGRAM_CHAN - NOTIFY_EMAIL_FROM - ADMIN_SHARED_EMAIL diff --git a/docs/latest/telegram.md b/docs/latest/telegram.md index 3dcc85e2..06acd526 100644 --- a/docs/latest/telegram.md +++ b/docs/latest/telegram.md @@ -4,7 +4,7 @@ title: Telegram ## Telegram notifications -In order to integrate notifications from remark42 with the [telegram](https://telegram.org), you should make [a channel](https://telegram.org/faq_channels) and obtain a token. This token should be used as `NOTIFY_TELEGRAM_TOKEN`. You also need to set `NOTIFY_TYPE=telegram` and set `NOTIFY_TELEGRAM_CHAN` to your channel. +In order to integrate notifications from remark42 with the [telegram](https://telegram.org), you should make [a channel](https://telegram.org/faq_channels) and obtain a token. This token should be used as `TELEGRAM_TOKEN`. You also need to set `NOTIFY_TYPE=telegram` and set `NOTIFY_TELEGRAM_CHAN` to your channel. In order to get token "just talk to [BotFather](https://core.telegram.org/bots#6-botfather)". All you need is to send `/newbot` command, and choose the name for your bot (it must end in `bot`). This is it, you got a token.