Mercurial Hosting > luan
annotate src/luan/modules/http/Server.luan @ 1347:643cf1c37723
move webserver to lib and bug fixes
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 25 Feb 2019 13:02:33 -0700 |
parents | 5763597ca5c0 |
children | 8d95711f6615 |
rev | line source |
---|---|
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
1 local Luan = require "luan:Luan.luan" |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
2 local error = Luan.error |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
629
diff
changeset
|
3 local String = require "luan:String.luan" |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
4 local gsub = String.gsub or error() |
1162 | 5 local match = String.match or error() |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
6 local matches = String.matches or error() |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
7 local try = Luan.try or error() |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
629
diff
changeset
|
8 local Io = require "luan:Io.luan" |
1315 | 9 local uri = Io.uri or error() |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
629
diff
changeset
|
10 local Package = require "luan:Package.luan" |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
11 local Rpc = require "luan:Rpc.luan" |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
12 local Thread = require "luan:Thread.luan" |
1167 | 13 local Http = require "luan:http/Http.luan" |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
14 local Logging = require "luan:logging/Logging.luan" |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
712
diff
changeset
|
15 local logger = Logging.logger "http/Server" |
174
609c5b3118db
add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
16 |
321
7f7708e8fdd4
remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
320
diff
changeset
|
17 java() |
1347
643cf1c37723
move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents:
1315
diff
changeset
|
18 local JavaServer = require "java:luan.lib.webserver.Server" |
643cf1c37723
move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents:
1315
diff
changeset
|
19 local FileHandler = require "java:luan.lib.webserver.handlers.FileHandler" |
643cf1c37723
move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents:
1315
diff
changeset
|
20 local DirHandler = require "java:luan.lib.webserver.handlers.DirHandler" |
643cf1c37723
move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents:
1315
diff
changeset
|
21 local IndexHandler = require "java:luan.lib.webserver.handlers.IndexHandler" |
643cf1c37723
move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents:
1315
diff
changeset
|
22 local ContentTypeHandler = require "java:luan.lib.webserver.handlers.ContentTypeHandler" |
643cf1c37723
move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents:
1315
diff
changeset
|
23 local SafeHandler = require "java:luan.lib.webserver.handlers.SafeHandler" |
643cf1c37723
move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents:
1315
diff
changeset
|
24 local LogHandler = require "java:luan.lib.webserver.handlers.LogHandler" |
643cf1c37723
move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents:
1315
diff
changeset
|
25 local ListHandler = require "java:luan.lib.webserver.handlers.ListHandler" |
1171 | 26 local LuanHandler = require "java:luan.modules.http.LuanHandler" |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
27 local System = require "java:java.lang.System" |
1160 | 28 |
174
609c5b3118db
add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
29 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1080
diff
changeset
|
30 local Server = {} |
174
609c5b3118db
add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
31 |
1184
2eba58842bbb
remove serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1178
diff
changeset
|
32 function Server.init_dir(dir) |
1256
c147e2e877e3
allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents:
1250
diff
changeset
|
33 if not matches(dir,":") then |
c147e2e877e3
allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents:
1250
diff
changeset
|
34 dir = "file:"..dir |
1162 | 35 end |
1256
c147e2e877e3
allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents:
1250
diff
changeset
|
36 dir = gsub(dir,"/$","") -- remove trailing '/' if any |
c147e2e877e3
allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents:
1250
diff
changeset
|
37 Http.dir = dir |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
629
diff
changeset
|
38 function Io.schemes.site(path) |
1315 | 39 return uri( dir..path ) |
264
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
40 end |
1172 | 41 end |
42 | |
1281 | 43 local function start(server) |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
44 try { |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
45 function() |
1281 | 46 LuanHandler.start(server) |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
47 end |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
48 catch = function(e) |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
49 -- e.java.printStackTrace(); |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
50 Io.print_to(Io.stderr, e ) |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
51 System.exit(-1) |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
52 end |
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
53 } |
1178
49cf706c326a
serve_for_nginx on port 8081
Franklin Schmidt <fschmidt@gmail.com>
parents:
1176
diff
changeset
|
54 end |
1175
d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents:
1173
diff
changeset
|
55 |
1281 | 56 function Server.start_rpc(luan_handler) |
1173 | 57 function Rpc.functions.call(domain,fn_name,...) |
1281 | 58 return luan_handler.call_rpc(fn_name,...) |
1173 | 59 end |
60 Thread.fork(Rpc.serve) | |
61 end | |
62 | |
1242 | 63 function Server.serve(dir,port) |
64 port = port or 8080 | |
1256
c147e2e877e3
allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents:
1250
diff
changeset
|
65 Server.init_dir(dir) |
c147e2e877e3
allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents:
1250
diff
changeset
|
66 local dir_path = match(Http.dir,"^file:(.*)$") or error "server dir must be scheme 'file:'" |
1167 | 67 local file_handler = FileHandler.new(dir_path) |
1168 | 68 local dir_handler = DirHandler.new(file_handler) |
1160 | 69 local luan_handler = LuanHandler.new() |
1250
e55a0c3696fb
webserver checks for file before luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1242
diff
changeset
|
70 local handler = ListHandler.new( file_handler, luan_handler ) |
1160 | 71 handler = IndexHandler.new(handler) |
1314
51a1987b55a3
don't use NotFound handler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1281
diff
changeset
|
72 handler = ListHandler.new( handler, dir_handler ) |
1160 | 73 handler = ContentTypeHandler.new(handler) |
74 handler = SafeHandler.new(handler) | |
75 handler = LogHandler.new(handler) | |
1281 | 76 local server = JavaServer.new(port,handler) |
77 start(server) | |
78 return server, luan_handler | |
174
609c5b3118db
add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
79 end |
503 | 80 |
1315 | 81 function Server.serve_for_proxy(dir,port,LuanHandlerClass) |
1265
3f4644246e39
LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents:
1256
diff
changeset
|
82 port = port or 8080 |
1315 | 83 LuanHandlerClass = LuanHandlerClass or LuanHandler |
1265
3f4644246e39
LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents:
1256
diff
changeset
|
84 Server.init_dir(dir) |
1315 | 85 local luan_handler = LuanHandlerClass.new() |
1281 | 86 local handler = IndexHandler.new(luan_handler) |
1265
3f4644246e39
LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents:
1256
diff
changeset
|
87 handler = ContentTypeHandler.new(handler) |
3f4644246e39
LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents:
1256
diff
changeset
|
88 handler = SafeHandler.new(handler) |
1281 | 89 local server = JavaServer.new(port,handler) |
90 start(server) | |
91 return server, luan_handler | |
1265
3f4644246e39
LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents:
1256
diff
changeset
|
92 end |
3f4644246e39
LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents:
1256
diff
changeset
|
93 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1080
diff
changeset
|
94 return Server |