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