-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.coffee
61 lines (48 loc) · 1.45 KB
/
server.coffee
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
express = require 'express'
consolidate = require 'consolidate'
http = require 'http'
https = require 'https'
url = require 'url'
app = express()
app.configure ()->
# Server Headers
app.use (req, res, next)->
res.setHeader 'X-Powered-By', 'Awesomesauce'
res.setHeader 'Server', 'Collins'
next()
# Serve static files from public
app.use express.static('public')
app.engine 'jade', consolidate.jade
app.set 'view engine', 'jade'
app.set 'views', 'views'
app.get '/supported', (req, res, next)->
find req.param('url'), req.headers['user-agent'], (e, http_response)->
if e
res.send(500, e.message)
else
res.send(200, {"x-frame-options":(http_response.headers['x-frame-options'] || false)})
app.get '/opensearch', (req, res, next)->
res.setHeader 'content-type', 'application/opensearchdescription+xml'
res.render 'opensearch', url_template:'http://' + req.headers.host + '/?{searchTerms}'
find = (u, ua, cb, hops = 5)=>
if hops == 0
cb(new Error("Too man redirects"))
return
u = url.parse(u)
u.headers = {
'user-agent': ua
}
client = if u.protocol == 'http:' then http else https
client
.get( u, (get)->
if get.statusCode >= 300 && get.statusCode < 400
find get.headers['location'], ua, (e, get)->
cb(e, get)
, hops-1
else
cb(null, get)
)
.on( 'error', (e)->
cb(e, null)
)
app.listen process.env.PORT || 4000