/** * Method to ignore all incoming messages from a user * * @param i the user to ignore * @param quite if true will not show confirmation * @return true on succes, false on failure */ private boolean ignore(String i, boolean quiet) { if (username.equals(i) || i.equals("server") || admins.contains(i)) { if (!quiet) { error("can't ignore that person"); } return false; } if (!users.contains(i)) { if (!quiet) { error("user does not exists"); } return false; } if (ignores.contains(i)) { if (!quiet) { error("already ignoring user"); } return false; } ignores.add(i); updateList(); if (!quiet) { serverMessage("ignoring " + i); } return true; }
/** * removes a user from the user list * * @param un the name of the user to be removed */ public void userDel(String un) { users.remove(users.indexOf(un)); if (ignores.contains(un)) { ignores.remove(ignores.indexOf(un)); } if (afks.contains(un)) { afks.remove(afks.indexOf(un)); } if (admins.contains(un)) { admins.remove(admins.indexOf(un)); } updateList(); serverMessage(un + " has left " + server.channel); privates.serverMessage(un, un + " has left"); }
protected void writeAuditTrail(String strPath, String strUser, StringBuffer sbValues) { BufferedReader reader = WFileUtil.openReadFile(strPath); String strLine; ArrayList aListData = WUtil.strToAList(sbValues.toString(), false, "\n"); StringBuffer sbData = sbValues; String strPnl = (this instanceof DisplayTemplate) ? "Data Template " : "Data Dir "; if (reader == null) { Messages.postDebug("Error opening file " + strPath); return; } try { while ((strLine = reader.readLine()) != null) { // if the line in the file is not in the arraylist, // then that line has been deleted if (!aListData.contains(strLine)) WUserUtil.writeAuditTrail(new Date(), strUser, "Deleted " + strPnl + strLine); // remove the lines that are also in the file or those which // have been deleted. aListData.remove(strLine); } // Traverse through the remaining new lines in the arraylist, // and write it to the audit trail for (int i = 0; i < aListData.size(); i++) { strLine = (String) aListData.get(i); WUserUtil.writeAuditTrail(new Date(), strUser, "Added " + strPnl + strLine); } reader.close(); } catch (Exception e) { e.printStackTrace(); } }
/** * adds a new user to the interal list of users * * @param un the name of the user to be added */ public void userAdd(String un) { if (!users.contains(un)) { users.add(un); updateList(); if (!un.equals(username) && showUserStatus) serverMessage(un + " has joined " + server.channel); } }
/** * changes the name of a user, updating list of admins, afks, ignoes, and master user list * * @param on old username * @param nn new username */ public void rename(String on, String nn) { if (admins.contains(on)) { admins.remove(admins.indexOf(on)); admins.add(nn); } if (afks.contains(on)) { afks.remove(afks.indexOf(on)); afks.add(nn); } if (ignores.contains(on)) { ignores.remove(ignores.indexOf(on)); ignores.add(nn); } users.remove(on); users.add(nn); updateList(); serverMessage(on + " renamed to " + nn); }
/** * Write the file by writing the values from the labels, and the values list. * * @param strFile the file to be written. * @param aListLabels arraylist of texfields of labels. * @param aListValues arraylist of texfields of values. */ protected void writeFile( String strUser, String strFile, ArrayList aListLabels, ArrayList aListValues) { String strPath = FileUtil.openPath(strFile); String strLabel = ""; String strValue = ""; StringBuffer sbValues = new StringBuffer(); JTextField txfLabel = null; JTextField txfValue = null; boolean bNewFile = false; int nFDAMode = Util.getPart11Mode(); // if it's the part11 pnl and the mode is nonFDA, // then don't write the file for this panel // the other way is not true. if (this instanceof DisplayParentDirectory) { if ((isPart11Pnl() && nFDAMode == Util.NONFDA)) { return; } } if (strPath == null) { strPath = FileUtil.savePath(strFile); bNewFile = true; } if (strPath == null || aListLabels == null) return; if (aListValues == null) aListValues = new ArrayList(); // Get the list of the textfields for values and labels. int nLblSize = aListLabels.size(); int nValueSize = aListValues.size(); ArrayList<String> labelList = new ArrayList<String>(); // Get the value from each textfield, and add it to the buffer. for (int i = 0; i < nLblSize; i++) { txfLabel = (JTextField) aListLabels.get(i); txfValue = (i < nValueSize) ? (JTextField) aListValues.get(i) : null; strLabel = (txfLabel != null) ? txfLabel.getText() : null; strValue = (txfValue != null) ? txfValue.getText() : ""; // We need to be sure they don't have two data directories with // the same labels. Save the label list if we are writing to // the "data" file. if (strFile.indexOf("data") != -1) { if (labelList.contains(strLabel)) { Messages.postError( "The Data Directory specifications " + "must not have duplicate Label names. " + "The Label \"" + strLabel + "\" is duplicated. " + "Skipping the second instance. Please " + "specify a new Label."); continue; } else labelList.add(strLabel); } if (strLabel == null || strLabel.trim().length() <= 0 || strValue.equals(INFOSTR)) continue; // for user template tab, don't need to parse the value if (!(this instanceof DisplayTemplate)) strValue = getValue(strUser, strValue); strLabel = strLabel.trim(); if (strValue != null) strValue = strValue.trim(); // sbValues.append("\""); sbValues.append(strLabel); // sbValues.append("\" "); sbValues.append(File.pathSeparator); sbValues.append(strValue); sbValues.append("\n"); } if (Util.isPart11Sys()) writeAuditTrail(strPath, strUser, sbValues); // write the data to the file. BufferedWriter writer = WFileUtil.openWriteFile(strPath); WFileUtil.writeAndClose(writer, sbValues); // if it's a template file, then make it writable for everyone. if (bNewFile) { String strCmd = "chmod 755 "; if (this instanceof DisplayTemplate) strCmd = "chmod 777 "; if (Util.iswindows()) strPath = UtilB.windowsPathToUnix(strPath); String[] cmd = {WGlobal.SHTOOLCMD, WGlobal.SHTOOLOPTION, strCmd + strPath}; WUtil.runScriptInThread(cmd); } }
/** * Recieving method for private * * @param un the name of the user sending the message * @param message the message that was sent */ public void recievePrivate(String un, String message) { if (!ignores.contains(un)) { privates.recievePrivate(un, message); } }
/** * Reciving method for a whisper * * @param un the name of the user sending the whisper * @param message the message that was sent */ public void recieveWhisper(String un, String message) { if (!ignores.contains(un)) { sendText(un, message, true); } }
/** * Recieving method for a chat message * * @param un the name of the user sending the chat * @param message the message that was sent */ public void recieveChat(String un, String message) { if (!ignores.contains(un)) { sendText(un, message, false); } }
/** * Method to parse a command and perform the specified action * * @param cmd the command that the user typed * @return a status indicator to tell if the command was valid */ public boolean parseCommand(String cmd) { cmd = cmd.intern(); if (cmd == "help" || cmd == "?") { String commands = "Listing available commands:\n" + "<pre>\\help or \\? \t\t- display this message<br>" + "\\admin <passphrase> \t- become an admin<br>" + "\\create <channel> [password]\t- create a new channel with optional password<br>" + "\\join <channel> [password]\t- join channel with optional password<br>" + "\\disconnect \t\t- disconnect from server<br>" + "\\whisper <user> <message> \t- whisper to a user<br>" + "\\private <user> \t- start a private message session<br>" + "\\ignore <user> \t- ignores a user<br>" + "\\clearignore \t\t- clear list of ignores<br>" + "\\reconnect \t\t- attempt to reconnect to server<br>" + "\\rename <new name> \t- change your username<br>" + "\\invite <user> \t- invite user to join at your channel<br>"; if (admin) { commands += "\\kick <user> \t\t- kick user from room<br>" + "\\logstart \t\t- start logging sessoin<br>" + "\\logstop \t\t- stop logging session<br>"; } commands += "up or down \t\t- cycle your chat history</pre>"; sendText("server", commands, false); return true; } else if (cmd == "disconnect") { if (server != null) { stop(); } return true; } else if (cmd == "reconnect") { if (username == null) { error( "username still invalid. use \\rename <new name> to chose a new name and reconnect"); } else { if (server != null) { stop(); } server = new ServerConnection(this); } return true; } else if (cmd == "clearignore") { ignores.clear(); updateList(); serverMessage("ignore list cleared"); return true; } else if (cmd.startsWith("whisper")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\whisper <user> <message>"); return false; } cmd = cmd.substring(start + 1); start = cmd.indexOf(' '); if (start < 0) { error("usage: \\whisper <user> <message>"); return false; } String un = cmd.substring(0, start); if (username.equals(un) || !users.contains(un)) { error("invalid user"); return false; } String message = cmd.substring(start + 1); if (message.length() < 1) { error("usage: \\whisper <user> <message>"); } sendWhisper(un, message); sendText(username, message, true); return true; } else if (cmd.startsWith("invite")) { String channel = (String) cboChannels.getSelectedItem(); int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\invite <user>"); return false; } String un = cmd.substring(start + 1); if ((un.length() < 1) || (un.length() > 10) || (!un.matches("[\\w_-]+?"))) { error(un + " invalid user"); return false; } if (username.equals(un)) { error("You cannot invite youself"); return false; } if (users.contains(un)) { error(un + " is already in your Channel"); return false; } String message = un + " has been invited to join a channel " + channel; sendInvite(un, message); sendText(username, message, false); return true; } else if (cmd.startsWith("private")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\private <user>"); return false; } String un = cmd.substring(start + 1); if (username.equals(un)) { error("cannot private message yourself"); return false; } privates.newPrivate(un); return true; } else if (cmd.startsWith("rename")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\rename <newname>"); return false; } String newName = cmd.substring(start + 1); if ((newName.length() < 1) || (newName.length()) > 10 || (newName.equals("server")) || (!newName.matches("[\\w_-]+?"))) { error("invalid name"); return false; } if (!server.connected) { server = new ServerConnection(this); } if (username == null) { username = newName; server.writeObject(new SD_UserAdd(newName)); } else { rename(username, newName); username = newName; server.writeObject(new SD_Rename(null, username)); } return true; } else if (cmd.startsWith("ignore")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\ignre <user>"); return false; } ignore(cmd.substring(start + 1), false); return true; } else if (cmd.startsWith("join")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\join <channel> [password]"); return false; } String name = cmd.substring(start + 1); String pass = null; start = name.indexOf(' '); if (start > 0) { pass = name.substring(start + 1); name = name.substring(0, start); } server.writeObject(new SD_Channel(false, name, pass)); return true; } else if (cmd.startsWith("create")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\create <channel> [password]"); return false; } String name = cmd.substring(start + 1); String pass = null; start = name.indexOf(' '); if (start > 0) { pass = name.substring(start + 1); name = name.substring(0, start); } server.writeObject(new SD_Channel(true, name, pass)); return true; /* } else if (cmd.startsWith("proxy")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\proxy <host> <port>"); return false; } String phost = cmd.substring(start+1); start = phost.indexOf(' '); if (start < 0) { error("usage: \\proxy <host> <port>"); return false; } String pport = phost.substring(start+1); phost = phost.substring(0, start); Properties systemSettings = System.getProperties(); systemSettings.put("proxySet", "true"); systemSettings.put("proxyHost", phost); systemSettings.put("proxyPort", pport); System.setProperties(systemSettings); serverMessage("Using " + phost + ":" + pport + " as proxy server<br>you can type \\reconnect to reconnect with this proxy"); return true; */ } else if (cmd.startsWith("admin")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\admin <password>"); return false; } String pass = cmd.substring(start + 1); server.writeObject(new SD_AdminAdd(pass)); return true; } else if (admin && cmd.startsWith("kick")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\kick <user>"); return false; } String un = cmd.substring(start + 1); if (un.equals(username)) { error("cannot kick yourself"); return false; } server.writeObject(new SD_Kick(un)); return true; } else if (admin && cmd == "logstart") { server.writeObject(new SD_Log(true)); return true; } else if (admin && cmd == "logstop") { server.writeObject(new SD_Log()); return true; } error("unrecognized command, type \\help for help"); return false; }