view web/src/luan/modules/web/Web_server.luan @ 282:38bd29e59a6e

minor git-svn-id: https://luan-java.googlecode.com/svn/trunk@283 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Wed, 26 Nov 2014 22:25:09 +0000
parents eb27e765affb
children a50e88d3547c
line wrap: on
line source

import "luan:Java"
import "luan:String"
import "luan:Io"
import "luan:Package"
import "luan:web/Http"
import "luan:logging/Logging"  -- initialize logging

import "java:org.eclipse.jetty.server.Server"
import "java:org.eclipse.jetty.server.NCSARequestLog"
import "java:org.eclipse.jetty.server.handler.DefaultHandler"
import "java:org.eclipse.jetty.server.handler.HandlerList"
import "java:org.eclipse.jetty.server.handler.HandlerCollection"
import "java:org.eclipse.jetty.server.handler.ResourceHandler"
import "java:org.eclipse.jetty.server.handler.RequestLogHandler"
import "java:org.eclipse.jetty.server.handler.ContextHandler"
import "java:org.eclipse.jetty.server.handler.GzipHandler"
import "java:org.eclipse.jetty.server.handler.HandlerWrapper"
import "java:org.eclipse.jetty.server.session.SessionHandler"
import "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 }

-- override to config server
function config_server(server)
end 

function serve(dir)
	dir = dir.gsub("/$","")  -- remove trailing '/' if any
	Http.dir = dir
	function Io.schemes.site(path,loading)
		return Io.Uri( dir..path, loading )
	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)
	local server = Server.new(port)
	server.setHandler(hc);
	config_server(server)
	server.start()
end