public synchronized IpBan getBan(String ip) throws Exception { for (IpBan ipban : ipBans) { if (ipban.getIps().contains(ip)) { if (ipban.isOver()) { this.removeBan(ipban); throw new Exception("Ban over"); } if (ipban.isExpired()) { this.removeBan(ipban); ipban = ipban.expire(); if (ipban != null) { this.addBan(ipban); return ipban; } else { throw new Exception("Ban expired"); } } return ipban; } } return null; }
/** * Adds ban to ban list and saves * * @param ban the IpBan to add * @return 0 - Success<br> * 1 - Already banned<br> * 2 - Error saving */ public synchronized byte addBan(IpBan ban) { for (IpBan ipban : ipBans) { if (!Collections.disjoint(ipban.getIps(), ban.getIps())) // Any in common { if (ipban.isOver()) { this.removeBan(ipban); break; } if (ipban.isExpired()) { this.removeBan(ipban); ipban = ipban.expire(); if (ipban == null) break; // Ban is over, continue on else { this.addBan(ipban); return 1; } } } } this.ipBans.add(ban); try { FileWriter fOut = new FileWriter(file, true); String line = "IP: "; for (int i = 0; i < ban.getIps().size() - 1; i++) { line += (ban.getIps().get(i) + ","); } line += ban.getIps().get(ban.getIps().size() - 1); // No comma for last line += " "; line += ban.getReason(); line += "\u00C4"; line += ban.getInfo(); line += "\u00C4"; line += ban.getEndTime(); line += " "; line += (ban.getUUID() == null) ? "null" : ban.getUUID().toString(); line += " "; line += (ban.getBannerUUID() == null) ? "null" : ban.getBannerUUID().toString(); line += " "; line += ban.isRequest(); if (ban.isRequest()) { line += " "; line += ban.getExpireTime(); line += " "; line += ban.isApproveOnExpire(); } line += "\n"; fOut.write(line); fOut.close(); } catch (IOException e) { pl.getLogger().severe("Could not write to " + file.getName()); pl.getLogger().throwing(this.getClass().getName(), "add", e); return 2; // TODO: } return 0; }
public synchronized byte removeBan(IpBan ban) { boolean foundBan = false; for (int i = 0; i < this.ipBans.size(); i++) { if (ipBans.get(i).getIps().containsAll(ban.getIps())) { ipBans.remove(i); foundBan = true; break; } } if (!foundBan) return 1; Scanner in; try { in = new Scanner(file); } catch (FileNotFoundException e) { pl.getLogger().severe("ipbans.dat appears to exist, but Scanner threw exception."); pl.getLogger().throwing(this.getClass().getName(), "load", e); return 2; } List<String> buffer = new ArrayList<String>(10); while (in.hasNextLine()) { buffer.add(in.nextLine()); } in.close(); for (int i = 0; i < buffer.size(); i++) { String line = buffer.get(i); if (!line.startsWith("IP: ")) { continue; } String[] parts = line.split(" "); if (parts.length >= 2) { String[] ips = parts[1].split(","); if (ban.getIps().containsAll(Arrays.asList(ips))) { buffer.remove(i); break; } } } FileWriter fOut; try { fOut = new FileWriter(file, false); } catch (IOException e) { pl.getLogger().severe("Error while trying to overwrite " + file.getName()); e.printStackTrace(); return 2; } try { for (int i = 0; i < buffer.size(); i++) { fOut.write(buffer.get(i) + "\n"); } fOut.close(); } catch (IOException e) { pl.getLogger().severe("Error while trying to write to " + file.getName()); e.printStackTrace(); return 2; } return 0; }