Simplify config and add user white list
This commit is contained in:
@@ -10,32 +10,29 @@ import (
|
||||
type Config struct {
|
||||
Server ServerConfig `toml:"server"`
|
||||
Database DatabaseConfig `toml:"database"`
|
||||
AWS AWSConfig `toml:"aws"`
|
||||
Yandex YandexConfig `toml:"yandex"`
|
||||
Telegram TelegramConfig `toml:"telegram"`
|
||||
}
|
||||
|
||||
type ServerConfig struct {
|
||||
Port int `toml:"port"`
|
||||
ShutdownTimeout int `toml:"shutdown_timeout"`
|
||||
ForceShutdownTimeout int `toml:"force_shutdown_timeout"`
|
||||
Port int `toml:"port"`
|
||||
ShutdownTimeout int `toml:"shutdown_timeout"`
|
||||
ForceShutdownTimeout int `toml:"force_shutdown_timeout"`
|
||||
UsersWhiteList []string `toml:"users_while_list"`
|
||||
}
|
||||
|
||||
type DatabaseConfig struct {
|
||||
Path string `toml:"path"`
|
||||
}
|
||||
|
||||
type AWSConfig struct {
|
||||
Region string `toml:"region"`
|
||||
AccessKey string `toml:"access_key_id"`
|
||||
SecretKey string `toml:"secret_access_key"`
|
||||
BucketName string `toml:"bucket_name"`
|
||||
Endpoint string `toml:"endpoint"`
|
||||
}
|
||||
|
||||
type YandexConfig struct {
|
||||
APIKey string `toml:"api_key"`
|
||||
FolderID string `toml:"folder_id"`
|
||||
FolderID string `toml:"folder_id"`
|
||||
SpeechKitAPIKey string `toml:"speech_kit_api_key"`
|
||||
ObjStorageAccessKey string `toml:"object_storage_access_key_id"`
|
||||
ObjStorageSecretKey string `toml:"object_storage_secret_access_key"`
|
||||
ObjStorageBucketName string `toml:"object_storage_bucket_name"`
|
||||
ObjStorageRegion string `toml:"object_storage_region"`
|
||||
ObjStorageEndpoint string `toml:"object_storage_endpoint"`
|
||||
}
|
||||
|
||||
type TelegramConfig struct {
|
||||
@@ -54,16 +51,14 @@ func DefaultConfig() *Config {
|
||||
Database: DatabaseConfig{
|
||||
Path: "data/transcriber.db",
|
||||
},
|
||||
AWS: AWSConfig{
|
||||
Region: "ru-central1",
|
||||
AccessKey: "",
|
||||
SecretKey: "",
|
||||
BucketName: "",
|
||||
Endpoint: "",
|
||||
},
|
||||
Yandex: YandexConfig{
|
||||
APIKey: "",
|
||||
FolderID: "",
|
||||
FolderID: "",
|
||||
SpeechKitAPIKey: "",
|
||||
ObjStorageAccessKey: "",
|
||||
ObjStorageSecretKey: "",
|
||||
ObjStorageBucketName: "",
|
||||
ObjStorageRegion: "ru-central1",
|
||||
ObjStorageEndpoint: "https://storage.yandexcloud.net/",
|
||||
},
|
||||
Telegram: TelegramConfig{
|
||||
BotToken: "",
|
||||
|
@@ -5,6 +5,7 @@ import (
|
||||
"io"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"slices"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -15,17 +16,19 @@ import (
|
||||
|
||||
type TelegramController struct {
|
||||
// deps
|
||||
bot *tgbotapi.BotAPI
|
||||
transcribeService *service.TranscribeService
|
||||
jobRepo contract.TranscriptJobRepository
|
||||
logger *slog.Logger
|
||||
// params
|
||||
bot *tgbotapi.BotAPI
|
||||
userWhiteList []string
|
||||
updateTimeout int
|
||||
}
|
||||
|
||||
type TelegramConfig struct {
|
||||
BotToken string
|
||||
UpdateTimeout int
|
||||
UserWhiteList []string
|
||||
}
|
||||
|
||||
func NewTelegramController(
|
||||
@@ -50,6 +53,7 @@ func NewTelegramController(
|
||||
jobRepo: jobRepo,
|
||||
logger: logger,
|
||||
updateTimeout: config.UpdateTimeout,
|
||||
userWhiteList: config.UserWhiteList,
|
||||
}
|
||||
|
||||
return controller, nil
|
||||
@@ -71,6 +75,12 @@ func (c *TelegramController) Start() {
|
||||
author := update.Message.From.String()
|
||||
c.logger.Info("New incoming message", "author", author)
|
||||
|
||||
if !slices.Contains(c.userWhiteList, author) {
|
||||
c.logger.Info("User is not in white list, reject", "author", author)
|
||||
c.handleForbiddenUser(update.Message)
|
||||
continue
|
||||
}
|
||||
|
||||
// Handle commands
|
||||
if update.Message.IsCommand() {
|
||||
// Extract the command from the Message
|
||||
@@ -105,6 +115,13 @@ func (c *TelegramController) handleStartCommand(message *tgbotapi.Message) {
|
||||
c.bot.Send(msg)
|
||||
}
|
||||
|
||||
func (c *TelegramController) handleForbiddenUser(message *tgbotapi.Message) {
|
||||
msg := tgbotapi.NewMessage(message.Chat.ID, "Извини, тебе нельзя пользоваться этим ботом. Обратись к владельцу бота.")
|
||||
msg.ReplyToMessageID = message.MessageID
|
||||
|
||||
c.bot.Send(msg)
|
||||
}
|
||||
|
||||
func (c *TelegramController) handleHelpCommand(message *tgbotapi.Message) {
|
||||
helpText := `Я бот для расшифровки аудиосообщений и аудиофайлов.
|
||||
|
||||
|
Reference in New Issue
Block a user