phantom_proxy 1.2.17 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,194 +0,0 @@
1
- require 'net/http'
2
- require 'hmac-md5'
3
- require 'base64'
4
-
5
- module PhantomJSProxy
6
- class Options
7
- def initialize(env)
8
- @env = env
9
- end
10
-
11
- def picture?
12
- @env['HTTP_GET_PAGE_AS_IMAGE']||false
13
- end
14
-
15
- def loadFrames?
16
- @env['HTTP_GET_PAGE_WITH_IFRAMES']||true
17
- end
18
- end
19
-
20
- class PhantomJSServer
21
- def initialize
22
- @control_panel = PhantomJSProxy::PhantomJSControlPanel.new
23
-
24
- #load key
25
- @hmac_activated = false
26
- @hmac = nil
27
- if File.directory?("/tmp/phantom_proxy")
28
- if File.exists?("/tmp/phantom_proxy/key")
29
- key = File.open("/tmp/phantom_proxy/key", "r").read
30
- #puts "HMAC_KEY: #{key}"
31
- @hmac_activated = true
32
- @hmac = HMAC::MD5.new key
33
- end
34
- end
35
- end
36
-
37
- attr_accessor :control_panel
38
- attr_accessor :hmac
39
- attr_accessor :hmac_activated
40
-
41
- def check_for_route(url)
42
- if /\.js/i.match(url) and !/\.jsp/i.match(url)
43
- return 'text/html'
44
- end
45
- if /\.css/i.match(url)
46
- return 'text/css'
47
- end
48
- if /\.png/i.match(url) or /\.jpg/i.match(url) or /\.jpeg/i.match(url) or /\.gif/i.match(url)
49
- return 'image/*'
50
- end
51
- if /phantom_proxy_control_panel/.match(url)
52
- return 'control_panel'
53
- end
54
- if /phantomProxy\.get/.match(url)
55
- return "base64"
56
- end
57
- "none"
58
- end
59
-
60
- def route(env, type)
61
- _req = Net::HTTP::Get.new(env['REQUEST_URI'])
62
-
63
- _req['User-Agent'] = env['HTTP_USER_AGENT']
64
-
65
- _res = Net::HTTP.start(env['HTTP_HOST'], env['SERVER_PORT']) {|http|
66
- #http.request(_req)
67
- http.get(env['REQUEST_URI'])
68
- }
69
-
70
- #env['rack.errors'].write("Response is:"+_res.body+"\n")
71
-
72
- resp = Rack::Response.new([], 200, {'Content-Type' => type}) { |r|
73
- r.write(_res.body)
74
- }
75
- resp.finish
76
- end
77
-
78
- def check_request_security req, env
79
- if !env['HTTP_HMAC_KEY'] || !env['HTTP_HMAC_TIME']
80
- return false
81
- end
82
-
83
- client_key = env['HTTP_HMAC_KEY']
84
- client_time= Time.parse(env['HTTP_HMAC_TIME'])
85
- remote_time= Time.now
86
- remote_key = hmac.update(env['REQUEST_URI']+env['HTTP_HMAC_TIME']).hexdigest
87
-
88
- if (client_key != remote_key || (remote_time-client_time).abs > 120)
89
- control_panel.add_special_request "@did not pass security check"
90
- return false
91
- end
92
- return true
93
- end
94
-
95
- def prepareUrl(env, params, req, https_request, type)
96
- if type == "none"
97
- url = env['REQUEST_URI']#req.url
98
- puts "URL is: #{url}"
99
- if https_request
100
- url['http'] = 'https' if url['http']
101
- url[':443'] = '' if url[':443']
102
- end
103
-
104
- if params.length > 0
105
- url += '?'+params;
106
- end
107
- return url
108
- end
109
- url = Base64.decode64(req.params["address"])
110
- env['rack.errors'].write("After Base64 decoding: "+url+"\n")
111
- return url
112
- end
113
-
114
- def call(env)
115
- control_panel.add_request
116
-
117
- req = Rack::Request.new(env)
118
-
119
- request_parameters = env.collect { |k, v| "\t#{k} : #{v}\n" }.join
120
- env['rack.errors'].write("The request: "+req.url()+"\nGET: "+request_parameters+"\n")
121
-
122
- if hmac_activated && hmac && !check_request_security(req, env)
123
- resp = Rack::Response.new([], 503, {
124
- 'Content-Type' => 'text/html'
125
- }) { |r|
126
- r.write("Security ERROR")
127
- }
128
- return resp.finish
129
- end
130
-
131
- https_request = false
132
- if /\:443/.match(req.url())
133
- https_request = true
134
- end
135
-
136
- params = req.params.collect { |k, v| "#{k}=#{v}&" }.join
137
- env['rack.errors'].write("Paramas: "+params+"\n")
138
-
139
- #this routes the request to the outgoing server incase its not html that we want to load
140
- type = check_for_route(env['REQUEST_URI'])#req.url
141
- if type == "control_panel"
142
- return control_panel.show()
143
- elsif type != "none" and type != "base64"
144
- control_panel.add_special_request "@forward_requests"
145
- return route(env, type)
146
- else
147
- #Fetch the Webpage with PhantomJS
148
- phJS = PhantomJS.new
149
-
150
- env['rack.errors'].write("Extract the uri\n")
151
-
152
- loadOptions = Options.new(env)
153
-
154
- puts "Options: #{loadOptions.picture?}, #{loadOptions.loadFrames?}"
155
-
156
- url = prepareUrl(env, params, req, https_request, type)
157
-
158
- phJS.getUrl(url, loadOptions.picture?, loadOptions.loadFrames?)
159
-
160
- #Create the response
161
- if loadOptions.picture?
162
- control_panel.add_special_request "@image_requests"
163
- resp = Rack::Response.new([], 200, {
164
- 'Content-Type' => 'image/png'
165
- }) { |r|
166
- r.write(phJS.image)
167
- }
168
- resp.finish
169
- elsif phJS.ready != 200
170
- if !/favicon\.ico/.match(req.url())
171
- env['rack.errors'].write("Request FAILED\n")
172
- control_panel.add_special_request "@failed_requests"
173
- else
174
- control_panel.add_special_request "@favicon_requests"
175
- end
176
- resp = Rack::Response.new([], phJS.ready > 0 ? phJS.ready : 404 , {
177
- 'Content-Type' => 'text/html'
178
- }) { |r|
179
- r.write(phJS.dom)
180
- }
181
- resp.finish
182
- else
183
- control_panel.add_special_request "@html_requests"
184
- resp = Rack::Response.new([], 200, {
185
- 'Content-Type' => 'text/html'
186
- }) { |r|
187
- r.write(phJS.dom)
188
- }
189
- resp.finish
190
- end
191
- end
192
- end
193
- end
194
- end
@@ -1,44 +0,0 @@
1
- <html>
2
- <head>
3
- <title>Phantom Proxy Control</title>
4
- <style>
5
- h1 {
6
- text-align: center;
7
- }
8
- h4 {
9
- text-align: center;
10
- position: relative;
11
- top: -20px;
12
- }
13
- .infobox {
14
- width: 800px;
15
- margin-left: auto;
16
- margin-right: auto;
17
- }
18
- .name {
19
- float: left;
20
- }
21
- .value {
22
- float: right;
23
- margin-bottom: 10px;
24
- }
25
- .divider {
26
- background-color: black;
27
- height: 1px;
28
- width: 700px;
29
- margin-bottom: 10px;
30
- margin-left: auto;
31
- margin-right: auto;
32
- clear: left;
33
- clear: right;
34
- }
35
- </style>
36
- </head>
37
- <body>
38
- <h1>Phantom Proxy</h1>
39
- <h4>Control Panel</h4>
40
- <div class="infobox" id="infobox">
41
- @control_panel_data
42
- </div>
43
- </body>
44
- </html>
data/spec/test DELETED
@@ -1,2 +0,0 @@
1
- #bash
2
- bin/phantomjs lib/phantom_proxy/scripts/proxy.js tmp/picture.png true http://dl.dropbox.com/u/36978459/index.html > tmp/log.txt
data/tmp/.keep DELETED
File without changes
data/tmp/run DELETED
@@ -1,5 +0,0 @@
1
- gem uninstall phantom_proxy -x
2
- rm phantom_proxy-*.*.*.gem
3
- gem build phantom_proxy.gemspec
4
- gem install phantom_proxy-*.*.*.gem
5
- phantom_proxy -p 3003