
io.lightlink.core.ScriptRunner Maven / Gradle / Ivy
package io.lightlink.core;
/*
* #%L
* lightlink-core
* %%
* Copyright (C) 2015 Vitaliy Shevchuk
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Lesser Public License for more details.
*
* You should have received a copy of the GNU General Lesser Public
* License along with this program. If not, see
* .
* #L%
*/
import io.lightlink.config.ConfigManager;
import io.lightlink.config.Script;
import io.lightlink.facades.ResponseFacade;
import io.lightlink.facades.SQLFacade;
import io.lightlink.facades.ServletEnv;
import io.lightlink.facades.TxFacade;
import io.lightlink.output.ResponseStream;
import io.lightlink.security.CSRFTokensContainer;
import io.lightlink.translator.ScriptTranslator;
import io.lightlink.utils.LogUtils;
import io.lightlink.utils.Utils;
import jdk.nashorn.api.scripting.JSObject;
import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Enumeration;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class ScriptRunner {
HttpServletResponse response;
ConfigManager cm;
HttpServletRequest request;
private ServletContext servletContext;
public static final Object DEBUG_FILE_ACCESS_LOCK = new Object();
public ScriptRunner(String rootPackage) {
cm = new ConfigManager(rootPackage);
}
public ScriptRunner() {
cm = new ConfigManager();
}
public ScriptRunner(HttpServletRequest request) {
servletContext = request.getServletContext();
cm = new ConfigManager(servletContext);
this.request = request;
}
public ScriptRunner(String rootPackage, HttpServletRequest request, HttpServletResponse resp) {
servletContext = request.getServletContext();
cm = new ConfigManager(rootPackage, servletContext);
this.request = request;
this.response = resp;
}
public ScriptRunner(String rootPackage, ServletContext servletContext) {
this.servletContext = servletContext;
cm = new ConfigManager(rootPackage, servletContext);
}
public void execute(String action, String method, Map inputParams, ResponseStream responseStream) throws IOException {
ScriptEngine engine = ConfigManager.getScriptEngine();
ScriptContext context = engine.getContext();
RunnerContext runnerContext = new RunnerContext(responseStream, engine);
runnerContext.setCsrfToken(CSRFTokensContainer.getToken(inputParams));
ResponseFacade responseFacade = runnerContext.getResponseFacade();
SQLFacade sqlFacade = runnerContext.getRootSQLFacade();
TxFacade txFacade = runnerContext.getTxFacade();
Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.put("response", responseFacade);
bindings.put("env", new ServletEnv(response, request));
bindings.put("sql", sqlFacade);
bindings.put("tx", runnerContext.getTxFacade());
bindings.put("types", runnerContext.getTypesFacade());
runnerContext.setParams(inputParams);
PrintWriter printWriter = new PrintWriter(System.err);
context.setWriter(printWriter);
context.setAttribute(ScriptTranslator.SQL_CONTAINER_VARIABLE, "", ScriptContext.ENGINE_SCOPE);
boolean success;
List