package railo.runtime.config;
import railo.runtime.crypt.CFMXCompat;
import railo.runtime.exp.PageException;
import railo.runtime.functions.other.Encrypt;
import railo.runtime.net.proxy.ProxyData;
import railo.runtime.net.rpc.client.RPCClient;
import railo.runtime.op.Caster;
import railo.runtime.spooler.remote.RemoteClientTask;
import railo.runtime.type.Struct;
import railo.runtime.type.StructImpl;
import railo.runtime.type.util.KeyConstants;
import railo.runtime.type.util.ListUtil;
public class RemoteClientImpl implements RemoteClient {
private String url;
private String serverUsername;
private String serverPassword;
private ProxyData proxyData;
private String type;
private String adminPassword;
private String securityKey;
private String label;
private String usage;
private String id;
public RemoteClientImpl(String label,String type, String url, String serverUsername, String serverPassword,String adminPassword, ProxyData proxyData, String securityKey,String usage) {
this.label = label;
this.url = url;
this.serverUsername = serverUsername;
this.serverPassword = serverPassword;
this.proxyData = proxyData;
this.type = type;
this.adminPassword = adminPassword;
this.securityKey = securityKey;
this.usage = usage;
}
/**
* @return the url
*/
public String getUrl() {
return url;
}
/**
* @return the serverUsername
*/
public String getServerUsername() {
return serverUsername;
}
/**
* @return the serverPassword
*/
public String getServerPassword() {
return serverPassword;
}
/**
* @return the proxyData
*/
public ProxyData getProxyData() {
return proxyData;
}
/**
* @return the type
*/
public String getType() {
return type;
}
/**
* @return the adminPassword
*/
public String getAdminPassword() {
return adminPassword;
}
/**
* @return the securityKey
*/
public String getSecurityKey() {
return securityKey;
}
public String getAdminPasswordEncrypted() {
try {
return Encrypt.invoke( getAdminPassword(), getSecurityKey(), CFMXCompat.ALGORITHM_NAME, "uu", null, 0 );
}
catch (PageException e) {
return null;
}
}
public String getLabel() {
return label;
}
public String getUsage() {
return usage;
}
public boolean hasUsage(String usage) {
return ListUtil.listFindNoCaseIgnoreEmpty(this.usage,usage,',')!=-1 ;
}
public String getId(Config config) {
if(id!=null) return id;
Struct attrColl = new StructImpl();
attrColl.setEL(KeyConstants._action, "getToken");
Struct args = new StructImpl();
args.setEL(KeyConstants._type, getType());
args.setEL(RemoteClientTask.PASSWORD, getAdminPasswordEncrypted());
args.setEL(RemoteClientTask.CALLER_ID, "undefined");
args.setEL(RemoteClientTask.ATTRIBUTE_COLLECTION, attrColl);
try {
RPCClient rpc = RemoteClientTask.getRPCClient(this);
Object result = rpc.callWithNamedValues(config, "invoke", args);
return id=ConfigImpl.getId(securityKey, Caster.toString(result,null),false, null);
}
catch (Throwable t) {t.printStackTrace();
return null;
}
}
}