Add new attachment

Only authorized users are allowed to upload new attachments.

This page (revision-6) was last changed on 05-Dec-2023 05:32 by Ben Spink

This page was created on 05-Dec-2023 05:32 by Ben Spink

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Difference between version and

At line 3 added 65 lines
This plugin expects a user.XML file response, a VFS.XML file response, and a custom VFS items response...examples provided below.\\
\\
You can get a user.XML file from any user created in the User Manager. The same is true for the VFS.XML. So those examples are not provided here. The complex part is the VFS structure object which has to represent the VFS folder item from the User Manager...and that is the example provided below. In the URLs that are called, there are variable replacements that can be done for the user_name and user_password.\\
{{{
<?xml version="1.0" encoding="UTF-8"?>
<VFS type="vector">
<VFS_subitem type="properties">
<type>FILE</type>
<dir>/</dir>
<name>Upload</name>
<data type="vector">
<data_subitem type="properties">
<url>FILE://C:/FTP/Upload1/</url>
<type>DIR</type>
</data_subitem>
</data>
</VFS_subitem>
<VFS_subitem type="properties">
<dir>/</dir>
<type>DIR</type>
<virtualPath>/</virtualPath>
<name>Download</name>
</VFS_subitem>
<VFS_subitem type="properties">
<dir>/Download/</dir>
<type>DIR</type>
<virtualPath>/Download/</virtualPath>
<name>Sender1</name>
</VFS_subitem>
<VFS_subitem type="properties">
<dir>/Download/</dir>
<type>DIR</type>
<virtualPath>/Download/</virtualPath>
<name>Sender2</name>
</VFS_subitem>
<VFS_subitem type="properties">
<dir>/Download/Sender1/</dir>
<type>FILE</type>
<virtualPath>/Download/Sender1/</virtualPath>
<name>File2.zip</name>
<data type="vector">
<data_subitem type="properties">
<url>FILE://C:/FTP/Testfile2.zip</url>
<type>FILE</type>
</data_subitem>
</data>
</VFS_subitem>
<VFS_subitem type="properties">
<dir>/Download/Sender2/</dir>
<type>FILE</type>
<virtualPath>/Download/Sender2/</virtualPath>
<name>File1.zip</name>
<data type="vector">
<data_subitem type="properties">
<url>FILE://C:/FTP/Testfile1.zip</url>
<type>FILE</type>
</data_subitem>
</data>
</VFS_subitem>
</VFS>
}}}
At line 80 added 3 lines
import crushftp.handlers.SessionCrush;
import crushftp.handlers.UserTools;
import crushftp.server.ServerStatus;
At line 20 removed one line
GUI g = null;
At line 26 changed 15 lines
p.put("enabled","false");
p.put("debug","false");
p.put("user_url","http://127.0.0.1/auth/user_properties.xml");
p.put("user_post_data","");
p.put("permissions_url","http://127.0.0.1/auth/vfs_properties.xml");
p.put("permissions_post_data","");
p.put("vfs_url","http://127.0.0.1/auth/vfs_vectors.xml");
p.put("vfs_post_data","");
p.put("method","GET");
p.put("username","%username%");
p.put("password",c.encode_pass("%password%","DES"));
p.put("usernameTemplate","");
p.put("overwrite_vfs","true");
p.put("server_item","All");
p.put("version",version);
p.put("enabled", "false");
p.put("debug", "false");
p.put("user_url", "http://127.0.0.1/auth/user_properties.xml");
p.put("user_post_data", "");
p.put("permissions_url", "http://127.0.0.1/auth/vfs_properties.xml");
p.put("permissions_post_data", "");
p.put("vfs_url", "http://127.0.0.1/auth/vfs_vectors.xml");
p.put("vfs_post_data", "");
p.put("method", "GET");
p.put("username", "%username%");
p.put("password", c.encode_pass("%password%", "DES"));
p.put("usernameTemplate", "");
p.put("overwrite_vfs", "true");
p.put("server_item", "All");
p.put("version", version);
At line 47 removed one line
if (g != null) g.setSettings(settings);
At line 52 changed 2 lines
if (g != null) settings = g.getSettings();
settings.put("version",version);
settings.put("version", version);
At line 57 removed 8 lines
public javax.swing.JPanel getPrefsPanel()
{
if (g == null) g = new GUI();
g.setParent(this);
g.setSettings(settings);
return g;
}
At line 68 changed one line
if (info.getProperty("action","").equals("login"))
if (info.getProperty("action", "").equals("login"))
At line 70 changed one line
Properties user_info = (Properties)info.get("user_info");
Properties user_info = (Properties) info.get("user_info");
At line 72 changed one line
if (info.getProperty("action","").equals("login") && (get("server_item").trim().equalsIgnoreCase("All") || get("server_item").trim().length() == 0 || user_info.getProperty("listen_ip_port","").equals(get("server_item").trim())))
if (info.getProperty("action", "").equals("login") && (get("server_item").trim().equalsIgnoreCase("All") || get("server_item").trim().length() == 0 || user_info.getProperty("listen_ip_port", "").equals(get("server_item").trim())))
At line 82 changed 5 lines
try{the_line = Common.replace_str(the_line, "%user_name%", username);}catch(Exception e){}
try{the_line = Common.replace_str(the_line, "%username%", username);}catch(Exception e){}
try{the_line = Common.replace_str(the_line, "%user_password%", password);}catch(Exception e){}
try{the_line = Common.replace_str(the_line, "%user_pass%", password);}catch(Exception e){}
try{the_line = Common.replace_str(the_line, "%password%", password);}catch(Exception e){}
try
{
the_line = Common.replace_str(the_line, "%user_name%", username);
}
catch (Exception e)
{
}
try
{
the_line = Common.replace_str(the_line, "%username%", username);
}
catch (Exception e)
{
}
try
{
the_line = Common.replace_str(the_line, "%user_password%", password);
}
catch (Exception e)
{
}
try
{
the_line = Common.replace_str(the_line, "%user_pass%", password);
}
catch (Exception e)
{
}
try
{
the_line = Common.replace_str(the_line, "%password%", password);
}
catch (Exception e)
{
}
At line 90 changed one line
At line 95 changed 3 lines
Properties user = (Properties)info.get("user");
Properties user_info = (Properties)info.get("user_info");
crushftp.server.ServerSession thisSession = (crushftp.server.ServerSession)info.get("ServerSession");
Properties user = (Properties) info.get("user");
Properties user_info = (Properties) info.get("user_info");
SessionCrush thisSession = (SessionCrush) info.get("ServerSession");
At line 100 changed 2 lines
username = username.replaceAll("/","");
username = username.replaceAll("\\\\","");
username = username.replaceAll("/", "");
username = username.replaceAll("\\\\", "");
At line 105 changed one line
if (!password.trim().equals(""))
if (!password.trim().equals("") || info.getProperty("publickey_lookup", "false").equals("true") || info.getProperty("anyPass", "false").equals("true"))
At line 108 changed 6 lines
String url = replace_vars(get("user_url"),username,password);
String post_data = replace_vars(get("user_post_data"),username,password);
try{url = thisSession.server_status_frame.change_vars_to_values(url,thisSession);}catch(Exception e){}
try{post_data = thisSession.server_status_frame.change_vars_to_values(post_data,thisSession);}catch(Exception e){}
String userXML = getResult(url, post_data,replace_vars(get("username"),username,password),replace_vars(c.decode_pass(get("password")),username,password));
Properties theUser = (Properties)Common.readXMLObject(new ByteArrayInputStream(userXML.getBytes("UTF8")));
String url = replace_vars(get("user_url"), username, password);
String post_data = replace_vars(get("user_post_data"), username, password);
try
{
url = ServerStatus.thisObj.change_vars_to_values(url, thisSession);
}
catch (Exception e)
{
}
try
{
post_data = ServerStatus.thisObj.change_vars_to_values(post_data, thisSession);
}
catch (Exception e)
{
}
String userXML = getResult(url, post_data, replace_vars(get("username"), username, password), replace_vars(c.decode_pass(get("password")), username, password));
Properties theUser = (Properties) Common.readXMLObject(new ByteArrayInputStream(userXML.getBytes("UTF8")));
At line 118 changed 6 lines
url = replace_vars(get("permissions_url"),username,password);
post_data = replace_vars(get("permissions_post_data"),username,password);
try{url = thisSession.server_status_frame.change_vars_to_values(url,thisSession);}catch(Exception e){}
try{post_data = thisSession.server_status_frame.change_vars_to_values(post_data,thisSession);}catch(Exception e){}
String permissionsXML = getResult(url, post_data,replace_vars(get("username"),username,password),replace_vars(c.decode_pass(get("password")),username,password));
Properties permissions = (Properties)Common.readXMLObject(new ByteArrayInputStream(permissionsXML.getBytes("UTF8")));
url = replace_vars(get("permissions_url"), username, password);
post_data = replace_vars(get("permissions_post_data"), username, password);
try
{
url = ServerStatus.thisObj.change_vars_to_values(url, thisSession);
}
catch (Exception e)
{
}
try
{
post_data = ServerStatus.thisObj.change_vars_to_values(post_data, thisSession);
}
catch (Exception e)
{
}
String permissionsXML = getResult(url, post_data, replace_vars(get("username"), username, password), replace_vars(c.decode_pass(get("password")), username, password));
Properties permissions = (Properties) Common.readXMLObject(new ByteArrayInputStream(permissionsXML.getBytes("UTF8")));
At line 126 changed 6 lines
url = replace_vars(get("vfs_url"),username,password);
post_data = replace_vars(get("vfs_post_data"),username,password);
try{url = thisSession.server_status_frame.change_vars_to_values(url,thisSession);}catch(Exception e){}
try{post_data = thisSession.server_status_frame.change_vars_to_values(post_data,thisSession);}catch(Exception e){}
String vfsXML = getResult(url, post_data,replace_vars(get("username"),username,password),replace_vars(c.decode_pass(get("password")),username,password));
Vector VFSItems = (Vector)Common.readXMLObject(new ByteArrayInputStream(vfsXML.getBytes("UTF8")));
url = replace_vars(get("vfs_url"), username, password);
post_data = replace_vars(get("vfs_post_data"), username, password);
try
{
url = ServerStatus.thisObj.change_vars_to_values(url, thisSession);
}
catch (Exception e)
{
}
try
{
post_data = ServerStatus.thisObj.change_vars_to_values(post_data, thisSession);
}
catch (Exception e)
{
}
String vfsXML = getResult(url, post_data, replace_vars(get("username"), username, password), replace_vars(c.decode_pass(get("password")), username, password));
Vector VFSItems = (Vector) Common.readXMLObject(new ByteArrayInputStream(vfsXML.getBytes("UTF8")));
At line 134 changed one line
msg("got users information:"+theUser);
msg("got users information:" + theUser);
At line 137 changed one line
boolean loadedUser = loadTemplateUser(user,info);
boolean loadedUser = loadTemplateUser(user, info);
At line 141 changed one line
String users_path = System.getProperty("crushftp.plugins")+"plugins/WebApplication_VFS/"+username;
String users_path = System.getProperty("crushftp.plugins") + "plugins/WebApplication_VFS/" + username;
At line 144 changed 6 lines
info.put("VFSItems",VFSItems);
info.put("permissions",permissions);
info.put("uVFS",users_path);
info.put("templateUser",get("usernameTemplate"));
info.put("overwrite_vfs",get("overwrite_vfs"));
user.put("root_dir","/");
info.put("VFSItems", VFSItems);
info.put("permissions", permissions);
info.put("uVFS", users_path);
info.put("templateUser", get("usernameTemplate"));
info.put("overwrite_vfs", get("overwrite_vfs"));
user.put("root_dir", "/");
At line 155 changed one line
catch(Exception e)
catch (Exception e)
At line 160 changed one line
msg("found_user:"+found_user);
msg("found_user:" + found_user);
At line 163 changed one line
info.put("action","success");
info.put("action", "success");
At line 166 changed one line
At line 170 changed 5 lines
msg("getResult..url:"+url);
msg("getResult...post_data:"+post_data);
msg("getResult...username:"+username);
msg("getResult...password:"+stars.substring(0,password.length()));
HttpURLConnection connection = (HttpURLConnection)new URL(url).openConnection();
msg("getResult..url:" + url);
msg("getResult...post_data:" + post_data);
msg("getResult...username:" + username);
msg("getResult...password:" + stars.substring(0, password.length()));
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
At line 179 changed one line
String authString = username+":"+password;
String authString = username + ":" + password;
At line 187 changed one line
connection.setRequestProperty("Content-Length", dataBytes.length+"");
connection.setRequestProperty("Content-Length", dataBytes.length + "");
At line 194 changed one line
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF8"));
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF8"));
At line 200 changed one line
allData += decodedString+"\r\n";
allData += decodedString + "\r\n";
At line 209 changed one line
msg("CheckLogin...username:"+username);
msg("CheckLogin...username:" + username);
At line 216 changed one line
if (!settings.getProperty("usernameTemplate").equals(""))
if (!settings.getProperty("usernameTemplate").equals("") && Common.V() < 6)
At line 220 changed 2 lines
Properties server_item = (Properties)info.get("server_item");
String listen_ip_port = server_item.getProperty("ip")+"_"+server_item.getProperty("port");
Properties server_item = (Properties) info.get("server_item");
String listen_ip_port = server_item.getProperty("ip") + "_" + server_item.getProperty("port");
At line 223 changed 13 lines
msg("Searching for template user in server item:"+listen_ip_port);
msg("Raw server_item:"+server_item);
crushftp.user.UserTools ut = new crushftp.user.UserTools();
Properties p = Common.read_user_no_cache(listen_ip_port,settings.getProperty("usernameTemplate"));
if (p == null)
{
p = Common.read_user_no_cache(listen_ip_port2,settings.getProperty("usernameTemplate"));
ut.turn_off_inherit_all(p,listen_ip_port2);
}
else
{
ut.turn_off_inherit_all(p,listen_ip_port);
}
msg("Searching for template user in server item:" + listen_ip_port);
msg("Raw server_item:" + server_item);
Properties p = UserTools.ut.getUser(listen_ip_port, settings.getProperty("usernameTemplate"), false, false);
if (p == null) p = UserTools.ut.getUser(listen_ip_port2, settings.getProperty("usernameTemplate"), false, false);
At line 239 changed one line
msg("Setting usernameTemplate's settings:"+p.size());
msg("Setting usernameTemplate's settings:" + p.size());
At line 243 changed one line
if (!key.equalsIgnoreCase("username") && !key.equalsIgnoreCase("user_name") && !key.equalsIgnoreCase("password")) try{user.put(key,p.get(key));}catch(Exception e){}
if (!key.equalsIgnoreCase("username") && !key.equalsIgnoreCase("user_name") && !key.equalsIgnoreCase("password")) try
{
user.put(key, p.get(key));
}
catch (Exception e)
{
}
At line 245 changed one line
if (user.getProperty("max_logins","0").equals("-1")) user.put("max_logins","0");
if (user.getProperty("max_logins", "0").equals("-1")) user.put("max_logins", "0");
At line 251 changed one line
catch(Exception e)//no default user found, use template instead.
catch (Exception e)//no default user found, use template instead.
At line 256 changed one line
user.put("virtualUser","true");
user.put("virtualUser", "true");
At line 384 added one line
At line 266 changed one line
if (settings.getProperty("debug").equals("true")) crushftp.handlers.Common.debug(0,"WebApplication:"+s);
if (settings.getProperty("debug").equals("true")) crushftp.handlers.Common.debug(0, "WebApplication:" + s);
At line 271 changed one line
if (settings.getProperty("debug").equals("true")) crushftp.handlers.Common.debug(0,e);
if (settings.getProperty("debug").equals("true")) crushftp.handlers.Common.debug(0, e);
At line 274 removed one line
At line 277 removed 213 lines
----
GUI.java
----
%%prettify
{{{
package WebApplication;
import java.awt.*;
import javax.swing.*;
import java.util.*;
public class GUI extends JPanel
{
private JTextField username = new JTextField();
private JLabel jLabel2 = new JLabel();
private JLabel jLabel3 = new JLabel();
private JPasswordField password = new JPasswordField();
private JLabel jLabel5 = new JLabel();
private JTextField user_url = new JTextField();
public GUI()
{
try
{
jbInit();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
transient Object parent = null;
private JCheckBox enabled_cb = new JCheckBox();
private JCheckBox debug_cb = new JCheckBox();
private JPanel Settings = new JPanel();
private JComboBox server_item_combo = new JComboBox();
private JLabel jLabel8 = new JLabel();
private JTextField usernameTemplate_field = new JTextField();
private JCheckBox overwrite_vfs_cb = new JCheckBox();
private JLabel jLabel17 = new JLabel();
private JScrollPane LdapSettingsPane = new JScrollPane();
private JLabel jLabel6 = new JLabel();
private JTextField user_post_data = new JTextField();
private JLabel jLabel15 = new JLabel();
private JLabel jLabel18 = new JLabel();
private JTextField permissions_url = new JTextField();
private JTextField permissions_post_data = new JTextField();
private JLabel jLabel111 = new JLabel();
private JTextField vfs_url = new JTextField();
private JTextField vfs_post_data = new JTextField();
private JLabel jLabel112 = new JLabel();
private JTextField method = new JTextField();
private JLabel jLabel4 = new JLabel();
public void setParent(Object parent)
{
this.parent = parent;
}
void jbInit() throws Exception
{
this.setLayout(null);
username.setToolTipText("Variables are allowed such as %username% or %password%.");
username.setBounds(new Rectangle(153, 38, 176, 22));
jLabel2.setBounds(new Rectangle(10, 36, 136, 29));
jLabel2.setText("HTTP Username:");
jLabel2.setFont(new java.awt.Font("Arial", 0, 12));
jLabel3.setFont(new java.awt.Font("Arial", 0, 12));
jLabel3.setText("HTTP Password :");
jLabel3.setBounds(new Rectangle(10, 64, 136, 29));
password.setToolTipText("Variables are allowed such as %username% or %password%.");
password.setBounds(new Rectangle(153, 66, 176, 22));
jLabel5.setFont(new java.awt.Font("Arial", 0, 12));
jLabel5.setText("User XML URL:");
jLabel5.setBounds(new Rectangle(10, 93, 147, 29));
user_url.setBounds(new Rectangle(153, 95, 372, 22));
server_item_combo.setToolTipText("Allows you to specify the individual server that can use this plugin " +
"instance.");
server_item_combo.setBounds(new Rectangle(153, 7, 183, 27));
enabled_cb.setText("Enabled");
enabled_cb.setBounds(new Rectangle(15, 1, 81, 22));
debug_cb.setText("Debug");
debug_cb.setBounds(new Rectangle(93, 0, 100, 22));
Settings.setBorder(BorderFactory.createEtchedBorder());
Settings.setPreferredSize(new Dimension(1, 330));
Settings.setLayout(null);
jLabel8.setBounds(new Rectangle(10, 287, 119, 38));
jLabel8.setText("<html><body>Import settings from CrushFTP user:</body></html>");
jLabel8.setVerticalAlignment(SwingConstants.TOP);
jLabel8.setFont(new java.awt.Font("Arial", 0, 12));
usernameTemplate_field.setBounds(new Rectangle(153, 289, 149, 22));
overwrite_vfs_cb.setBounds(new Rectangle(10, 317, 175, 22));
overwrite_vfs_cb.setToolTipText("For mutliple logins with the same username, keep this setting off.");
overwrite_vfs_cb.setText("Overwrite VFS items?");
jLabel17.setFont(new java.awt.Font("Arial", 0, 12));
jLabel17.setText("Allowed Server Port:");
jLabel17.setBounds(new Rectangle(10, 6, 136, 29));
LdapSettingsPane.setBounds(new Rectangle(9, 28, 555, 398));
jLabel6.setBounds(new Rectangle(10, 120, 147, 29));
jLabel6.setText("Post Data:");
jLabel6.setFont(new java.awt.Font("Arial", 0, 12));
user_post_data.setBounds(new Rectangle(153, 122, 372, 22));
jLabel15.setBounds(new Rectangle(10, 149, 147, 29));
jLabel15.setText("Permissions XML URL:");
jLabel15.setFont(new java.awt.Font("Arial", 0, 12));
jLabel18.setFont(new java.awt.Font("Arial", 0, 12));
jLabel18.setText("Post Data:");
jLabel18.setBounds(new Rectangle(10, 176, 147, 29));
permissions_url.setBounds(new Rectangle(153, 151, 372, 22));
permissions_post_data.setBounds(new Rectangle(153, 178, 372, 22));
jLabel111.setBounds(new Rectangle(10, 231, 147, 29));
jLabel111.setText("Post Data:");
jLabel111.setFont(new java.awt.Font("Arial", 0, 12));
vfs_url.setBounds(new Rectangle(153, 206, 372, 22));
vfs_post_data.setBounds(new Rectangle(153, 233, 372, 22));
jLabel112.setFont(new java.awt.Font("Arial", 0, 12));
jLabel112.setText("VFS XML URL:");
jLabel112.setBounds(new Rectangle(10, 204, 147, 29));
method.setBounds(new Rectangle(153, 261, 82, 22));
method.setToolTipText("GET or POST");
jLabel4.setFont(new java.awt.Font("Arial", 0, 12));
jLabel4.setText("HTTP Method:");
jLabel4.setBounds(new Rectangle(10, 259, 136, 29));
Settings.add(jLabel17, null);
Settings.add(server_item_combo, null);
Settings.add(username, null);
Settings.add(jLabel2, null);
Settings.add(user_url, null);
Settings.add(jLabel5, null);
Settings.add(password, null);
Settings.add(jLabel3, null);
this.add(debug_cb, null);
this.add(enabled_cb, null);
this.add(LdapSettingsPane, null);
LdapSettingsPane.getViewport().add(Settings, "LDAP Settings");
Settings.add(user_post_data, null);
Settings.add(jLabel6, null);
Settings.add(permissions_post_data, null);
Settings.add(jLabel18, null);
Settings.add(jLabel15, null);
Settings.add(permissions_url, null);
Settings.add(vfs_post_data, null);
Settings.add(jLabel111, null);
Settings.add(jLabel112, null);
Settings.add(vfs_url, null);
Settings.add(method, null);
Settings.add(jLabel4, null);
Settings.add(usernameTemplate_field, null);
Settings.add(overwrite_vfs_cb, null);
Settings.add(jLabel8, null);
buildServerList();
}
public Properties getSettings()
{
Properties p = new Properties();
p.put("enabled",enabled_cb.isSelected()+"");
p.put("debug",debug_cb.isSelected()+"");
p.put("user_url",user_url.getText());
p.put("user_post_data",user_post_data.getText());
p.put("permissions_url",permissions_url.getText());
p.put("permissions_post_data",permissions_post_data.getText());
p.put("vfs_url",vfs_url.getText());
p.put("vfs_post_data",vfs_post_data.getText());
p.put("username",username.getText());
p.put("password",new crushftp.handlers.Common().encode_pass(new String(password.getPassword()),"DES"));
p.put("usernameTemplate",usernameTemplate_field.getText());
p.put("overwrite_vfs",overwrite_vfs_cb.isSelected()+"");
p.put("method",method.getText());
p.put("server_item",server_item_combo.getSelectedItem());
return p;
}
public void setSettings(Properties p)
{
enabled_cb.setSelected(p.getProperty("enabled").equalsIgnoreCase("true"));
debug_cb.setSelected(p.getProperty("debug").equalsIgnoreCase("true"));
method.setText(p.getProperty("method"));
username.setText(p.getProperty("username"));
password.setText(new crushftp.handlers.Common().decode_pass(p.getProperty("password")));
user_url.setText(p.getProperty("user_url"));
user_post_data.setText(p.getProperty("user_post_data"));
permissions_url.setText(p.getProperty("permissions_url"));
permissions_post_data.setText(p.getProperty("permissions_post_data"));
vfs_url.setText(p.getProperty("vfs_url"));
vfs_post_data.setText(p.getProperty("vfs_post_data"));
usernameTemplate_field.setText(p.getProperty("usernameTemplate"));
overwrite_vfs_cb.setSelected(p.getProperty("overwrite_vfs").equalsIgnoreCase("true"));
server_item_combo.setSelectedItem(p.getProperty("server_item"));
}
public void buildServerList()
{
server_item_combo.removeAllItems();
server_item_combo.addItem("All");
try
{
Vector the_server_list = (Vector)crushftp.server.ServerStatus.server_settings.get("server_list");
for (int x=0; x<the_server_list.size(); x++)
{
Properties server_item = (Properties)((Properties)the_server_list.elementAt(x)).clone();
server_item_combo.addItem(server_item.getProperty("ip","lookup")+"_"+server_item.getProperty("port","21"));
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}}}
/%
Version Date Modified Size Author Changes ... Change note
6 05-Dec-2023 05:32 14.233 kB Ben Spink to previous
5 05-Dec-2023 05:32 13.806 kB Ben Spink to previous | to last
4 05-Dec-2023 05:32 11.265 kB Ben Spink to previous | to last
3 05-Dec-2023 05:32 11.146 kB Ben Spink to previous | to last
2 05-Dec-2023 05:32 11.145 kB Ben Spink to previous | to last
1 05-Dec-2023 05:32 19.315 kB Ben Spink to last
« This page (revision-6) was last changed on 05-Dec-2023 05:32 by Ben Spink
G’day (anonymous guest)
CrushFTP11 | What's New
JSPWiki