added new auth-check security feature
[NeonServV5.git] / src / DBHelper.c
index 4f3dd757262d0150e93a3966731b163d6712ee92..980ee7ae80c651b4484026f2136e6f3a05eef093 100644 (file)
@@ -24,6 +24,7 @@
 #include "tools.h"
 #include "IRCEvents.h"
 #include "HandleInfoHandler.h"
+#include "ClientSocket.h"
 
 void _loadUserSettings(struct UserNode *user) {
     SYNCHRONIZE(cache_sync);
@@ -301,6 +302,45 @@ static AUTHLOOKUP_CALLBACK(event_user_registered_auth_lookup) {
     free(cache->oldauth);
 }
 
+void deleteUser(int userid) {
+    //simply delete the user
+    MYSQL_RES *res, *res2;
+    MYSQL_ROW row, row2;
+    printf_mysql_query("SELECT a.`chanuser_access`, a.`chanuser_cid`, (SELECT COUNT(*) FROM `chanusers` AS b WHERE b.`chanuser_cid` = a.`chanuser_cid` AND b.`chanuser_access` = 500) FROM `chanusers` AS a WHERE a.`chanuser_uid` = '%d'", userid);
+    res = mysql_use();
+    while((row = mysql_fetch_row(res))) {
+        if(!strcmp(row[0], "500") && !strcmp(row[2], "1")) {
+            //unregister channel
+            printf_mysql_query("SELECT `botid`, `channel_name` FROM `bot_channels` LEFT JOIN `channels` ON `chanid` = `channel_id` WHERE `chanid` = '%s' AND `suspended` = '0'", row[1]);
+            res2 = mysql_use();
+            while((row2 = mysql_fetch_row(res))) {
+                struct ClientSocket *bot;
+                int clientid = atoi(row2[0]);
+                for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
+                    if(bot->clientid == clientid)
+                        putsock(bot, "PART %s :Channel unregistered.", row2[1]);
+                }
+            }
+            printf_mysql_query("DELETE FROM `bot_channels` WHERE `chanid` = '%s'", row[1]);
+        }
+    }
+    printf_mysql_query("DELETE FROM `chanusers` WHERE `chanuser_uid` = '%d'", userid);
+    printf_mysql_query("UPDATE `bans` SET `ban_owner` = 0 WHERE `ban_owner` = '%d'", userid);
+    printf_mysql_query("UPDATE `donotregister` SET `dnr_user` = 0 WHERE `dnr_user` = '%d'", userid);
+    printf_mysql_query("UPDATE `bans` SET `ban_owner` = 0 WHERE `ban_owner` = '%d'", userid);
+    printf_mysql_query("UPDATE `godlog` SET `godlog_uid` = 0 WHERE `godlog_uid` = '%d'", userid);
+    printf_mysql_query("DELETE FROM `noinvite` WHERE `uid` = '%d'", userid);
+    printf_mysql_query("UPDATE `owner_history` SET `owner_history_to_uid` = 0 WHERE `owner_history_to_uid` = '%d'", userid);
+    printf_mysql_query("UPDATE `owner_history` SET `owner_history_from_uid` = 0 WHERE `owner_history_from_uid` = '%d'", userid);
+    printf_mysql_query("UPDATE `channels` SET `channel_registrator` = 0 WHERE `channel_registrator` = '%d'", userid);
+    printf_mysql_query("DELETE FROM `users` WHERE `user_id` = '%d'", userid);
+    struct UserNode *user;
+    for(user = getAllUsers(NULL); user; user = getAllUsers(user)) {
+        if(user->flags & USERFLAG_HAS_USERID)
+            user->flags &= ~USERFLAG_HAS_USERID;
+    }
+}
+
 void init_DBHelper() {
     bind_registered(event_user_registered);
 }