Simplify config and add user white list

This commit is contained in:
2025-08-14 12:25:58 +03:00
parent 137da5a893
commit aae83db2ea
4 changed files with 65 additions and 51 deletions

View File

@@ -1,36 +1,37 @@
# Server configuration
[server]
port = 8080
shutdown_timeout = 5
force_shutdown_timeout = 20
# Database configuration
[database]
path = "data/transcriber.db"
# AWS S3 Configuration
[aws]
# Регион AWS (например: us-east-1, eu-west-1)
region = "us-east-1"
# AWS Access Key ID (получить в AWS Console)
access_key_id = "your_access_key_id"
# AWS Secret Access Key (получить в AWS Console)
secret_access_key = "your_secret_access_key"
# Имя S3 bucket для загрузки файлов
bucket_name = "your_bucket_name"
# Кастомный endpoint для S3 (оставить пустым для AWS S3, заполнить для MinIO или других S3-совместимых сервисов)
endpoint = ""
# Yandex Cloud Speech-to-Text Configuration
# Yandex Cloud Configuration
[yandex]
# API ключ для доступа к Yandex Cloud (получить в консоли Yandex Cloud)
api_key = "your_api_key_here"
# ID папки в Yandex Cloud (получить в консоли Yandex Cloud)
folder_id = "your_folder_id_here"
# API ключ для доступа к Yandex SpeechKit (получить в консоли Yandex Cloud)
speech_kit_api_key = "your_speech_kit_api_key_here"
# Object Storage (S3) configuration
# Access Key ID для доступа к Object Storage (получить в консоли Yandex Cloud)
object_storage_access_key_id = "your_access_key_id"
# Secret Access Key для доступа к Object Storage (получить в консоли Yandex Cloud)
object_storage_secret_access_key = "your_secret_access_key"
# Имя бакета в Object Storage
object_storage_bucket_name = "your_bucket_name"
# Регион Object Storage
object_storage_region = "ru-central1"
# Endpoint Object Storage
object_storage_endpoint = "https://storage.yandexcloud.net/"
# Telegram Bot Configuration
[telegram]
# Токен Telegram бота (получить у @BotFather в Telegram)

View File

@@ -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: "",

View File

@@ -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 := `Я бот для расшифровки аудиосообщений и аудиофайлов.

13
main.go
View File

@@ -100,12 +100,12 @@ func main() {
converter := ffmpegconv.NewFfmpegConverter()
recognizer, err := yandex.NewYandexAudioRecognizerService(yandex.YandexAudioRecognizerConfig{
Region: cfg.AWS.Region,
AccessKey: cfg.AWS.AccessKey,
SecretKey: cfg.AWS.SecretKey,
BucketName: cfg.AWS.BucketName,
Endpoint: cfg.AWS.Endpoint,
ApiKey: cfg.Yandex.APIKey,
Region: cfg.Yandex.ObjStorageRegion,
AccessKey: cfg.Yandex.ObjStorageAccessKey,
SecretKey: cfg.Yandex.ObjStorageSecretKey,
BucketName: cfg.Yandex.ObjStorageBucketName,
Endpoint: cfg.Yandex.ObjStorageEndpoint,
ApiKey: cfg.Yandex.SpeechKitAPIKey,
FolderID: cfg.Yandex.FolderID,
})
if err != nil {
@@ -127,6 +127,7 @@ func main() {
tgConfig := tgcontroller.TelegramConfig{
BotToken: cfg.Telegram.BotToken,
UpdateTimeout: cfg.Telegram.UpdateTimeout,
UserWhiteList: cfg.Server.UsersWhiteList,
}
// Создаем Telegram бот