Mercurial Hosting > luan
view web/src/luan/modules/web/Server.luan @ 365:7669814ce6f1
Added tag 0.3 for changeset 1a464e090538
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 16 Apr 2015 11:56:27 -0600 |
parents | 612a283b3d14 |
children | a8d03e6882c6 |
line wrap: on
line source
require "luan:String" local Io = require "luan:Io" local Package = require "luan:Package" local Http = require "luan:web/Http" 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" port = 8080 private_password = "password" welcome_file = "index.html" authentication_handler = AuthenticationHandler.new("/private/") luan_handler = Http.new_luan_handler() 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) return Io.Uri( dir..path ) 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) server = Server.new(port) server.setHandler(hc) Package.load("site:/init") end function start() server.start() end function serve(dir) init(dir) start() end