From: Orillion Date: Sat, 29 Aug 2015 17:49:42 +0000 (-0400) Subject: SWEBIRC and REALHOST processing X-Git-Url: https://jfr.im/git/irc/rizon/acid.git/commitdiff_plain/fe3b37463d71ea7252e11a2ed2c0b0ca1db6ff1d SWEBIRC and REALHOST processing --- diff --git a/acid/src/main/java/net/rizon/acid/core/Acidictive.java b/acid/src/main/java/net/rizon/acid/core/Acidictive.java index 0d842f4..c9cb07b 100644 --- a/acid/src/main/java/net/rizon/acid/core/Acidictive.java +++ b/acid/src/main/java/net/rizon/acid/core/Acidictive.java @@ -555,6 +555,12 @@ public class Acidictive extends AcidCore e.onChanModes(creator, chan, modes); } + public static void onWebIRC(Server source, String operation, String uid, String realhost, String sockhost, String webircPassword, String webircUsername, String fakeHost, String fakeIp) + { + for (Event e : Event.getEvents()) + e.onWebIRC(source, operation, uid, realhost, sockhost, webircPassword, webircUsername, fakeHost, fakeIp); + } + public static void setMode(String source, String target, String modes) { Channel c = Channel.findChannel(target); diff --git a/acid/src/main/java/net/rizon/acid/core/Event.java b/acid/src/main/java/net/rizon/acid/core/Event.java index 7c104a6..6010735 100644 --- a/acid/src/main/java/net/rizon/acid/core/Event.java +++ b/acid/src/main/java/net/rizon/acid/core/Event.java @@ -45,6 +45,7 @@ public abstract class Event public void onUserMode(User user, String oldmodes, String newmodes) { } public void onChanModes(String prefix, Channel chan, String modes) { } + public void onWebIRC(Server source, String operation, String uid, String realhost, String sockhost, String webircPassword, String webircUsername, String fakeHost, String fakeIp) { }; public void onRehash() throws Exception { } diff --git a/acid/src/main/java/net/rizon/acid/core/Protocol.java b/acid/src/main/java/net/rizon/acid/core/Protocol.java index 9adaf2c..dcc59bc 100644 --- a/acid/src/main/java/net/rizon/acid/core/Protocol.java +++ b/acid/src/main/java/net/rizon/acid/core/Protocol.java @@ -235,4 +235,17 @@ public class Protocol { encap(target.getServer().getName(), "CHGCLASS", target.getUID() + " " + clazz); } + + public static void chgrealhost(User target, String sockhost, String realhost) + { + encap(target.getServer().getName(), "CHGREALHOST", target.getUID() + " " + sockhost + " " + realhost); + } + + public static void swebirc(String flag, String uid, String host, String ip, String password, String name, String fakeSockHost, String fakeHost, String ... args) + { + if (flag.equalsIgnoreCase("REQ") || flag.equalsIgnoreCase("ACK") || flag.equalsIgnoreCase("NAK")) + { + encap("*", "SWEBIRC", flag.toUpperCase() + " " + uid + " " + host + " " + ip + " * * " + password + " " + name + " " + fakeSockHost + " :" + fakeHost); + } + } } diff --git a/acid/src/main/java/net/rizon/acid/core/User.java b/acid/src/main/java/net/rizon/acid/core/User.java index cbc15f0..5d3ef64 100644 --- a/acid/src/main/java/net/rizon/acid/core/User.java +++ b/acid/src/main/java/net/rizon/acid/core/User.java @@ -164,6 +164,12 @@ public class User implements Comparable return s; } + public void setRealhost(String ip, String host) + { + this.ip = ip; + this.host = host; + } + public void setFlags(String flags) { this.flags = flags; diff --git a/acid/src/main/java/net/rizon/acid/messages/Encap.java b/acid/src/main/java/net/rizon/acid/messages/Encap.java index 1cd2a0d..580cc39 100644 --- a/acid/src/main/java/net/rizon/acid/messages/Encap.java +++ b/acid/src/main/java/net/rizon/acid/messages/Encap.java @@ -1,6 +1,9 @@ package net.rizon.acid.messages; +import java.util.ArrayList; +import java.util.List; import net.rizon.acid.core.AcidCore; +import net.rizon.acid.core.Acidictive; import net.rizon.acid.core.Message; import net.rizon.acid.core.Server; import net.rizon.acid.core.User; @@ -67,5 +70,30 @@ public class Encap extends Message user.setAuthFlags(params[3]); } + else if (params[1].equals("SWEBIRC")) + { + int parc = params.length; + if (parc < 10) + return; + + Acidictive.onWebIRC(source, + params[2], // operation + params[3], // uid + params[4], // realhost + params[5], // sockhost + params[parc - 4], // webirc password + params[parc - 3], // webirc username + params[parc - 2], // requested host + params[parc - 1] // requested ip + ); + } + else if (params[1].equals("CHGREALHOST")) + { + User user = User.findUser(params[2]); + if (user == null) + return; + + user.setRealhost(params[3], params[4]); + } } } \ No newline at end of file