Mercurial Hosting > luan
diff http/src/luan/modules/web/Server.luan @ 493:1d082a0812e0
move web to http
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 15 May 2015 17:29:59 -0600 |
parents | web/src/luan/modules/web/Server.luan@55a86fc4701b |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/http/src/luan/modules/web/Server.luan Fri May 15 17:29:59 2015 -0600 @@ -0,0 +1,100 @@ +require "luan:String" +local Io = require "luan:Io" +local Package = require "luan:Package" +local Http = require "luan:web/Http" +require "luan:logging/Logging" -- initialize logging + +java() +local Server = require "java:org.eclipse.jetty.server.Server" +local NCSARequestLog = require "java:org.eclipse.jetty.server.NCSARequestLog" +local DefaultHandler = require "java:org.eclipse.jetty.server.handler.DefaultHandler" +local HandlerList = require "java:org.eclipse.jetty.server.handler.HandlerList" +local HandlerCollection = require "java:org.eclipse.jetty.server.handler.HandlerCollection" +local ResourceHandler = require "java:org.eclipse.jetty.server.handler.ResourceHandler" +local RequestLogHandler = require "java:org.eclipse.jetty.server.handler.RequestLogHandler" +local ContextHandler = require "java:org.eclipse.jetty.server.handler.ContextHandler" +local GzipHandler = require "java:org.eclipse.jetty.server.handler.GzipHandler" +local HandlerWrapper = require "java:org.eclipse.jetty.server.handler.HandlerWrapper" +local SessionHandler = require "java:org.eclipse.jetty.server.session.SessionHandler" +local AuthenticationHandler = require "java:luan.modules.web.AuthenticationHandler" +local LuanHandler = require "java:luan.modules.web.LuanHandler" +local NotFound = require "java:luan.modules.web.NotFound" + + +port = 8080 + +private_password = "password" + +welcome_file = "index.html" + + +authentication_handler = AuthenticationHandler.new("/private/") + +luan_handler = LuanHandler.new() + +resource_handler = ResourceHandler.new() +resource_handler.setDirectoriesListed(true) + +handlers = HandlerList.new() +handlers.setHandlers { authentication_handler, luan_handler, resource_handler } + +function add_folder(context,dir) + local rh = ResourceHandler.new() + rh.setResourceBase(dir) + rh.setDirectoriesListed(true) + local ch = ContextHandler.new(context) + ch.setHandler(rh) + handlers.addHandler(ch) + return rh +end + +handler_wrapper = HandlerWrapper.new() +handler_wrapper.setHandler(handlers) + +function zip() + local h = GzipHandler.new() + h.setHandler(handler_wrapper.getHandler()) + handler_wrapper.setHandler(h) +end + +log = NCSARequestLog.new() +log.setExtended(false) +log_handler = RequestLogHandler.new() +log_handler.setRequestLog(log) + +function set_log_file(file_name) + log.setFilename(file_name) +end + +local hc = HandlerCollection.new() +hc.setHandlers { SessionHandler.new(), handler_wrapper, DefaultHandler.new(), log_handler } + + +function init(dir) + dir = dir.gsub("/$","") -- remove trailing '/' if any + Http.dir = dir + function Io.schemes.site(path,add_extension) + return Io.uri( dir..path, add_extension ) + end + authentication_handler.setPassword(private_password) + local base = dir + if base.match("^classpath:") ~= nil then + base = dir.."#"..welcome_file.."#"..welcome_file..".luan" + end + resource_handler.setResourceBase(Io.uri(base).to_string()) + resource_handler.setWelcomeFiles {welcome_file} + luan_handler.setWelcomeFile(welcome_file) + handlers.addHandler(NotFound.new()) + server = Server.new(port) + server.setHandler(hc) + Package.load("site:/init") +end + +function start() + server.start() +end + +function serve(dir) + init(dir) + start() +end