-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.rb
58 lines (46 loc) · 1.58 KB
/
app.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# frozen_string_literal: true
require 'sinatra'
require 'telegram/bot'
BOT_TOKEN = ENV.fetch('TELEGRAM_BOT_API_TOKEN').freeze
BOT_CHAT_ID = ENV.fetch('TELEGRAM_BOT_API_CHAT_ID', '@test_temp_chnl_42').freeze
BOT_MSG_FORMAT = 'HTML'
def secure_digest(str)
Digest::SHA512.digest str
end
private :secure_digest
BASIC_AUTH_LOGIN = secure_digest(ENV.fetch('BASIC_AUTH_LOGIN')).freeze
BASIC_AUTH_PASSWORD = secure_digest(ENV.fetch('BASIC_AUTH_PASSWORD')).freeze
use Rack::Auth::Basic, 'Restricted Area' do |login, password|
Rack::Utils.secure_compare(secure_digest(login), BASIC_AUTH_LOGIN) &&
Rack::Utils.secure_compare(secure_digest(password), BASIC_AUTH_PASSWORD)
end
set :protection, except: :frame_options
get '/' do
@msg_title = params['title'].to_s.strip
@msg_body = params['text'].to_s.strip
@msg_link = params['ref_url'].to_s.strip
erb :telegram_form
end
post '/channel' do
msg_title = params['title'].to_s.strip
msg_body = params['text'].to_s.strip
msg_link = params['ref_url'].to_s.strip
if msg_body.empty? || msg_link.empty?
halt 400, 'Текст и ссылка обязательны к заполнению.'
end
chat_msg = String.new
unless msg_title.empty?
chat_msg << "<b>#{Rack::Utils.escape_html msg_title}</b>\n\n"
end
chat_msg << msg_body << "\n\n#{msg_link}"
status = false
Telegram::Bot::Client.run(BOT_TOKEN) do |bot|
result = bot.api.send_message(
chat_id: BOT_CHAT_ID,
text: chat_msg,
parse_mode: BOT_MSG_FORMAT
)
status = result['ok']
end
status ? 'Success' : 'Failed, sorry'
end