view src/luan/modules/http/jetty/Server.luan @ 1149:1b7c20e20ca7

remove /private/ authentication
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 04 Feb 2018 17:23:20 -0700
parents d30d400fd43d
children
line wrap: on
line source

local Luan = require "luan:Luan.luan"
local error = Luan.error
local String = require "luan:String.luan"
local gsub = String.gsub or error()
local matches = String.matches or error()
local Io = require "luan:Io.luan"
local Package = require "luan:Package.luan"
local Rpc = require "luan:Rpc.luan"
local Thread = require "luan:Thread.luan"
local Http = require "luan:http/Http.luan"
require "luan:logging/init.luan"  -- initialize logging
local Logging = require "luan:logging/Logging.luan"
local logger = Logging.logger "http/Server"

java()
local TimeZone = require "java:java.util.TimeZone"
local JavaServer = 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.jetty.AuthenticationHandler"
local LuanHandler = require "java:luan.modules.http.jetty.LuanHandler"
local NotFound = require "java:luan.modules.http.jetty.NotFound"

local Server = {}

Server.port = 8080

Server.welcome_file = "index.html"


Server.luan_handler = LuanHandler.new()

Server.resource_handler = ResourceHandler.new()
Server.resource_handler.setDirectoriesListed(true)

Server.handlers = HandlerList.new()
Server.handlers.setHandlers { Server.luan_handler, Server.resource_handler }

function Server.add_folder(context,dir)
	local rh = ResourceHandler.new()
	rh.setResourceBase(dir)
	rh.setDirectoriesListed(true)
	local ch = ContextHandler.new(context)
	ch.setHandler(rh)
	Server.handlers.addHandler(ch)
	return rh
end

Server.handler_wrapper = HandlerWrapper.new()
Server.handler_wrapper.setHandler(Server.handlers)

function Server.zip()
	local h = GzipHandler.new()
	h.setHandler(Server.handler_wrapper.getHandler())
	Server.handler_wrapper.setHandler(h)
end

Server.log = NCSARequestLog.new()
Server.log.setExtended(false)
Server.log.setLogTimeZone(TimeZone.getDefault().getID())
Server.log_handler = RequestLogHandler.new()
Server.log_handler.setRequestLog(Server.log)

function Server.set_log_file(file_name)
	Server.log.setFilename(file_name)
end

local hc = HandlerCollection.new()
hc.setHandlers { SessionHandler.new(), Server.handler_wrapper, DefaultHandler.new(), Server.log_handler }


function Server.init(dir)
	dir = gsub(dir,"/$","")  -- remove trailing '/' if any
	Http.dir = dir
	function Io.schemes.site(path)
		return Io.uri( dir..path )
	end
	local base = dir
	if matches(base,"^classpath:") then
		base = dir.."#"..Server.welcome_file.."#"..Server.welcome_file..".luan"
	end
	Server.resource_handler.setResourceBase(Io.uri(base).to_string())
	Server.resource_handler.setWelcomeFiles {Server.welcome_file}
	Server.luan_handler.setWelcomeFile(Server.welcome_file)
	Server.handlers.addHandler(NotFound.new(Server.luan_handler))
	Server.server = JavaServer.new(Server.port)
	Server.server.setHandler(hc)
end

function Server.start()
	LuanHandler.start(Server.server)
end

function Server.start_rpc()
	function Rpc.functions.call(domain,fn_name,...)
		return Server.luan_handler.call_rpc(fn_name,...)
	end

	Thread.fork(Rpc.serve)
end

function Server.serve(dir)
	Server.init(dir)
	Server.start_rpc()
	Server.start()
end

return Server