Package railo.runtime.type.scope

Source Code of railo.runtime.type.scope.CGIImpl

package railo.runtime.type.scope;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Enumeration;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import railo.commons.io.res.util.ResourceUtil;
import railo.commons.lang.StringUtil;
import railo.runtime.PageContext;
import railo.runtime.config.NullSupportHelper;
import railo.runtime.dump.DumpData;
import railo.runtime.dump.DumpProperties;
import railo.runtime.listener.ApplicationContext;
import railo.runtime.net.http.ReqRspUtil;
import railo.runtime.op.Caster;
import railo.runtime.security.ScriptProtect;
import railo.runtime.type.Collection;
import railo.runtime.type.KeyImpl;
import railo.runtime.type.ReadOnlyStruct;
import railo.runtime.type.Struct;
import railo.runtime.type.StructImpl;
import railo.runtime.type.it.EntryIterator;
import railo.runtime.type.it.KeyIterator;
import railo.runtime.type.it.StringIterator;
import railo.runtime.type.util.KeyConstants;
import railo.runtime.type.util.StructUtil;

/**
*
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public final class CGIImpl extends ReadOnlyStruct implements CGI,ScriptProtected {
 
  private static final long serialVersionUID = 5219795840777155232L;

  private static final Collection.Key[] keys={
    KeyConstants._auth_password, KeyConstants._auth_type, KeyConstants._auth_user, KeyConstants._cert_cookie, KeyConstants._cert_flags,
    KeyConstants._cert_issuer, KeyConstants._cert_keysize, KeyConstants._cert_secretkeysize, KeyConstants._cert_serialnumber,
    KeyConstants._cert_server_issuer, KeyConstants._cert_server_subject, KeyConstants._cert_subject,KeyConstants._cf_template_path,
    KeyConstants._content_length, KeyConstants._content_type, KeyConstants._gateway_interface, KeyConstants._http_accept,
    KeyConstants._http_accept_encoding, KeyConstants._http_accept_language, KeyConstants._http_connection, KeyConstants._http_cookie,
    KeyConstants._http_host, KeyConstants._http_user_agent, KeyConstants._http_referer, KeyConstants._https, KeyConstants._https_keysize,
    KeyConstants._https_secretkeysize, KeyConstants._https_server_issuer, KeyConstants._https_server_subject, KeyConstants._path_info,
    KeyConstants._path_translated, KeyConstants._query_string, KeyConstants._remote_addr, KeyConstants._remote_host, KeyConstants._remote_user,
    KeyConstants._request_method, KeyConstants._request_url, KeyConstants._script_name, KeyConstants._server_name, KeyConstants._server_port, KeyConstants._server_port_secure,
    KeyConstants._server_protocol, KeyConstants._server_software, KeyConstants._web_server_api, KeyConstants._context_path, KeyConstants._local_addr,
    KeyConstants._local_host
  };
  private static Struct staticKeys=new StructImpl();
  static{
    for(int i=0;i<keys.length;i++){
      staticKeys.setEL(keys[i],"");
    }
  }
 
  private static String localAddress="";
  private static String localHost="";
 
  static {
    try {
      InetAddress addr = InetAddress.getLocalHost();
      localAddress=addr.getHostAddress();
      localHost=addr.getHostName();
    }
    catch(UnknownHostException uhe) {}
  }
 
  private HttpServletRequest req;
  private boolean isInit;
  //private String strBaseFile="fsfd";
  private PageContext pc;
  private Struct https;
  private Struct headers;
  private int scriptProtected;
 
 
  public CGIImpl(){
    this.setReadOnly(true);
  }
 

  @Override
  public boolean containsKey(Key key) {
    return staticKeys.containsKey(key);
  }
 
  @Override
  public boolean containsValue(Object value) {
    // TODO Auto-generated method stub
    return super.containsValue(value);
  }
  @Override
  public Collection duplicate(boolean deepCopy) {
    Struct sct=new StructImpl();
    copy(this,sct,deepCopy);
    return sct;
  }
 
 
  @Override
  public int size() {
    return keys.length;
  }

  public Collection.Key[] keys() {
    return keys;
  }
 
  @Override
  public Object get(Collection.Key key, Object defaultValue) {
   
    if(req==null) {
      req=pc.getHttpServletRequest();
      https=new StructImpl();
      headers=new StructImpl();
      String k,v;
      try {
        Enumeration e = req.getHeaderNames();
     
        while(e.hasMoreElements()) {
            k = (String)e.nextElement();
            v = req.getHeader(k);
            //print.err(k.length()+":"+k);
            headers.setEL(KeyImpl.init(k),v);
            headers.setEL(KeyImpl.init(k=k.replace('-','_')),v);
            https.setEL(KeyImpl.init("http_"+k),v)
          }
      }
      catch(Throwable t){t.printStackTrace();}
    }
    String lkey=key.getLowerString();
       
     
        if(lkey.length()>7) {
            char first=lkey.charAt(0);
            if(first=='a') {
              if(key.equals(KeyConstants._auth_type)) return toString(req.getAuthType());
            }
            else if(first=='c')  {
              if(key.equals(KeyConstants._context_path))return toString(req.getContextPath());
              if(key.equals(KeyConstants._cf_template_path)) {
          try {
            return toString(ResourceUtil.getResource(pc, pc.getBasePageSource()));
          } catch (Throwable t) {
            return "";
          }
              }
            }
            else if(first=='h')  {
              if(lkey.startsWith("http_")){
                Object o = https.get(key,NullSupportHelper.NULL());
                    if(o==NullSupportHelper.NULL() && key.equals(KeyConstants._http_if_modified_since))
                      o = https.get(KeyConstants._last_modified,NullSupportHelper.NULL());
                    if(o!=NullSupportHelper.NULL())return doScriptProtect((String)o);
            }
            }
            else if(first=='r') {
                if(key.equals(KeyConstants._remote_user))    return toString(req.getRemoteUser());
                if(key.equals(KeyConstants._remote_addr))    return toString(req.getRemoteAddr());
                if(key.equals(KeyConstants._remote_host))    return toString(req.getRemoteHost());
                if(key.equals(KeyConstants._request_method))    return req.getMethod();
                if(key.equals(KeyConstants._request_url))    return ReqRspUtil.getRequestURL( req, true );
                if(key.equals(KeyConstants._request_uri))    return toString(req.getAttribute("javax.servlet.include.request_uri"));
                if(key.getUpperString().startsWith("REDIRECT_")){
                  // from attributes (key sensitive)
                  Object value = req.getAttribute(key.getString());
                  if(!StringUtil.isEmpty(value)) return toString(value);
                 
                  // from attributes (key insensitive)
                  Enumeration<String> names = req.getAttributeNames();
                String k;
                while(names.hasMoreElements()){
                  k=names.nextElement();
                  if(k.equalsIgnoreCase(key.getString())) {
                    return toString(req.getAttribute(k));
                  }
                }
                }
            }
           
           
            else if(first=='l') {
                if(key.equals(KeyConstants._local_addr))    return toString(localAddress);
                if(key.equals(KeyConstants._local_host))    return toString(localHost);
            }
            else if(first=='s') {
              if(key.equals(KeyConstants._script_name))
                return ReqRspUtil.getScriptName(req);
              //return StringUtil.emptyIfNull(req.getContextPath())+StringUtil.emptyIfNull(req.getServletPath());
            if(key.equals(KeyConstants._server_name))    return toString(req.getServerName());
                if(key.equals(KeyConstants._server_protocol))  return toString(req.getProtocol());
                if(key.equals(KeyConstants._server_port))    return Caster.toString(req.getServerPort());
                if(key.equals(KeyConstants._server_port_secure))return req.isSecure()?"1":"0";
               
            }
            else if(first=='p') {
              if(key.equals(KeyConstants._path_info)) {
                String pathInfo = Caster.toString(req.getAttribute("javax.servlet.include.path_info"),null);
                if(StringUtil.isEmpty(pathInfo)) pathInfo = Caster.toString(req.getHeader("xajp-path-info"),null);
                if(StringUtil.isEmpty(pathInfo)) pathInfo = req.getPathInfo();
                if(StringUtil.isEmpty(pathInfo)) {
                  pathInfo = Caster.toString(req.getAttribute("requestedPath"),null);
                  if(!StringUtil.isEmpty(pathInfo,true)) {
                    String scriptName = ReqRspUtil.getScriptName(req);
                    if ( pathInfo.startsWith(scriptName) )
                        pathInfo = pathInfo.substring(scriptName.length());
                  }
                }
                 
                if(!StringUtil.isEmpty(pathInfo,true)) return pathInfo;
                  return "";
              }
                if(key.equals(KeyConstants._path_translated))  {
                try {
            return toString(ResourceUtil.getResource(pc, pc.getBasePageSource()));
          } catch (Throwable t) {
            return "";
          }//toString(req.getServletPath());
              }
            }
            else if(first=='q') {
              if(key.equals(KeyConstants._query_string))return doScriptProtect(toString(ReqRspUtil.getQueryString(req)));
            }
        }
       
        // check header
        String headerValue = (String) headers.get(key,null);//req.getHeader(key.getString());
      if(headerValue != null) return doScriptProtect(headerValue);
     
        return other(key,defaultValue);
  }
 
  private Object other(Collection.Key key, Object defaultValue) {
    if(staticKeys.containsKey(key)) return "";
    return defaultValue;
  }
 
  private String doScriptProtect(String value) {
    if(isScriptProtected()) return ScriptProtect.translate(value);
    return value;
  }
 
  private String toString(Object str) {
    return StringUtil.toStringEmptyIfNull(str);
  }
 
  @Override
  public Object get(Collection.Key key) {
    Object value=get(key,"");
    if(value==null)value= "";
    return value;
  }
 
  @Override
  public Iterator<Collection.Key> keyIterator() {
    return new KeyIterator(keys());
  }
   
    @Override
  public Iterator<String> keysAsStringIterator() {
      return new StringIterator(keys());
    }
 
  @Override
  public Iterator<Entry<Key, Object>> entryIterator() {
    return new EntryIterator(this, keys());
  }
 
  @Override
  public boolean isInitalized() {
    return isInit;
  }
 
  @Override
  public void initialize(PageContext pc) {
    isInit=true;
    this.pc=pc;
   
        if(scriptProtected==ScriptProtected.UNDEFINED) {
      scriptProtected=((pc.getApplicationContext().getScriptProtect()&ApplicationContext.SCRIPT_PROTECT_CGI)>0)?
          ScriptProtected.YES:ScriptProtected.NO;
    }
  }
 
  @Override
  public void release() {
    isInit=false;
    this.req=null;
    scriptProtected=ScriptProtected.UNDEFINED;
    pc=null;
    https=null;
    headers=null;
  }
 
  @Override
  public void release(PageContext pc) {
    isInit=false;
    this.req=null;
    scriptProtected=ScriptProtected.UNDEFINED;
    pc=null;
    https=null;
    headers=null;
  }
 
  @Override
  public DumpData toDumpData(PageContext pageContext, int maxlevel, DumpProperties dp) {
    return StructUtil.toDumpTable(this, "CGI Scope", pageContext, maxlevel, dp);
  }
   
    @Override
    public int getType() {
        return SCOPE_CGI;
    }
   
    @Override
    public String getTypeAsString() {
        return "cgi";
    }
   
  public boolean isScriptProtected() {
    return scriptProtected==ScriptProtected.YES;
  }
 
  @Override
  public void setScriptProtecting(ApplicationContext ac,boolean scriptProtecting) {
    scriptProtected=scriptProtecting?ScriptProtected.YES:ScriptProtected.NO;
  }

 
  public static String getDomain(HttpServletRequest req) { // DIFF 23
    StringBuffer sb=new StringBuffer();
    sb.append(req.isSecure()?"https://":"http://");
    sb.append(req.getServerName());
    sb.append(':');
    sb.append(req.getServerPort());
    if(!StringUtil.isEmpty(req.getContextPath()))sb.append(req.getContextPath());
    return sb.toString();
  }

}
TOP

Related Classes of railo.runtime.type.scope.CGIImpl

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.