Mercurial Hosting > luan
view http/src/luan/modules/http/Server.luan @ 583:1368ca798ccc
add Http.uncache_site
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 31 Jul 2015 19:19:42 -0600 |
parents | 473e456444ff |
children | 35dde32c02ab |
line wrap: on
line source
local String = require "luan:String" local gsub = String.gsub local match = String.match local Io = require "luan:Io" local Package = require "luan:Package" local Http = require "luan:http/Http" require "luan:logging/init" -- 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.http.AuthenticationHandler" local LuanHandler = require "java:luan.modules.http.LuanHandler" local NotFound = require "java:luan.modules.http.NotFound" local M = {} M.port = 8080 M.private_password = "password" M.welcome_file = "index.html" M.authentication_handler = AuthenticationHandler.new("/private/") M.luan_handler = LuanHandler.new() M.resource_handler = ResourceHandler.new() M.resource_handler.setDirectoriesListed(true) M.handlers = HandlerList.new() M.handlers.setHandlers { M.authentication_handler, M.luan_handler, M.resource_handler } function M.add_folder(context,dir) local rh = ResourceHandler.new() rh.setResourceBase(dir) rh.setDirectoriesListed(true) local ch = ContextHandler.new(context) ch.setHandler(rh) M.handlers.addHandler(ch) return rh end M.handler_wrapper = HandlerWrapper.new() M.handler_wrapper.setHandler(M.handlers) function M.zip() local h = GzipHandler.new() h.setHandler(M.handler_wrapper.getHandler()) M.handler_wrapper.setHandler(h) end M.log = NCSARequestLog.new() M.log.setExtended(false) M.log_handler = RequestLogHandler.new() M.log_handler.setRequestLog(M.log) function M.set_log_file(file_name) M.log.setFilename(file_name) end local hc = HandlerCollection.new() hc.setHandlers { SessionHandler.new(), M.handler_wrapper, DefaultHandler.new(), M.log_handler } function M.init(dir) dir = gsub(dir,"/$","") -- remove trailing '/' if any Http.dir = dir function Io.schemes.site(path,add_extension) return Io.uri( dir..path, add_extension ) end M.authentication_handler.setPassword(M.private_password) local base = dir if match(base,"^classpath:") ~= nil then base = dir.."#"..M.welcome_file.."#"..M.welcome_file..".luan" end M.resource_handler.setResourceBase(Io.uri(base).to_string()) M.resource_handler.setWelcomeFiles {M.welcome_file} M.luan_handler.setWelcomeFile(M.welcome_file) M.handlers.addHandler(NotFound.new()) M.server = Server.new(M.port) M.server.setHandler(hc) Package.load("site:/init") end function M.start() M.server.start() end function M.serve(dir) M.init(dir) M.start() end return M