From: John Runyon Date: Wed, 17 Apr 2013 05:42:02 +0000 (-0500) Subject: Adding auth X-Git-Url: https://jfr.im/git/z_archive/kelsier.git/commitdiff_plain/36e6a9fe974d3e2dad010d4e692d5a860cba52b9 Adding auth --- diff --git a/Bot.cs b/Bot.cs index 3384faa..3a32217 100644 --- a/Bot.cs +++ b/Bot.cs @@ -65,9 +65,17 @@ public class Bot { this.localip = rdr.GetString("bindip"); this.local = new IPEndPoint(IPAddress.Parse(this.localip), 0); } - this.server = rdr.GetString("server"); this.serverport = rdr.GetInt32("serverport"); + + rdr.Close(); + + // TODO move this part into a 001 hook. + MySqlDataReader rdr = Info.db.queryReader("SELECT authname, authpass FROM m_id_quakenet WHERE botid = @id", new object[] { "@id", id }); + rdr.Read(); + this.authname = rdr.GetString("authname"); + this.authpass = rdr.GetString("authpass"); + rdr.Close(); } public string connect() { @@ -76,8 +84,8 @@ public class Bot { s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s.Bind(local); s.Connect(server, serverport); - - register(); + + register(); Stator rcvstate = new Stator(); s.BeginReceive(rcvstate.buffer, 0, 1, SocketFlags.None, new AsyncCallback(dataIn), rcvstate); @@ -90,8 +98,8 @@ public class Bot { s.EndReceive(ar); if (rcvstate.buffer[0] == '\n') { - string linein = rcvstate.buffersb.ToString(); - processData(linein); + string linein = rcvstate.buffersb.ToString(); + processData(linein); rcvstate = new Stator(); } else if (rcvstate.buffer[0] != '\r') { rcvstate.buffersb.Append(Encoding.ASCII.GetString(rcvstate.buffer, 0, 1)); @@ -106,55 +114,57 @@ public class Bot { private void processData(string data) { log.info("<<< " + data); - string[] parts; - string source = null; - if (data.StartsWith(":")) { - parts = data.Split((char[])null, 2, StringSplitOptions.RemoveEmptyEntries); - source = parts[0].Substring(1); - data = parts[1]; - } - - parts = data.Split((char[])null, 2, StringSplitOptions.RemoveEmptyEntries); - if (parts[0] == "PRIVMSG") { - processMsg(source, parts[1]); - } else if (parts[0] == "376") { - send("JOIN #jobbig.kelsier"); - } else if (parts[0] == "PING") { - send("PONG "+parts[1]); - } + string[] parts; + string source = null; + if (data.StartsWith(":")) { + parts = data.Split((char[])null, 2, StringSplitOptions.RemoveEmptyEntries); + source = parts[0].Substring(1); + data = parts[1]; + } + + parts = data.Split((char[])null, 2, StringSplitOptions.RemoveEmptyEntries); + if (parts[0] == "PRIVMSG") { + processMsg(source, parts[1]); + } else if (parts[0] == "376") { + send("AUTH "+this.authname+" "+this.authpass); // TODO 001 hook + send("MODE "+this.nick+" +x-w"); + send("JOIN #jobbig"); + } else if (parts[0] == "PING") { + send("PONG "+parts[1]); + } + } + // processMsg("DimeCadmium!dime@jobbig.eu", "#mustis :hi"); + private void processMsg(string source, string data) { + string[] dataparts = data.Split((char[])null, 2, StringSplitOptions.RemoveEmptyEntries); + + string nick = (source.Split(new char[] { '!' }))[0]; + string target = dataparts[0]; + string message = dataparts[1]; + if (message.StartsWith(":")) + message = message.Substring(1); + string[] msgparts = message.Split((char[])null, StringSplitOptions.RemoveEmptyEntries); + + // TODO check msgparts[0] first char for trigger + string cmdstr = msgparts[0].Substring(1); + string[] args; + bool chanmsg; + Channel chan; + if (target.StartsWith("#")) { + chanmsg = true; + args = new string[msgparts.Length - 1]; + Array.Copy(msgparts, 1, args, 0, msgparts.Length - 1); + chan = new Channel(target); + } else { + chanmsg = false; + args = new string[msgparts.Length - 2]; + Array.Copy(msgparts, 2, args, 0, msgparts.Length - 2); + chan = new Channel(msgparts[1]); + } + + User user = new User(nick); + + Command cmd = new Command(this, cmdstr, args, user, chan, chanmsg); } - // processMsg("DimeCadmium!dime@jobbig.eu", "#mustis :hi"); - private void processMsg(string source, string data) { - string[] dataparts = data.Split((char[])null, 2, StringSplitOptions.RemoveEmptyEntries); - - string nick = (source.Split(new char[] { '!' }))[0]; - string target = dataparts[0]; - string message = dataparts[1]; - if (message.StartsWith(":")) - message = message.Substring(1); - string[] msgparts = message.Split((char[])null, StringSplitOptions.RemoveEmptyEntries); - - // TODO check msgparts[0] first char for trigger - string cmdstr = msgparts[0].Substring(1); - string[] args; - bool chanmsg; - Channel chan; - if (target.StartsWith("#")) { - chanmsg = true; - args = new string[msgparts.Length - 1]; - Array.Copy(msgparts, 1, args, 0, msgparts.Length - 1); - chan = new Channel(target); - } else { - chanmsg = false; - args = new string[msgparts.Length - 2]; - Array.Copy(msgparts, 2, args, 0, msgparts.Length - 2); - chan = new Channel(msgparts[1]); - } - - User user = new User(nick); - - Command cmd = new Command(this, cmdstr, args, user, chan, chanmsg); - } private void register() { send(String.Format("NICK {0}", nick)); diff --git a/Channel.cs b/Channel.cs index 41ee5f2..e15e1d4 100644 --- a/Channel.cs +++ b/Channel.cs @@ -21,11 +21,11 @@ using System; namespace Kelsier.Common { - public class Channel { - public string name { get; private set; } - public Channel(string name) { - this.name = name; - } - } + public class Channel { + public string name { get; private set; } + public Channel(string name) { + this.name = name; + } + } } diff --git a/Command.cs b/Command.cs index fb48995..85b8603 100644 --- a/Command.cs +++ b/Command.cs @@ -21,27 +21,27 @@ using System; namespace Kelsier.Common { - public class Command { + public class Command { public Bot bot { get; private set; } - public string cmd { get; private set; } - public string[] args { get; private set; } - public User user { get; private set; } - public Channel chan { get; private set; } - public bool chanmsg { get; private set; } - public string replyTo { get; private set; } - - public Command(Bot bot, string cmd, string[] args, User user, Channel chan, bool chanmsg) { + public string cmd { get; private set; } + public string[] args { get; private set; } + public User user { get; private set; } + public Channel chan { get; private set; } + public bool chanmsg { get; private set; } + public string replyTo { get; private set; } + + public Command(Bot bot, string cmd, string[] args, User user, Channel chan, bool chanmsg) { this.bot = bot; - this.cmd = cmd; - this.args = args; - this.user = user; - this.chan = chan; - this.chanmsg = chanmsg; - if (chanmsg) - this.replyTo = chan.name; - else - this.replyTo = user.nick; - } - } + this.cmd = cmd; + this.args = args; + this.user = user; + this.chan = chan; + this.chanmsg = chanmsg; + if (chanmsg) + this.replyTo = chan.name; + else + this.replyTo = user.nick; + } + } } diff --git a/User.cs b/User.cs index bb83019..f096ac6 100644 --- a/User.cs +++ b/User.cs @@ -21,11 +21,11 @@ using System; namespace Kelsier.Common { - public class User { - public string nick { get; private set; } - public User(string nick) { - this.nick = nick; - } - } + public class User { + public string nick { get; private set; } + public User(string nick) { + this.nick = nick; + } + } } diff --git a/dbdump.sql b/dbdump.sql index e0b0c5c..1c9349c 100644 --- a/dbdump.sql +++ b/dbdump.sql @@ -1,14 +1,25 @@ -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +DROP TABLE IF EXISTS `bots`; CREATE TABLE `bots` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `nick` varchar(40) NOT NULL, + `nick` varchar(30) NOT NULL, `ident` varchar(10) NOT NULL DEFAULT 'kelsier', - `realname` varchar(100) NOT NULL DEFAULT 'Kelsier IRC Bot', + `realname` varchar(100) NOT NULL DEFAULT 'Kelsier', `bindip` varchar(15) DEFAULT NULL, `server` varchar(100) NOT NULL DEFAULT 'irc.quakenet.org', `serverport` smallint(5) unsigned NOT NULL DEFAULT '6667', - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + UNIQUE KEY `nick` (`nick`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; INSERT INTO `bots` VALUES (1,'Kelsier','kelsier','Kelsier IRC Bot',NULL,'irc.quakenet.org',6667); + +DROP TABLE IF EXISTS `m_id_quakenet`; +CREATE TABLE `m_id_quakenet` ( + `botid` int(10) unsigned NOT NULL, + `authname` varchar(15) NOT NULL, + `authpass` varchar(10) NOT NULL, + PRIMARY KEY (`botid`), + CONSTRAINT `m_id_quakenet_ibfk_1` FOREIGN KEY (`botid`) REFERENCES `bots` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + +-- mysqldump -ukelsier -p kelsier --compact --add-drop-table >dbdump.sql