annotate src/luan/modules/http/Server.luan @ 1358:1d31c1f3ea30

better not_found_handler
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 19 Apr 2019 00:47:58 -0600
parents 70a7eb76ee2c
children 27efb1fcbcb5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
Franklin Schmidt <fschmidt@gmail.com>
parents: 1160
diff changeset
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
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents: 1314
diff changeset
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
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1162
diff changeset
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
1353
8d95711f6615 replace java() with require "java"
Franklin Schmidt <fschmidt@gmail.com>
parents: 1347
diff changeset
17 require "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
794ddcfbee20 remove http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1168
diff changeset
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"
1358
1d31c1f3ea30 better not_found_handler
Franklin Schmidt <fschmidt@gmail.com>
parents: 1357
diff changeset
28 local NotFound = require "java:luan.modules.http.NotFound"
1160
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1149
diff changeset
29
174
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
30
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1080
diff changeset
31 local Server = {}
174
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
32
1184
2eba58842bbb remove serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents: 1178
diff changeset
33 function Server.init_dir(dir)
1256
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1250
diff changeset
34 if not matches(dir,":") then
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1250
diff changeset
35 dir = "file:"..dir
1162
Franklin Schmidt <fschmidt@gmail.com>
parents: 1160
diff changeset
36 end
1256
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1250
diff changeset
37 dir = gsub(dir,"/$","") -- remove trailing '/' if any
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1250
diff changeset
38 Http.dir = dir
693
ca169567ce07 module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents: 629
diff changeset
39 function Io.schemes.site(path)
1315
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents: 1314
diff changeset
40 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
41 end
1172
1aa6dd74f3fc add serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents: 1171
diff changeset
42 end
1aa6dd74f3fc add serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents: 1171
diff changeset
43
1357
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
44 function Server.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
45 try {
d6d0bd05ad8c exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents: 1173
diff changeset
46 function()
1281
7fc83fd2a39a http/Server cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1265
diff changeset
47 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
48 end
d6d0bd05ad8c exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents: 1173
diff changeset
49 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
50 -- 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
51 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
52 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
53 end
d6d0bd05ad8c exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
Franklin Schmidt <fschmidt@gmail.com>
parents: 1173
diff changeset
54 }
1178
49cf706c326a serve_for_nginx on port 8081
Franklin Schmidt <fschmidt@gmail.com>
parents: 1176
diff changeset
55 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
56
1281
7fc83fd2a39a http/Server cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1265
diff changeset
57 function Server.start_rpc(luan_handler)
1173
Franklin Schmidt <fschmidt@gmail.com>
parents: 1172
diff changeset
58 function Rpc.functions.call(domain,fn_name,...)
1281
7fc83fd2a39a http/Server cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1265
diff changeset
59 return luan_handler.call_rpc(fn_name,...)
1173
Franklin Schmidt <fschmidt@gmail.com>
parents: 1172
diff changeset
60 end
Franklin Schmidt <fschmidt@gmail.com>
parents: 1172
diff changeset
61 Thread.fork(Rpc.serve)
Franklin Schmidt <fschmidt@gmail.com>
parents: 1172
diff changeset
62 end
Franklin Schmidt <fschmidt@gmail.com>
parents: 1172
diff changeset
63
1242
Franklin Schmidt <fschmidt@gmail.com>
parents: 1201
diff changeset
64 function Server.serve(dir,port)
Franklin Schmidt <fschmidt@gmail.com>
parents: 1201
diff changeset
65 port = port or 8080
1256
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1250
diff changeset
66 Server.init_dir(dir)
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1250
diff changeset
67 local dir_path = match(Http.dir,"^file:(.*)$") or error "server dir must be scheme 'file:'"
1167
7e6f28c769a1 better handlers
Franklin Schmidt <fschmidt@gmail.com>
parents: 1162
diff changeset
68 local file_handler = FileHandler.new(dir_path)
1168
Franklin Schmidt <fschmidt@gmail.com>
parents: 1167
diff changeset
69 local dir_handler = DirHandler.new(file_handler)
1160
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1149
diff changeset
70 local luan_handler = LuanHandler.new()
1358
1d31c1f3ea30 better not_found_handler
Franklin Schmidt <fschmidt@gmail.com>
parents: 1357
diff changeset
71 local not_found_hander = NotFound.new(luan_handler)
1250
e55a0c3696fb webserver checks for file before luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
72 local handler = ListHandler.new( file_handler, luan_handler )
1160
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1149
diff changeset
73 handler = IndexHandler.new(handler)
1358
1d31c1f3ea30 better not_found_handler
Franklin Schmidt <fschmidt@gmail.com>
parents: 1357
diff changeset
74 handler = ListHandler.new( handler, dir_handler, not_found_hander )
1160
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1149
diff changeset
75 handler = ContentTypeHandler.new(handler)
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1149
diff changeset
76 handler = SafeHandler.new(handler)
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1149
diff changeset
77 handler = LogHandler.new(handler)
1281
7fc83fd2a39a http/Server cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1265
diff changeset
78 local server = JavaServer.new(port,handler)
1357
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
79 Server.start(server)
1281
7fc83fd2a39a http/Server cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1265
diff changeset
80 return server, luan_handler
174
609c5b3118db add Web_server.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
81 end
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 494
diff changeset
82
1315
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents: 1314
diff changeset
83 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
84 port = port or 8080
1315
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents: 1314
diff changeset
85 LuanHandlerClass = LuanHandlerClass or LuanHandler
1265
3f4644246e39 LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents: 1256
diff changeset
86 Server.init_dir(dir)
1315
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents: 1314
diff changeset
87 local luan_handler = LuanHandlerClass.new()
1281
7fc83fd2a39a http/Server cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1265
diff changeset
88 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
89 handler = ContentTypeHandler.new(handler)
3f4644246e39 LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents: 1256
diff changeset
90 handler = SafeHandler.new(handler)
1281
7fc83fd2a39a http/Server cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1265
diff changeset
91 local server = JavaServer.new(port,handler)
1357
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
92 Server.start(server)
1281
7fc83fd2a39a http/Server cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1265
diff changeset
93 return server, luan_handler
1265
3f4644246e39 LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents: 1256
diff changeset
94 end
3f4644246e39 LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents: 1256
diff changeset
95
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1080
diff changeset
96 return Server