package railo.runtime.util;
import railo.commons.lang.StringUtil;
import railo.runtime.MappingImpl;
import railo.runtime.PageContext;
import railo.runtime.PageSource;
import railo.runtime.listener.ApplicationListener;
import railo.runtime.op.Caster;
import railo.runtime.type.util.KeyConstants;
import railo.runtime.type.util.ListUtil;
public class PageContextUtil {
public static ApplicationListener getApplicationListener(PageContext pc) {
PageSource ps = pc.getBasePageSource();
if(ps!=null) {
MappingImpl mapp=(MappingImpl) ps.getMapping();
if(mapp!=null) return mapp.getApplicationListener();
}
return pc.getConfig().getApplicationListener();
}
public static String getCookieDomain(PageContext pc) {
if(!pc.getApplicationContext().isSetDomainCookies()) return null;
String result = Caster.toString(pc.cgiScope().get(KeyConstants._server_name, null),null);
if(!StringUtil.isEmpty(result)) {
String listLast = ListUtil.last(result, '.');
if ( !railo.runtime.op.Decision.isNumeric(listLast) ) { // if it's numeric then must be IP address
int numparts = 2;
int listLen = ListUtil.len( result, '.', true );
if ( listLen > 2 ) {
if ( listLast.length() == 2 || !StringUtil.isAscii(listLast) ) { // country TLD
int tldMinus1 = ListUtil.getAt( result, '.', listLen - 1, true, "" ).length();
if ( tldMinus1 == 2 || tldMinus1 == 3 ) // domain is in country like, example.co.uk or example.org.il
numparts++;
}
}
if ( listLen > numparts )
result = result.substring( result.indexOf( '.' ) );
else if ( listLen == numparts )
result = "." + result;
}
}
return result;
}
}