001 package railo.runtime.type.scope; 002 003 import java.io.UnsupportedEncodingException; 004 005 import railo.commons.net.URLItem; 006 import railo.runtime.PageContext; 007 import railo.runtime.listener.ApplicationContext; 008 import railo.runtime.net.http.ReqRspUtil; 009 import railo.runtime.op.Caster; 010 import railo.runtime.type.Collection; 011 import railo.runtime.type.KeyImpl; 012 013 /** 014 * Implements URL Scope 015 */ 016 public final class URLImpl extends ScopeSupport implements URL,ScriptProtected { 017 018 private String encoding=null; 019 private int scriptProtected=ScriptProtected.UNDEFINED; 020 private static final URLItem[] empty=new URLItem[0]; 021 private static final Collection.Key REQUEST_TIMEOUT = KeyImpl.intern("RequestTimeout"); 022 private URLItem[] raw=empty; 023 024 /** 025 * Standart Constructor 026 */ 027 public URLImpl() { 028 super(true,"url",SCOPE_URL); 029 } 030 031 @Override 032 public String getEncoding() { 033 return encoding; 034 } 035 036 @Override 037 public void setEncoding(ApplicationContext ac,String encoding) throws UnsupportedEncodingException { 038 encoding=encoding.trim().toUpperCase(); 039 if(encoding.equals(this.encoding)) return; 040 this.encoding = encoding; 041 if(isInitalized())fillDecoded(raw,encoding,isScriptProtected(),ac.getSameFieldAsArray(SCOPE_URL)); 042 } 043 044 @Override 045 public void initialize(PageContext pc) { 046 if(encoding==null)encoding=pc.getConfig().getWebCharset(); 047 if(scriptProtected==ScriptProtected.UNDEFINED) { 048 scriptProtected=((pc.getApplicationContext().getScriptProtect()&ApplicationContext.SCRIPT_PROTECT_URL)>0)? 049 ScriptProtected.YES:ScriptProtected.NO; 050 } 051 052 try { 053 super.initialize(pc); 054 raw=setFromQueryString(ReqRspUtil.getQueryString(pc.getHttpServletRequest())); 055 056 fillDecoded(raw,encoding,isScriptProtected(),pc.getApplicationContext().getSameFieldAsArray(SCOPE_URL)); 057 058 if(raw.length>0 && pc.getConfig().isAllowURLRequestTimeout()){ 059 Object o=get(REQUEST_TIMEOUT,null); 060 if(o!=null) { 061 long timeout = Caster.toLongValue(o,-1); 062 if(timeout!=-1)pc.setRequestTimeout(timeout*1000); 063 } 064 Caster.toDoubleValue(o,-1); 065 } 066 } 067 catch (Exception e) {} 068 } 069 @Override 070 public void release() { 071 encoding=null; 072 raw=empty; 073 scriptProtected=ScriptProtected.UNDEFINED; 074 super.release(); 075 } 076 @Override 077 public void release(PageContext pc) { 078 encoding=null; 079 raw=empty; 080 scriptProtected=ScriptProtected.UNDEFINED; 081 super.release(pc); 082 } 083 084 @Override 085 public void setScriptProtecting(ApplicationContext ac,boolean scriptProtected) { 086 087 int _scriptProtected = scriptProtected?ScriptProtected.YES:ScriptProtected.NO; 088 //print.out(isInitalized()+"x"+(_scriptProtected+"!="+this.scriptProtected)); 089 if(isInitalized() && _scriptProtected!=this.scriptProtected) { 090 fillDecodedEL(raw,encoding,scriptProtected,ac.getSameFieldAsArray(SCOPE_URL)); 091 } 092 this.scriptProtected=_scriptProtected; 093 } 094 095 096 @Override 097 public boolean isScriptProtected() { 098 return scriptProtected==ScriptProtected.YES; 099 } 100 101 /** 102 * @return the raw 103 */ 104 public URLItem[] getRaw() { 105 return raw; 106 } 107 }