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