comparison src/luan/modules/http/Server.luan @ 775:1a68fc55a80c

simplify dir structure
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 26 Aug 2016 14:36:40 -0600
parents http/src/luan/modules/http/Server.luan@3f461f85243d
children fe63c508a177
comparison
equal deleted inserted replaced
774:3e30cf310e56 775:1a68fc55a80c
1 local Luan = require "luan:Luan.luan"
2 local error = Luan.error
3 local String = require "luan:String.luan"
4 local gsub = String.gsub or error()
5 local matches = String.matches or error()
6 local Io = require "luan:Io.luan"
7 local Package = require "luan:Package.luan"
8 local Rpc = require "luan:Rpc.luan"
9 local Thread = require "luan:Thread.luan"
10 local Http = require "luan:http/Http.luan"
11 require "luan:logging/init.luan" -- initialize logging
12 local Logging = require "luan:logging/Logging.luan"
13 local logger = Logging.logger "http/Server"
14
15 java()
16 local Server = require "java:org.eclipse.jetty.server.Server"
17 local NCSARequestLog = require "java:org.eclipse.jetty.server.NCSARequestLog"
18 local DefaultHandler = require "java:org.eclipse.jetty.server.handler.DefaultHandler"
19 local HandlerList = require "java:org.eclipse.jetty.server.handler.HandlerList"
20 local HandlerCollection = require "java:org.eclipse.jetty.server.handler.HandlerCollection"
21 local ResourceHandler = require "java:org.eclipse.jetty.server.handler.ResourceHandler"
22 local RequestLogHandler = require "java:org.eclipse.jetty.server.handler.RequestLogHandler"
23 local ContextHandler = require "java:org.eclipse.jetty.server.handler.ContextHandler"
24 local GzipHandler = require "java:org.eclipse.jetty.server.handler.GzipHandler"
25 local HandlerWrapper = require "java:org.eclipse.jetty.server.handler.HandlerWrapper"
26 local SessionHandler = require "java:org.eclipse.jetty.server.session.SessionHandler"
27 local AuthenticationHandler = require "java:luan.modules.http.AuthenticationHandler"
28 local LuanHandler = require "java:luan.modules.http.LuanHandler"
29 local NotFound = require "java:luan.modules.http.NotFound"
30
31 local M = {}
32
33 M.port = 8080
34
35 M.welcome_file = "index.html"
36
37
38 M.authentication_handler = AuthenticationHandler.new("/private/")
39
40 M.luan_handler = LuanHandler.new()
41
42 M.resource_handler = ResourceHandler.new()
43 M.resource_handler.setDirectoriesListed(true)
44
45 M.handlers = HandlerList.new()
46 M.handlers.setHandlers { M.authentication_handler, M.luan_handler, M.resource_handler }
47
48 function M.add_folder(context,dir)
49 local rh = ResourceHandler.new()
50 rh.setResourceBase(dir)
51 rh.setDirectoriesListed(true)
52 local ch = ContextHandler.new(context)
53 ch.setHandler(rh)
54 M.handlers.addHandler(ch)
55 return rh
56 end
57
58 M.handler_wrapper = HandlerWrapper.new()
59 M.handler_wrapper.setHandler(M.handlers)
60
61 function M.zip()
62 local h = GzipHandler.new()
63 h.setHandler(M.handler_wrapper.getHandler())
64 M.handler_wrapper.setHandler(h)
65 end
66
67 M.log = NCSARequestLog.new()
68 M.log.setExtended(false)
69 M.log_handler = RequestLogHandler.new()
70 M.log_handler.setRequestLog(M.log)
71
72 function M.set_log_file(file_name)
73 M.log.setFilename(file_name)
74 end
75
76 local hc = HandlerCollection.new()
77 hc.setHandlers { SessionHandler.new(), M.handler_wrapper, DefaultHandler.new(), M.log_handler }
78
79
80 function M.init(dir)
81 dir = gsub(dir,"/$","") -- remove trailing '/' if any
82 Http.dir = dir
83 function Io.schemes.site(path)
84 return Io.uri( dir..path )
85 end
86 M.authentication_handler.setPassword(Io.password)
87 local base = dir
88 if matches(base,"^classpath:") then
89 base = dir.."#"..M.welcome_file.."#"..M.welcome_file..".luan"
90 end
91 M.resource_handler.setResourceBase(Io.uri(base).to_string())
92 M.resource_handler.setWelcomeFiles {M.welcome_file}
93 M.luan_handler.setWelcomeFile(M.welcome_file)
94 M.handlers.addHandler(NotFound.new())
95 M.server = Server.new(M.port)
96 M.server.setHandler(hc)
97 Package.load("site:/init.luan")
98 end
99
100 function M.start()
101 M.server.start()
102 end
103
104 function M.start_rpc()
105 function Rpc.functions.call(domain,fn_name,...)
106 return M.luan_handler.call_rpc(fn_name,...)
107 end
108
109 Thread.fork(Rpc.serve)
110 end
111
112 function M.serve(dir)
113 M.init(dir)
114 M.start()
115 M.start_rpc()
116 end
117
118 return M