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.