001 package railo.runtime.functions.system; 002 003 import java.util.Iterator; 004 005 import railo.runtime.Component; 006 import railo.runtime.ComponentPro; 007 import railo.runtime.ComponentWrap; 008 import railo.runtime.Mapping; 009 import railo.runtime.PageContext; 010 import railo.runtime.PageContextImpl; 011 import railo.runtime.config.ConfigImpl; 012 import railo.runtime.exp.PageException; 013 import railo.runtime.listener.AppListenerUtil; 014 import railo.runtime.listener.ApplicationContextPro; 015 import railo.runtime.listener.ModernApplicationContext; 016 import railo.runtime.net.s3.Properties; 017 import railo.runtime.op.Caster; 018 import railo.runtime.orm.ORMConfiguration; 019 import railo.runtime.type.Array; 020 import railo.runtime.type.ArrayImpl; 021 import railo.runtime.type.Collection; 022 import railo.runtime.type.KeyImpl; 023 import railo.runtime.type.Struct; 024 import railo.runtime.type.StructImpl; 025 import railo.runtime.type.UDF; 026 import railo.runtime.type.scope.Undefined; 027 028 public class GetApplicationSettings { 029 public static Struct call(PageContext pc) { 030 return call(pc, false); 031 } 032 033 public static Struct call(PageContext pc, boolean suppressFunctions) { 034 ApplicationContextPro ac = (ApplicationContextPro)pc.getApplicationContext(); 035 ComponentPro cfc = null; 036 if(ac instanceof ModernApplicationContext)cfc= ((ModernApplicationContext)ac).getComponent(); 037 038 Struct sct=new StructImpl(); 039 sct.setEL("applicationtimeout", ac.getApplicationTimeout()); 040 sct.setEL("clientmanagement", Caster.toBoolean(ac.isSetClientManagement())); 041 sct.setEL("clientstorage", ac.getClientstorage()); 042 sct.setEL("sessionstorage", ac.getSessionstorage()); 043 sct.setEL("customtagpaths", toArray(ac.getCustomTagMappings())); 044 sct.setEL("datasource", ac.getDefaultDataSource()); 045 sct.setEL("loginstorage", AppListenerUtil.translateLoginStorage(ac.getLoginStorage())); 046 sct.setEL("mappings", toStruct(ac.getMappings())); 047 sct.setEL(KeyImpl.NAME, ac.getName()); 048 sct.setEL("scriptprotect", AppListenerUtil.translateScriptProtect(ac.getScriptProtect())); 049 sct.setEL("securejson", Caster.toBoolean(ac.getSecureJson())); 050 sct.setEL("securejsonprefix", ac.getSecureJsonPrefix()); 051 sct.setEL("sessionmanagement", Caster.toBoolean(ac.isSetSessionManagement())); 052 sct.setEL("sessiontimeout", ac.getSessionTimeout()); 053 sct.setEL("clienttimeout", ac.getClientTimeout()); 054 sct.setEL("setclientcookies", Caster.toBoolean(ac.isSetClientCookies())); 055 sct.setEL("setdomaincookies", Caster.toBoolean(ac.isSetDomainCookies())); 056 sct.setEL(KeyImpl.NAME, ac.getName()); 057 sct.setEL("localmode", ac.getLocalMode()==Undefined.MODE_LOCAL_OR_ARGUMENTS_ALWAYS?"always":"update"); 058 sct.setEL("sessiontype", ((PageContextImpl) pc).getSessionType()==ConfigImpl.SESSION_TYPE_CFML?"cfml":"j2ee"); 059 sct.setEL("serverSideFormValidation", Boolean.FALSE); // TODO impl 060 061 sct.setEL("clientCluster", Caster.toBoolean(ac.getClientCluster())); 062 sct.setEL("sessionCluster", Caster.toBoolean(ac.getSessionCluster())); 063 064 065 066 // orm 067 if(ac.isORMEnabled()){ 068 ORMConfiguration conf = ac.getORMConfiguration(); 069 if(conf!=null)sct.setEL("orm", conf.toStruct()); 070 } 071 // s3 072 Properties props = ac.getS3(); 073 if(props!=null) { 074 sct.setEL("s3", props.toStruct()); 075 } 076 077 078 if(cfc!=null){ 079 sct.setEL("component", cfc.getPageSource().getDisplayPath()); 080 081 try { 082 ComponentWrap cw=ComponentWrap.toComponentWrap(Component.ACCESS_PRIVATE, cfc); 083 Iterator it=cw.keyIterator(); 084 Collection.Key key; 085 Object value; 086 while(it.hasNext()) { 087 key=KeyImpl.toKey(it.next()); 088 value=cw.get(key); 089 if(suppressFunctions && value instanceof UDF) continue; 090 if(!sct.containsKey(key))sct.setEL(key, value); 091 } 092 } 093 catch (PageException e) {e.printStackTrace();} 094 } 095 return sct; 096 } 097 098 099 100 private static Array toArray(Mapping[] mappings) { 101 Array arr=new ArrayImpl(); 102 if(mappings!=null)for(int i=0;i<mappings.length;i++){ 103 arr.appendEL(mappings[i].getStrPhysical()); 104 } 105 return arr; 106 } 107 108 private static Struct toStruct(Mapping[] mappings) { 109 Struct sct=new StructImpl(); 110 if(mappings!=null)for(int i=0;i<mappings.length;i++){ 111 sct.setEL(KeyImpl.init(mappings[i].getVirtual()), mappings[i].getStrPhysical()); 112 } 113 return sct; 114 } 115 }