001 package railo.runtime.functions.rest; 002 003 004 import railo.commons.io.res.Resource; 005 import railo.commons.lang.StringUtil; 006 import railo.runtime.PageContext; 007 import railo.runtime.config.ConfigWebAdmin; 008 import railo.runtime.config.ConfigWebImpl; 009 import railo.runtime.exp.PageException; 010 import railo.runtime.op.Caster; 011 import railo.runtime.rest.Mapping; 012 import railo.runtime.rest.RestUtil; 013 014 public class RestInitApplication { 015 016 public static String call(PageContext pc , String dirPath) throws PageException { 017 return _call(pc, dirPath, null,null,null); 018 } 019 020 public static String call(PageContext pc , String dirPath, String serviceMapping) throws PageException { 021 return _call(pc, dirPath, serviceMapping, null,null); 022 } 023 024 public static String call(PageContext pc , String dirPath, String serviceMapping, boolean defaultMapping) throws PageException { 025 return _call(pc, dirPath, serviceMapping, defaultMapping, null); 026 } 027 028 public static String call(PageContext pc , String dirPath, String serviceMapping, boolean defaultMapping, String webAdminPassword) throws PageException { 029 return _call(pc, dirPath, serviceMapping, defaultMapping, webAdminPassword); 030 } 031 032 public static String _call(PageContext pc , String dirPath, String serviceMapping, Boolean defaultMapping, String webAdminPassword) throws PageException { 033 if(StringUtil.isEmpty(serviceMapping,true)){ 034 serviceMapping=pc.getApplicationContext().getName(); 035 } 036 Resource dir=RestDeleteApplication.toResource(pc,dirPath); 037 038 ConfigWebImpl config=(ConfigWebImpl) pc.getConfig(); 039 Mapping[] mappings = config.getRestMappings(); 040 Mapping mapping; 041 042 // id is mapping name 043 044 String virtual=serviceMapping.trim(); 045 if(!virtual.startsWith("/")) virtual="/"+virtual; 046 if(!virtual.endsWith("/")) virtual+="/"; 047 boolean hasResetted=false; 048 for(int i=0;i<mappings.length;i++){ 049 mapping=mappings[i]; 050 if(mapping.getVirtualWithSlash().equals(virtual)){ 051 // directory has changed 052 if(!RestUtil.isMatch(pc, mapping, dir) || (defaultMapping!=null && mapping.isDefault()!=defaultMapping.booleanValue())) { 053 update(pc,dir,virtual,RestDeleteApplication.getPassword(pc,webAdminPassword),defaultMapping==null?mapping.isDefault():defaultMapping.booleanValue()); 054 } 055 mapping.reset(pc); 056 hasResetted=true; 057 } 058 } 059 if(!hasResetted) { 060 update(pc,dir,virtual,RestDeleteApplication.getPassword(pc,webAdminPassword),defaultMapping==null?false:defaultMapping.booleanValue()); 061 } 062 063 return null; 064 } 065 066 private static void update(PageContext pc,Resource dir, String virtual, String webAdminPassword, boolean defaultMapping) throws PageException { 067 try { 068 ConfigWebAdmin admin = ConfigWebAdmin.newInstance((ConfigWebImpl)pc.getConfig(),webAdminPassword); 069 admin.updateRestMapping(virtual, dir.getAbsolutePath(), defaultMapping); 070 admin.store(); 071 } 072 catch (Exception e) { 073 throw Caster.toPageException(e); 074 } 075 } 076 077 }