diff src/luan/modules/http/LuanDomainHandler.java @ 1315:5763597ca5c0

add DomainHandler
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 30 Jan 2019 01:21:49 -0700
parents
children 307e76ccd0d6
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/luan/modules/http/LuanDomainHandler.java	Wed Jan 30 01:21:49 2019 -0700
@@ -0,0 +1,41 @@
+package luan.modules.http;
+
+import luan.webserver.Request;
+import luan.webserver.Response;
+import luan.webserver.Handler;
+import luan.webserver.handlers.DomainHandler;
+import luan.LuanState;
+import luan.LuanTable;
+import luan.LuanCloner;
+import luan.LuanException;
+
+
+public final class LuanDomainHandler implements Handler {
+
+	private final LuanState luanInit;
+
+	private final DomainHandler.Factory factory = new DomainHandler.Factory() {
+		public Handler newHandler(String domain) {
+			LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE);
+			LuanState luan = (LuanState)cloner.clone(luanInit);
+			try {
+				LuanTable Http = (LuanTable)luan.require("luan:http/Http.luan");
+				Http.put( "domain", domain );
+			} catch(LuanException e) {
+				throw new RuntimeException(e);
+			}
+			return new LuanHandler(luan,null);
+		}
+	};
+
+	private final DomainHandler domainHandler = new DomainHandler(factory);
+
+	public LuanDomainHandler(LuanState luanInit) {
+		LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE);
+		this.luanInit = (LuanState)cloner.clone(luanInit);
+	}
+
+	@Override public Response handle(Request request) {
+		return domainHandler.handle(request);
+	}
+}