ultrahook 0.1.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f121751871d589fe219517b892a2a68259f72f2d6290ea180fc803ca8d13809b
4
+ data.tar.gz: 40d1424d65a17167fbdd2c687b53f830a0ce0228e014935baccc6c51a82bbc45
5
+ SHA512:
6
+ metadata.gz: c14c4260e09e8d70f3ee75836584004cb82c1172b9aaf9a556e85a056db173cd774bc4da284b8f005ae2463c66c6bdb829f48d63a4e9ccdccba27e22b38f5cc4
7
+ data.tar.gz: 58595e2dde96869f35cf76be69716150a8d2050af60b953d7c362107e4d6cf404ff785e83d25368914cd7c4e473e1008f0a838b83a94db6c4cfb65246cb78047
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Senvee Inc.
1
+ Copyright (c) 2013 - 2020 Senvee Inc.
2
2
 
3
3
  Senvee Inc hereby grants you a non-exclusive commercial license to use and distribute the provided software. You may not create derivative works of the provided software.
4
4
 
File without changes
@@ -3,6 +3,9 @@ require 'net/http'
3
3
  require 'json'
4
4
  require 'base64'
5
5
  require 'optparse'
6
+ require 'openssl'
7
+
8
+ $stdout.sync = true
6
9
 
7
10
  module UltraHook
8
11
  class Client
@@ -34,7 +37,7 @@ module UltraHook
34
37
  end
35
38
 
36
39
  if @options["key"].nil? || @options["key"] == ""
37
- path = "#{Dir.home}/.ultrahook"
40
+ path = File.expand_path("~/.ultrahook")
38
41
  if File.readable?(path)
39
42
  if matchdata = /api_key:\s*([^\s]+)/.match(IO.read(path))
40
43
  @options["key"] = matchdata.captures[0]
@@ -69,7 +72,7 @@ module UltraHook
69
72
  "http://#{dest}"
70
73
  elsif dest =~ /^[[:alnum:]\.\-]+$/
71
74
  "http://#{dest}"
72
- elsif dest =~ /^http:\/\//
75
+ elsif dest =~ /^https?:\/\//
73
76
  dest
74
77
  else
75
78
  error "Cannot parse destination url"
@@ -78,7 +81,7 @@ module UltraHook
78
81
 
79
82
  def process(msg)
80
83
  begin
81
- payload = JSON.parse(Base64.decode64(msg))
84
+ payload = JSON.parse(Base64.decode64(msg).force_encoding("utf-8"))
82
85
  rescue
83
86
  error "Cannot communicate with server."
84
87
  end
@@ -89,7 +92,7 @@ module UltraHook
89
92
 
90
93
  def process_init(payload)
91
94
  puts "Forwarding activated..."
92
- puts "http://#{@options["host"]}.#{@namespace}.ultrahook.com -> #{@options["destination"]}"
95
+ puts "https://#{@ultrahook_host} -> #{@options["destination"]}"
93
96
  end
94
97
 
95
98
  def process_error(payload)
@@ -100,6 +103,14 @@ module UltraHook
100
103
  puts "Warning: "+payload["message"]
101
104
  end
102
105
 
106
+ def process_message(payload)
107
+ puts payload["message"]
108
+ end
109
+
110
+ def process_ping(payload)
111
+ # silent ack!
112
+ end
113
+
103
114
  def full_path(uri)
104
115
  return "/" if uri.path == "" && uri.query == ""
105
116
  return "/?#{uri.query}" if uri.path == "" && uri.query != ""
@@ -112,15 +123,20 @@ module UltraHook
112
123
  uri = URI("#{@options["destination"]}#{payload["path"]}?#{payload["query"]}")
113
124
  response = http_post(uri, payload["body"], payload["headers"])
114
125
 
115
- puts "[#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}] POST http://#{uri.host}:#{uri.port}#{full_path(uri)} - #{response.code}"
126
+ puts "[#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}] POST #{uri.scheme}://#{uri.host}:#{uri.port}#{full_path(uri)} - #{response.code}"
116
127
  end
117
128
 
118
- def http_post(uri, data, headers=nil)
119
- Net::HTTP.new(uri.host, uri.port).post(full_path(uri), data, headers)
129
+ def http_post(uri, data="", headers={})
130
+ http = Net::HTTP.new(uri.host, uri.port)
131
+ if uri.scheme == "https"
132
+ http.use_ssl = true
133
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
134
+ end
135
+ http.post(full_path(uri), data, headers)
120
136
  end
121
137
 
122
138
  def retrieve_config
123
- response = http_post(URI("http://www.ultrahook.com/init"), "key=#{@options["key"]}&host=#{@options["host"]}&version=#{UltraHook::VERSION}")
139
+ response = http_post(URI("https://www.ultrahook.com/init"), "key=#{@options["key"]}&host=#{@options["host"]}&version=#{UltraHook::VERSION}")
124
140
 
125
141
  error "Could not retrieve config from server: #{response.code}" if response.code.to_i != 200
126
142
 
@@ -128,6 +144,7 @@ module UltraHook
128
144
  if payload["success"] == true
129
145
  @stream_url = payload["url"]
130
146
  @namespace = payload["namespace"]
147
+ @ultrahook_host = payload["host"]
131
148
 
132
149
  puts "Authenticated as #{@namespace}"
133
150
  else
@@ -137,7 +154,7 @@ module UltraHook
137
154
 
138
155
  def init_stream
139
156
  uri = URI(@stream_url)
140
- Net::HTTP.start(uri.host, uri.port) do |http|
157
+ Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
141
158
  begin
142
159
  request = Net::HTTP::Get.new "#{uri.path}?#{uri.query}"
143
160
 
@@ -1,3 +1,3 @@
1
1
  module UltraHook
2
- VERSION = "0.1.1"
2
+ VERSION = "1.0.0"
3
3
  end
metadata CHANGED
@@ -1,70 +1,64 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ultrahook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Vinay Sahni
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-07-17 00:00:00.000000000 Z
11
+ date: 2020-11-18 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: json
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: 1.8.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: 1.8.0
30
- description: UltraHook is a simple command line tool that connects public endpoints
31
- (provided by the ultrahook.com service) to private endpoints accessible from your
32
- computer. It relays any HTTP POST requests sent to the public endpoint.
27
+ description: UltraHook lets you receive webhooks on localhost. It relays HTTP POST
28
+ requests sent from a public endpoints (provided by the ultrahook.com service) to
29
+ private endpoints accessible from your computer.
33
30
  email: vinay@sahni.org
34
31
  executables:
35
32
  - ultrahook
36
33
  extensions: []
37
34
  extra_rdoc_files: []
38
35
  files:
39
- - lib/ultrahook/client.rb
40
- - lib/ultrahook/version.rb
41
- - lib/ultrahook.rb
42
36
  - LICENSE
43
37
  - bin/ultrahook
38
+ - lib/ultrahook.rb
39
+ - lib/ultrahook/client.rb
40
+ - lib/ultrahook/version.rb
44
41
  homepage: http://www.ultrahook.com
45
42
  licenses:
46
43
  - Commercial
44
+ metadata: {}
47
45
  post_install_message:
48
46
  rdoc_options: []
49
47
  require_paths:
50
48
  - lib
51
49
  required_ruby_version: !ruby/object:Gem::Requirement
52
- none: false
53
50
  requirements:
54
- - - ! '>='
51
+ - - ">="
55
52
  - !ruby/object:Gem::Version
56
53
  version: '0'
57
54
  required_rubygems_version: !ruby/object:Gem::Requirement
58
- none: false
59
55
  requirements:
60
- - - ! '>='
56
+ - - ">="
61
57
  - !ruby/object:Gem::Version
62
58
  version: '0'
63
59
  requirements: []
64
- rubyforge_project:
65
- rubygems_version: 1.8.25
60
+ rubygems_version: 3.0.6
66
61
  signing_key:
67
- specification_version: 3
68
- summary: A simple command line tool that enables you to receive webhooks while behind
69
- firewalls
62
+ specification_version: 4
63
+ summary: Receive webhooks on localhost
70
64
  test_files: []