diff --git a/client/bot/handlers/middleware.go b/client/bot/handlers/middleware.go index 1ef1dd0..3ad8079 100644 --- a/client/bot/handlers/middleware.go +++ b/client/bot/handlers/middleware.go @@ -22,6 +22,17 @@ func checkPermission(ctx *ext.Context, update *ext.Update) error { return dispatcher.ContinueGroups } +// withPermission wraps a callback handler with the same whitelist check used +// for message handlers (checkPermission). +func withPermission(handler func(*ext.Context, *ext.Update) error) func(*ext.Context, *ext.Update) error { + return func(ctx *ext.Context, update *ext.Update) error { + if err := checkPermission(ctx, update); err != nil { + return err + } + return handler(ctx, update) + } +} + func handleSilentMode(next func(*ext.Context, *ext.Update) error, handler func(*ext.Context, *ext.Update) error) func(*ext.Context, *ext.Update) error { return func(ctx *ext.Context, update *ext.Update) error { userID := update.GetUserChat().GetID() diff --git a/client/bot/handlers/register.go b/client/bot/handlers/register.go index 8257fa4..b7f73f5 100644 --- a/client/bot/handlers/register.go +++ b/client/bot/handlers/register.go @@ -56,11 +56,11 @@ func Register(disp dispatcher.Dispatcher) { for _, info := range CommandHandlers { disp.AddHandler(handlers.NewCommand(info.Cmd, info.handler)) } - disp.AddHandler(handlers.NewCallbackQuery(filters.CallbackQuery.Prefix("update"), handleUpdateCallback)) - disp.AddHandler(handlers.NewCallbackQuery(filters.CallbackQuery.Prefix(tcbdata.TypeAdd), handleAddCallback)) - disp.AddHandler(handlers.NewCallbackQuery(filters.CallbackQuery.Prefix(tcbdata.TypeSetDefault), handleSetDefaultCallback)) - disp.AddHandler(handlers.NewCallbackQuery(filters.CallbackQuery.Prefix(tcbdata.TypeCancel), handleCancelCallback)) - disp.AddHandler(handlers.NewCallbackQuery(filters.CallbackQuery.Prefix(tcbdata.TypeConfig), handleConfigCallback)) + disp.AddHandler(handlers.NewCallbackQuery(filters.CallbackQuery.Prefix("update"), withPermission(handleUpdateCallback))) + disp.AddHandler(handlers.NewCallbackQuery(filters.CallbackQuery.Prefix(tcbdata.TypeAdd), withPermission(handleAddCallback))) + disp.AddHandler(handlers.NewCallbackQuery(filters.CallbackQuery.Prefix(tcbdata.TypeSetDefault), withPermission(handleSetDefaultCallback))) + disp.AddHandler(handlers.NewCallbackQuery(filters.CallbackQuery.Prefix(tcbdata.TypeCancel), withPermission(handleCancelCallback))) + disp.AddHandler(handlers.NewCallbackQuery(filters.CallbackQuery.Prefix(tcbdata.TypeConfig), withPermission(handleConfigCallback))) disp.AddHandler(handlers.NewMessage(sabotfilters.RegexUrl(regexp.MustCompile(re.TgMessageLinkRegexString)), handleSilentMode(handleMessageLink, handleSilentSaveLink))) disp.AddHandler(handlers.NewMessage(sabotfilters.RegexUrl(regexp.MustCompile(re.TelegraphUrlRegexString)), handleSilentMode(handleTelegraphUrlMessage, handleSilentSaveTelegraph))) disp.AddHandler(handlers.NewMessage(filters.Message.Media, handleSilentMode(handleMediaMessage, handleSilentSaveMedia)))