changed Makefile; build all commands as an own file
[NeonServV5.git] / cmd_neonserv_register.c
index 24063899c4ea9deb86dfed55156eaccca17ee364..d336d7fc15a42f9e769c8ffe34f1d9b942e58e4b 100644 (file)
@@ -1,21 +1,24 @@
 
+#include "cmd_neonserv.h"
+
 /*
 * argv[0] - channel
 * argv[0/1] - nick / *auth
 */
 static AUTHLOOKUP_CALLBACK(neonserv_cmd_register_auth_lookup);
 static USERAUTH_CALLBACK(neonserv_cmd_register_nick_lookup);
-static void neonserv_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *channel, char *auth);
+static void neonserv_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *channel, char *auth);
 
 struct neonserv_cmd_register_cache {
     struct ClientSocket *client, *textclient;
     struct UserNode *user;
     struct ChanNode *chan;
+    struct Event *event;
     char *nick;
     char *channel;
 };
 
-static CMD_BIND(neonserv_cmd_register) {
+CMD_BIND(neonserv_cmd_register) {
     MYSQL_RES *res;
     MYSQL_ROW row;
     char *channel = argv[0];
@@ -23,20 +26,20 @@ static CMD_BIND(neonserv_cmd_register) {
         reply(getTextBot(), user, "NS_INVALID_CHANNEL_NAME", argv[0]);
         return;
     }
-    printf_mysql_query("SELECT `botid` FROM `bot_channels` LEFT JOIN `bots` ON `bot_channels`.`botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chan->channel_id, client->botid);
+    printf_mysql_query("SELECT `botid` FROM `bot_channels` LEFT JOIN `bots` ON `bot_channels`.`botid` = `bots`.`id` LEFT JOIN `channels` ON `bot_channels`.`chanid` = `channels`.`channel_id` WHERE `channel_name` = '%s' AND `botclass` = '%d'", escape_string(channel), client->botid);
     res = mysql_use();
     if ((row = mysql_fetch_row(res)) != NULL) {
         reply(getTextBot(), user, "NS_REGISTER_ALREADY", argv[0], client->user->nick);
         return;
     }
     //check own access
-    if(argv[0][0] == '*') {
+    if(argv[1][0] == '*') {
         //we've got an auth
-        argv[0]++;
-        printf_mysql_query("SELECT `user_user` FROM `users` WHERE `user_user` = '%s'", escape_string(argv[0]));
+        argv[1]++;
+        printf_mysql_query("SELECT `user_user` FROM `users` WHERE `user_user` = '%s'", escape_string(argv[1]));
         res = mysql_use();
         if ((row = mysql_fetch_row(res)) != NULL) {
-            neonserv_cmd_register_async1(client, getTextBot(), user, chan, channel, row[0]);
+            neonserv_cmd_register_async1(client, getTextBot(), user, chan, event, channel, row[0]);
         } else {
             //we need to create a new user...
             //but first lookup the auth to check if it really exists
@@ -49,18 +52,19 @@ static CMD_BIND(neonserv_cmd_register) {
             cache->textclient = getTextBot();
             cache->user = user;
             cache->chan = chan;
-            cache->nick = strdup(argv[0]);
+            cache->event = event;
+            cache->nick = strdup(argv[1]);
             cache->channel = strdup(channel);
-            lookup_authname(argv[0], neonserv_cmd_register_auth_lookup, cache);
+            lookup_authname(argv[1], neonserv_cmd_register_auth_lookup, cache);
         }
     } else {
-        struct UserNode *cuser = getUserByNick(argv[0]);
+        struct UserNode *cuser = getUserByNick(argv[1]);
         if(!cuser) {
-            cuser = createTempUser(argv[0]);
+            cuser = createTempUser(argv[1]);
             cuser->flags |= USERFLAG_ISTMPUSER;
         }
         if(cuser->flags & USERFLAG_ISAUTHED) {
-            neonserv_cmd_register_async1(client, getTextBot(), user, chan, channel, cuser->auth);
+            neonserv_cmd_register_async1(client, getTextBot(), user, chan, event, channel, cuser->auth);
         } else {
             struct neonserv_cmd_register_cache *cache = malloc(sizeof(*cache));
             if (!cache) {
@@ -71,7 +75,8 @@ static CMD_BIND(neonserv_cmd_register) {
             cache->textclient = getTextBot();
             cache->user = user;
             cache->chan = chan;
-            cache->nick = strdup(argv[0]);
+            cache->event = event;
+            cache->nick = strdup(argv[1]);
             cache->channel = strdup(channel);
             get_userauth(cuser, neonserv_cmd_register_nick_lookup, cache);
         }
@@ -84,7 +89,7 @@ static AUTHLOOKUP_CALLBACK(neonserv_cmd_register_auth_lookup) {
         //AUTH_DOES_NOT_EXIST
         reply(cache->textclient, cache->user, "NS_AUTH_UNKNOWN", cache->nick);
     } else
-        neonserv_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->channel, auth);
+        neonserv_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, cache->channel, auth);
     free(cache->channel);
     free(cache->nick);
     free(cache);
@@ -101,13 +106,13 @@ static USERAUTH_CALLBACK(neonserv_cmd_register_nick_lookup) {
         reply(cache->textclient, cache->user, "NS_USER_NEED_AUTH", cache->nick);
     }
     else
-        neonserv_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->channel, user->auth);
+        neonserv_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, cache->channel, user->auth);
     free(cache->channel);
     free(cache->nick);
     free(cache);
 }
 
-static void neonserv_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *channel, char *auth) {
+static void neonserv_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *channel, char *auth) {
     //we've got a valid auth now...
     MYSQL_RES *res;
     MYSQL_ROW row, row2;
@@ -126,7 +131,7 @@ static void neonserv_cmd_register_async1(struct ClientSocket *client, struct Cli
         printf_mysql_query("INSERT INTO `users` (`user_user`) VALUES ('%s')", escape_string(auth));
         userid = (int) mysql_insert_id(mysql_conn);
     }
-    printf_mysql_query("SELECT `botid`, `max_channels`, `defaulttrigger` FROM `bots` WHERE `botclass` = '%d' ORDER BY `register_priority` DESC", client->botid);
+    printf_mysql_query("SELECT `id`, `max_channels`, `defaulttrigger` FROM `bots` WHERE `botclass` = '%d' ORDER BY `register_priority` DESC", client->botid);
     res = mysql_use();
     int botid = 0;
     char *bottrigger;
@@ -167,4 +172,5 @@ static void neonserv_cmd_register_async1(struct ClientSocket *client, struct Cli
     printf_mysql_query("DELETE FROM `chanusers` WHERE `chanuser_cid` = '%d'", chanid);
     printf_mysql_query("INSERT INTO `chanusers` (`chanuser_cid`, `chanuser_uid`, `chanuser_access`) VALUES ('%d', '%d', '%d')", chanid, userid, 500);
     reply(textclient, user, "NS_REGISTER_DONE", channel, auth);
+    logEvent(event);
 }