+#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];
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);
if(argv[1][0] == '*') {
//we've got an auth
argv[1]++;
- printf_mysql_query("SELECT `user_user` FROM `users` WHERE `user_user` = '%s'", escape_string(argv[0]));
+ 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
cache->textclient = getTextBot();
cache->user = user;
cache->chan = chan;
+ cache->event = event;
cache->nick = strdup(argv[1]);
cache->channel = strdup(channel);
lookup_authname(argv[1], neonserv_cmd_register_auth_lookup, cache);
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) {
cache->textclient = getTextBot();
cache->user = user;
cache->chan = chan;
+ cache->event = event;
cache->nick = strdup(argv[1]);
cache->channel = strdup(channel);
get_userauth(cuser, neonserv_cmd_register_nick_lookup, cache);
//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);
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;
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);
}