comparison http/src/luan/modules/web/Server.luan @ 493:1d082a0812e0

move web to http
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 15 May 2015 17:29:59 -0600
parents web/src/luan/modules/web/Server.luan@55a86fc4701b
children
comparison
equal deleted inserted replaced
492:b36cc406d3d2 493:1d082a0812e0
1 require "luan:String"
2 local Io = require "luan:Io"
3 local Package = require "luan:Package"
4 local Http = require "luan:web/Http"
5 require "luan:logging/Logging" -- initialize logging
6
7 java()
8 local Server = require "java:org.eclipse.jetty.server.Server"
9 local NCSARequestLog = require "java:org.eclipse.jetty.server.NCSARequestLog"
10 local DefaultHandler = require "java:org.eclipse.jetty.server.handler.DefaultHandler"
11 local HandlerList = require "java:org.eclipse.jetty.server.handler.HandlerList"
12 local HandlerCollection = require "java:org.eclipse.jetty.server.handler.HandlerCollection"
13 local ResourceHandler = require "java:org.eclipse.jetty.server.handler.ResourceHandler"
14 local RequestLogHandler = require "java:org.eclipse.jetty.server.handler.RequestLogHandler"
15 local ContextHandler = require "java:org.eclipse.jetty.server.handler.ContextHandler"
16 local GzipHandler = require "java:org.eclipse.jetty.server.handler.GzipHandler"
17 local HandlerWrapper = require "java:org.eclipse.jetty.server.handler.HandlerWrapper"
18 local SessionHandler = require "java:org.eclipse.jetty.server.session.SessionHandler"
19 local AuthenticationHandler = require "java:luan.modules.web.AuthenticationHandler"
20 local LuanHandler = require "java:luan.modules.web.LuanHandler"
21 local NotFound = require "java:luan.modules.web.NotFound"
22
23
24 port = 8080
25
26 private_password = "password"
27
28 welcome_file = "index.html"
29
30
31 authentication_handler = AuthenticationHandler.new("/private/")
32
33 luan_handler = LuanHandler.new()
34
35 resource_handler = ResourceHandler.new()
36 resource_handler.setDirectoriesListed(true)
37
38 handlers = HandlerList.new()
39 handlers.setHandlers { authentication_handler, luan_handler, resource_handler }
40
41 function add_folder(context,dir)
42 local rh = ResourceHandler.new()
43 rh.setResourceBase(dir)
44 rh.setDirectoriesListed(true)
45 local ch = ContextHandler.new(context)
46 ch.setHandler(rh)
47 handlers.addHandler(ch)
48 return rh
49 end
50
51 handler_wrapper = HandlerWrapper.new()
52 handler_wrapper.setHandler(handlers)
53
54 function zip()
55 local h = GzipHandler.new()
56 h.setHandler(handler_wrapper.getHandler())
57 handler_wrapper.setHandler(h)
58 end
59
60 log = NCSARequestLog.new()
61 log.setExtended(false)
62 log_handler = RequestLogHandler.new()
63 log_handler.setRequestLog(log)
64
65 function set_log_file(file_name)
66 log.setFilename(file_name)
67 end
68
69 local hc = HandlerCollection.new()
70 hc.setHandlers { SessionHandler.new(), handler_wrapper, DefaultHandler.new(), log_handler }
71
72
73 function init(dir)
74 dir = dir.gsub("/$","") -- remove trailing '/' if any
75 Http.dir = dir
76 function Io.schemes.site(path,add_extension)
77 return Io.uri( dir..path, add_extension )
78 end
79 authentication_handler.setPassword(private_password)
80 local base = dir
81 if base.match("^classpath:") ~= nil then
82 base = dir.."#"..welcome_file.."#"..welcome_file..".luan"
83 end
84 resource_handler.setResourceBase(Io.uri(base).to_string())
85 resource_handler.setWelcomeFiles {welcome_file}
86 luan_handler.setWelcomeFile(welcome_file)
87 handlers.addHandler(NotFound.new())
88 server = Server.new(port)
89 server.setHandler(hc)
90 Package.load("site:/init")
91 end
92
93 function start()
94 server.start()
95 end
96
97 function serve(dir)
98 init(dir)
99 start()
100 end