1
0
зеркало из https://github.com/glebtv/telegram-bot.git synced 2026-09-03 17:55:52 +03:00

Use token hash in routes instead of plain value, support :path option

Этот коммит содержится в:
Max Melentiev
2020-09-04 13:00:31 +01:00
родитель 03472e3d46
Коммит 97e45d94f2
4 изменённых файлов: 50 добавлений и 38 удалений

Просмотреть файл

@@ -1,3 +1,6 @@
require 'base64'
require 'openssl'
require 'telegram/bot'
require 'active_support/core_ext/array/wrap'
@@ -17,10 +20,8 @@ module Telegram
end || 'telegram_webhook'
end
# Replaces colon with underscore so rails don't treat it as
# route parameter.
def escape_token(token)
token && token.tr(':', '_')
def token_hash(token)
Base64.urlsafe_encode64(OpenSSL::Digest::SHA1.digest(token), padding: false)
end
end
@@ -34,14 +35,17 @@ module Telegram
#
# # pass additional options
# telegram_webhook TelegramController, :default, as: :custom_route_name
def telegram_webhook(controller, bot = :default, **options)
#
# # Default path is generated using hashed bot token. Override it using:
# telegram_webhook TelegramController, :default, path: 'top/secret'
def telegram_webhook(controller, bot = :default, path: nil, **options)
bot = Client.wrap(bot)
params = {
to: Middleware.new(bot, controller),
as: RoutesHelper.route_name_for_bot(bot),
format: false,
}.merge!(options)
post("telegram/#{RoutesHelper.escape_token bot.token}", params)
post(path || "telegram/#{bot.token && RoutesHelper.token_hash(bot.token)}", params)
UpdatesPoller.add(bot, controller) if Telegram.bot_poller_mode?
end
end