Mercurial Hosting > luan
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 |
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
04b86428dc50
minor
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
cee6581b6f56
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
198
diff
changeset
|
72 Http.dir = dir |
231
a35417bf493a
minor
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 |