Package railo.runtime.config

Source Code of railo.runtime.config.ConfigWebImpl

package railo.runtime.config;

import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import java.util.Map;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.collections.map.ReferenceMap;
import org.xml.sax.SAXException;

import railo.commons.io.SystemUtil;
import railo.commons.io.log.Log;
import railo.commons.io.log.LogAndSource;
import railo.commons.io.log.LogAndSourceImpl;
import railo.commons.io.log.LogConsole;
import railo.commons.io.res.Resource;
import railo.commons.io.res.ResourceProvider;
import railo.commons.io.res.ResourcesImpl;
import railo.commons.lang.ClassException;
import railo.commons.lang.StringUtil;
import railo.commons.lock.KeyLock;
import railo.runtime.CFMLFactoryImpl;
import railo.runtime.Mapping;
import railo.runtime.MappingImpl;
import railo.runtime.Page;
import railo.runtime.PageContext;
import railo.runtime.PageSourceImpl;
import railo.runtime.cfx.CFXTagPool;
import railo.runtime.compiler.CFMLCompilerImpl;
import railo.runtime.debug.DebuggerPool;
import railo.runtime.engine.ThreadQueueImpl;
import railo.runtime.exp.ExpressionException;
import railo.runtime.exp.PageException;
import railo.runtime.exp.SecurityException;
import railo.runtime.gateway.GatewayEngineImpl;
import railo.runtime.gateway.GatewayEntry;
import railo.runtime.lock.LockManager;
import railo.runtime.lock.LockManagerImpl;
import railo.runtime.monitor.ActionMonitorCollector;
import railo.runtime.monitor.IntervallMonitor;
import railo.runtime.monitor.RequestMonitor;
import railo.runtime.net.http.ReqRspUtil;
import railo.runtime.security.SecurityManager;
import railo.runtime.security.SecurityManagerImpl;
import railo.runtime.tag.TagHandlerPool;
import railo.runtime.type.scope.Cluster;
import railo.runtime.writer.CFMLWriter;
import railo.runtime.writer.CFMLWriterImpl;
import railo.runtime.writer.CFMLWriterWS;
import railo.runtime.writer.CFMLWriterWSPref;
import railo.transformer.library.function.FunctionLibException;
import railo.transformer.library.tag.TagLibException;

/**
* Web Context
*/
public final class ConfigWebImpl extends ConfigImpl implements ServletConfig, ConfigWeb {
   
    private ServletConfig config;
    private ConfigServerImpl configServer;
    private SecurityManager securityManager;
    private static final LockManager lockManager= LockManagerImpl.getInstance(false);
  private Resource rootDir;
    private CFMLCompilerImpl compiler=new CFMLCompilerImpl();
    private Page baseComponentPage;
  private MappingImpl serverTagMapping;
  private MappingImpl serverFunctionMapping;
  private KeyLock<String> contextLock;
  private GatewayEngineImpl gatewayEngine;
    private LogAndSource gatewayLogger=null;//new LogAndSourceImpl(LogConsole.getInstance(Log.LEVEL_INFO),"");private DebuggerPool debuggerPool;
    private DebuggerPool debuggerPool;
   
   

    //private File deployDirectory;

    /**
     * constructor of the class
     * @param configServer
     * @param config
     * @param configDir
     * @param configFile
     * @param cloneServer
     */
    protected ConfigWebImpl(CFMLFactoryImpl factory,ConfigServerImpl configServer, ServletConfig config, Resource configDir, Resource configFile) {
      super(factory,configDir, configFile,configServer.getTLDs(),configServer.getFLDs());
      this.configServer=configServer;
        this.config=config;
        factory.setConfig(this);
      ResourceProvider frp = ResourcesImpl.getFileResourceProvider();
       
        this.rootDir=frp.getResource(ReqRspUtil.getRootPath(config.getServletContext()));
       
       
        // Fix for tomcat
        if(this.rootDir.getName().equals(".") || this.rootDir.getName().equals(".."))
          this.rootDir=this.rootDir.getParentResource();
    }
   
    public void reset() {
      super.reset();
      tagHandlerPool.reset();
      contextLock=null;
      baseComponentPage=null;
    }
   
    /* *
     * Constructor of the class, used for configserver dummy instance
     * @param factory
     * @param configServer
     * @param configx
     * @param configDir
     * @param configFile
     * /
    protected ConfigWebImpl(CFMLFactoryImpl factory,ConfigServerImpl configServer, Resource configDir, Resource configFile,Resource rootDir) {
      super(factory,configDir, configFile,configServer.getTLDs(),configServer.getFLDs());
      this.configServer=configServer;
        factory.setConfig(this);
     
        this.rootDir=rootDir;
       
        // Fix for tomcat
        if(this.rootDir.getName().equals(".") || this.rootDir.getName().equals(".."))
          this.rootDir=this.rootDir.getParentResource();
    }*/
   
   

    @Override
    public String getServletName() {
        return config.getServletName();
    }

    @Override
    public ServletContext getServletContext() {
        return config.getServletContext();
    }

    @Override
    public String getInitParameter(String name) {
        return config.getInitParameter(name);
    }

    @Override
    public Enumeration getInitParameterNames() {
        return config.getInitParameterNames();
    }

    protected ConfigServerImpl getConfigServerImpl() {
        return configServer;
    }
   
    @Override
    public ConfigServer getConfigServer(String password) throws ExpressionException {
        configServer.checkAccess(password);
      return configServer;
    }
   
    // FUTURE add to public interface
    public ConfigServer getConfigServer(String key, long timeNonce) throws PageException {
      configServer.checkAccess(key,timeNonce);
      return configServer;
    }
   
    public String getServerId() {
        return configServer.getId();
    }
   
    public String getServerIdPro() {
        return configServer.getIdPro();
    }

    public String getServerSecurityKey() {
        return configServer.getSecurityKey();
    }
   
    public Resource getServerConfigDir() {
        return configServer.getConfigDir();
    }
   

    /**
     * @return Returns the accessor.
     */
    public SecurityManager getSecurityManager() {
        return securityManager;
    }

    /**
     * @param securityManager The accessor to set.
     */
    protected void setSecurityManager(SecurityManager securityManager) {
      ((SecurityManagerImpl)securityManager).setRootDirectory(getRootDirectory());
        this.securityManager = securityManager;
    }
   
    @Override
    public CFXTagPool getCFXTagPool() throws SecurityException {
        if(securityManager.getAccess(SecurityManager.TYPE_CFX_USAGE)==SecurityManager.VALUE_YES) return super.getCFXTagPool();
        throw new SecurityException("no access to cfx functionality", "disabled by security settings");
    }

    /**
     * @return Returns the rootDir.
     */
    public Resource getRootDirectory() {
        return rootDir;
    }

    @Override
    public String getUpdateType() {
        return configServer.getUpdateType();
    }

    @Override
    public URL getUpdateLocation() {
        return configServer.getUpdateLocation();
    }

    @Override
    public LockManager getLockManager() {
        return lockManager;
    }

  /**
   * @return the compiler
   */
  public CFMLCompilerImpl getCompiler() {
    return compiler;
  }
 
   public Page getBaseComponentPage(PageContext pc) throws PageException {
          if(baseComponentPage==null) {
              baseComponentPage=((PageSourceImpl)getBaseComponentPageSource(pc)).loadPage(pc);
       
          }
          return baseComponentPage;
      }
      public void resetBaseComponentPage() {
          baseComponentPage=null;
      }
     


   

      public Mapping getServerTagMapping() {
        if(serverTagMapping==null){
          serverTagMapping=getConfigServerImpl().tagMapping.cloneReadOnly(this);
        }
      return serverTagMapping;
    }
      public Mapping getServerFunctionMapping() {
        if(serverFunctionMapping==null){
          serverFunctionMapping=getConfigServerImpl().functionMapping.cloneReadOnly(this);
        }
      return serverFunctionMapping;
    }
      private Map<String,Mapping> applicationMappings=new ReferenceMap();
    private TagHandlerPool tagHandlerPool=new TagHandlerPool(this);
    public Mapping getApplicationMapping(String virtual, String physical) {
      return getApplicationMapping(virtual, physical, null);
    }
   
    public Mapping getApplicationMapping(String virtual, String physical, String archive) {
      String key=virtual.toLowerCase()+physical.toLowerCase();
      Mapping m= applicationMappings.get(key);
      if(m==null){
        m=new MappingImpl(this,
          virtual,
          physical,
          archive,ConfigImpl.INSPECT_UNDEFINED,true,false,false,false,true,false,null
          );
        applicationMappings.put(key, m);
      }
      return m;
    }

    public String getLabel() {
      String hash=getHash();
      String label=hash;
      Map<String, String> labels = configServer.getLabels();
      if(labels!=null) {
        String l = labels.get(hash);
        if(!StringUtil.isEmpty(l)) {
          label=l;
        }
      }
      return label;
    }
   
    public String getHash() {
      return SystemUtil.hash(getServletContext());
    }

    public KeyLock<String> getContextLock() {
      if(contextLock==null) {
        contextLock=new KeyLock<String>();
      }
      return contextLock;
    }


    protected void setGatewayEntries(Map<String, GatewayEntry> gatewayEntries) {
      try {
        getGatewayEngine().addEntries(this,gatewayEntries);
      } catch (Exception e) {
        e.printStackTrace();
     
    }
    public GatewayEngineImpl getGatewayEngine() {
      if(gatewayEngine==null){
        gatewayEngine=new GatewayEngineImpl(this);
      }
      return gatewayEngine;
    }
    public void setGatewayEngine(GatewayEngineImpl gatewayEngine) {
      this.gatewayEngine=gatewayEngine;
    }

      public LogAndSource getGatewayLogger() {
        if(gatewayLogger==null)gatewayLogger=new LogAndSourceImpl(LogConsole.getInstance(this,Log.LEVEL_ERROR),"");
      return gatewayLogger;
      }


      public void setGatewayLogger(LogAndSource gatewayLogger) {
        this.gatewayLogger=gatewayLogger;
      }

    public TagHandlerPool getTagHandlerPool() {
      return tagHandlerPool;
    }

    public DebuggerPool getDebuggerPool() {
      if(debuggerPool==null){
        Resource dir = getConfigDir().getRealResource("debugger");
        dir.mkdirs();
        debuggerPool=new DebuggerPool(dir);
      }
      return debuggerPool;
    }
   

    public ThreadQueueImpl getThreadQueue() {
      return configServer.getThreadQueue();
    }

    @Override
    public int getLoginDelay() {
      return configServer.getLoginDelay();
    }

    @Override
    public boolean getLoginCaptcha() {
      return configServer.getLoginCaptcha();
    }
   
    @Override
    public Resource getSecurityDirectory(){
      return configServer.getSecurityDirectory();
    }
   
    @Override
    public boolean isMonitoringEnabled(){
      return configServer.isMonitoringEnabled();
    }
   

   
    public RequestMonitor[] getRequestMonitors(){
      return configServer.getRequestMonitors();
    }
   
    public RequestMonitor getRequestMonitor(String name) throws PageException{
      return configServer.getRequestMonitor(name);
    }
   
    public IntervallMonitor[] getIntervallMonitors(){
      return configServer.getIntervallMonitors();
    }

    public IntervallMonitor getIntervallMonitor(String name) throws PageException{
      return configServer.getIntervallMonitor(name);
    }
   
    @Override
    public void checkPermGenSpace(boolean check) {
      configServer.checkPermGenSpace(check);
    }

    @Override
    public Cluster createClusterScope() throws PageException {
      return configServer.createClusterScope();
    }

    @Override
    public boolean hasServerPassword() {
      return configServer.hasPassword();
    }
   
    public void setPassword(boolean server, String passwordOld, String passwordNew, boolean oldPasswordIsHashed, boolean newPasswordIsHashed)
      throws PageException, SAXException, ClassException, IOException, TagLibException, FunctionLibException {
        ConfigImpl config=server?configServer:this;
        if(!oldPasswordIsHashed)passwordOld=ConfigWebFactory.hash(passwordOld);
        if(!newPasswordIsHashed)passwordNew=ConfigWebFactory.hash(passwordNew);
       
        if(!config.hasPassword()) {
          config.setPassword(passwordNew);
           
            ConfigWebAdmin admin = ConfigWebAdmin.newInstance(config,passwordNew);
            admin.setPassword(passwordNew);
            admin.store();
        }
        else {
          ConfigWebUtil.checkGeneralWriteAccess(config,passwordOld);
          ConfigWebAdmin admin = ConfigWebAdmin.newInstance(config,passwordOld);
            admin.setPassword(passwordNew);
            admin.store();
        }
    }

    @Override
    public Resource getConfigServerDir() {
      return configServer.getConfigDir();
    }

    public Map<String, String> getAllLabels() {
      return configServer.getLabels();
    }

    @Override
    public boolean allowRequestTimeout() {
      return configServer.allowRequestTimeout();
    }
   
    public CFMLWriter getCFMLWriter(HttpServletRequest req, HttpServletResponse rsp) {
      // FUTURE  move interface CFMLWriter to Loader and load dynaicly from railo-web.xml
          if(writerType==CFML_WRITER_WS)
              return new CFMLWriterWS    (req,rsp,-1,false,closeConnection(),isShowVersion(),contentLength(),allowCompression());
          else if(writerType==CFML_WRITER_REFULAR)
              return new CFMLWriterImpl      (req,rsp,-1,false,closeConnection(),isShowVersion(),contentLength(),allowCompression());
          else
              return new CFMLWriterWSPref  (req,rsp,-1,false,closeConnection(),isShowVersion(),contentLength(),allowCompression());
      }

   
    public ActionMonitorCollector getActionMonitorCollector() {
      return configServer.getActionMonitorCollector();
    }

    @Override
    public boolean getFullNullSupport() {
      return configServer.getFullNullSupport();
    }
    public boolean hasIndividualSecurityManager() {
      return configServer.hasIndividualSecurityManager(getId());
      }
    public String getServerApiKey() {
      return configServer.getApiKey();
      }
}
TOP

Related Classes of railo.runtime.config.ConfigWebImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.