annotate web/src/luan/modules/web/Web_server.luan @ 231:a35417bf493a

minor git-svn-id: https://luan-java.googlecode.com/svn/trunk@232 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Wed, 01 Oct 2014 02:15:39 +0000
parents f9e3e64132e1
children 2b6f51d7af40
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
174
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
1 import "Java"
195
24ede40ee0aa make MetatableGetter DeepCloneable, scoped, and secure
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 190
diff changeset
2 import "String"
190
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 188
diff changeset
3 import "Io"
186
cf939124461a don't import modules by default
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 183
diff changeset
4 import "Package"
cf939124461a don't import modules by default
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 183
diff changeset
5 import "web/Http"
174
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
6
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
7 import "org.eclipse.jetty.server.Server"
181
5d2cb8c1f844 add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 175
diff changeset
8 import "org.eclipse.jetty.server.NCSARequestLog"
174
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
9 import "org.eclipse.jetty.server.handler.DefaultHandler"
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
10 import "org.eclipse.jetty.server.handler.HandlerList"
181
5d2cb8c1f844 add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 175
diff changeset
11 import "org.eclipse.jetty.server.handler.HandlerCollection"
174
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
12 import "org.eclipse.jetty.server.handler.ResourceHandler"
181
5d2cb8c1f844 add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 175
diff changeset
13 import "org.eclipse.jetty.server.handler.RequestLogHandler"
182
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
14 import "org.eclipse.jetty.server.handler.ContextHandler"
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
15 import "org.eclipse.jetty.server.handler.GzipHandler"
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
16 import "org.eclipse.jetty.server.handler.HandlerWrapper"
175
bdbd4740121f finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 174
diff changeset
17 import "org.eclipse.jetty.server.session.SessionHandler"
188
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 186
diff changeset
18 import "luan.modules.web.AuthenticationHandler"
174
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
19
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
20
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
21 port = 8080
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
22
188
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 186
diff changeset
23 private_password = "password"
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 186
diff changeset
24
183
ed19d14360fa add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 182
diff changeset
25 welcome_file = "index.html"
ed19d14360fa add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 182
diff changeset
26
174
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
27
188
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 186
diff changeset
28 authentication_handler = AuthenticationHandler.new("/private/")
175
bdbd4740121f finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 174
diff changeset
29
bdbd4740121f finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 174
diff changeset
30 luan_handler = Http.new_luan_handler()
bdbd4740121f finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 174
diff changeset
31
181
5d2cb8c1f844 add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 175
diff changeset
32 resource_handler = ResourceHandler.new()
198
390210409719 minor - allow web dir listings
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
33 resource_handler.setDirectoriesListed(true)
181
5d2cb8c1f844 add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 175
diff changeset
34
174
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
35 handlers = HandlerList.new()
188
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 186
diff changeset
36 handlers.setHandlers { authentication_handler, luan_handler, resource_handler }
182
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
37
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
38 function add_folder(context,dir)
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
39 local rh = ResourceHandler.new()
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
40 rh.setResourceBase(dir)
207
5aafb5b9f70f various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 204
diff changeset
41 rh.setDirectoriesListed(true)
182
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
42 local ch = ContextHandler.new(context)
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
43 ch.setHandler(rh)
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
44 handlers.addHandler(ch)
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
45 return rh
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
46 end
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
47
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
48 handler_wrapper = HandlerWrapper.new()
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
49 handler_wrapper.setHandler(handlers)
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
50
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
51 function zip()
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
52 local h = GzipHandler.new()
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
53 h.setHandler(handler_wrapper.getHandler())
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
54 handler_wrapper.setHandler(h)
e6d6596a8bcc improve Web_server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 181
diff changeset
55 end
181
5d2cb8c1f844 add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 175
diff changeset
56
5d2cb8c1f844 add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 175
diff changeset
57 log = NCSARequestLog.new()
5d2cb8c1f844 add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 175
diff changeset
58 log.setExtended(false)
5d2cb8c1f844 add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 175
diff changeset
59 log_handler = RequestLogHandler.new()
5d2cb8c1f844 add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 175
diff changeset
60 log_handler.setRequestLog(log)
5d2cb8c1f844 add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 175
diff changeset
61
207
5aafb5b9f70f various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 204
diff changeset
62 function set_log_file(file_name)
5aafb5b9f70f various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 204
diff changeset
63 log.setFilename(file_name)
5aafb5b9f70f various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 204
diff changeset
64 end
5aafb5b9f70f various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 204
diff changeset
65
181
5d2cb8c1f844 add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 175
diff changeset
66 local hc = HandlerCollection.new()
188
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 186
diff changeset
67 hc.setHandlers { SessionHandler.new(), handler_wrapper, DefaultHandler.new(), log_handler }
174
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
68
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
69
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
70 function serve(dir)
175
bdbd4740121f finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 174
diff changeset
71 dir = dir.gsub("/$","") -- remove trailing '/' if any
204
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 198
diff changeset
72 Http.dir = dir
231
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 219
diff changeset
73 Package.path = dir .. "?.luan;java:luan/modules/?.luan"
188
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 186
diff changeset
74 authentication_handler.setPassword(private_password)
219
f9e3e64132e1 improve rev 217, allow "java:" paths to include sample files to check in jars
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 216
diff changeset
75 local base = dir
f9e3e64132e1 improve rev 217, allow "java:" paths to include sample files to check in jars
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 216
diff changeset
76 if base.match("^java:") ~= nil then
f9e3e64132e1 improve rev 217, allow "java:" paths to include sample files to check in jars
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 216
diff changeset
77 base = dir.."#"..welcome_file.."#"..welcome_file..".luan"
f9e3e64132e1 improve rev 217, allow "java:" paths to include sample files to check in jars
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 216
diff changeset
78 end
f9e3e64132e1 improve rev 217, allow "java:" paths to include sample files to check in jars
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 216
diff changeset
79 resource_handler.setResourceBase(Io.File(base).to_string())
183
ed19d14360fa add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 182
diff changeset
80 resource_handler.setWelcomeFiles {welcome_file}
ed19d14360fa add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 182
diff changeset
81 luan_handler.setWelcomeFile(welcome_file)
174
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
82 local server = Server.new(port)
181
5d2cb8c1f844 add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 175
diff changeset
83 server.setHandler(hc);
174
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
84 server.start()
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
85 end