This repository has been archived by the owner on Jan 31, 2022. It is now read-only.
/
app.rb
69 lines (53 loc) · 1.51 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
59
60
61
62
63
64
65
66
67
68
69
require 'sinatra'
require 'sinatra/reloader' if development?
require 'net/http'
require 'json'
require 'sidekiq'
require 'sidekiq/api'
require 'redis'
require 'rack/ssl-enforcer'
require "addressable/uri"
use Rack::SslEnforcer if production?
Sidekiq.configure_client do |config|
config.redis = { url: ENV['REDIS_URL'] }
end
$redis = Redis.new( url: ENV['REDIS_URL'] )
class App < Sinatra::Application
get '/' do
stats = Sidekiq::Stats.new
@processed = stats.processed
erb :index, :layout => :layout
end
get '/demo' do
erb :demo, :params => JSON.pretty_generate(params), :layout => :layout
end
post '/' do
webhook_url = params[:webhook]
redirect_url = params[:redirect]
if webhook_url.nil?
erb :missing_webhook, :layout => :layout
elsif redirect_url.nil?
erb :missing_redirect_url, :layout => :layout
else
params.delete(:webhook)
params.delete(:redirect)
payload = params.to_json
DeliverWebhook.perform_async(webhook_url, payload)
uri = Addressable::URI.parse(redirect_url)
uri.query_values = params
redirect uri.to_s
end
end
class DeliverWebhook
include Sidekiq::Worker
def perform(webhook_url,payload)
uri = URI.parse(webhook_url)
request = Net::HTTP::Post.new(uri.request_uri)
request['Content-Type'] = 'application/json'
request.body = payload
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = (uri.scheme == 'https')
http.request(request)
end
end
end