Mercurial Hosting > luan
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 |