diff --git a/includes/ft_irc.hpp b/includes/ft_irc.hpp index 677abc5..ff22092 100644 --- a/includes/ft_irc.hpp +++ b/includes/ft_irc.hpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/01 17:27:37 by apommier #+# #+# */ -/* Updated: 2023/02/22 13:40:08 by apommier ### ########.fr */ +/* Updated: 2023/02/23 21:12:34 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -92,7 +92,7 @@ struct userMode bool w; //- l'utilisateur reçoit les WALLOPs ; bool o; //- drapeau d'opérateur. - userMode() + userMode() : i(0), s(0), w(0), @@ -129,11 +129,11 @@ struct channelData //each chan have one { std::string name; std::string topic; - +6 std::vector userList; std::vector banList; - //std::vector invitedList; - //std::vector verboseList; + std::vector invitedList; + std::vector verboseList; std::vector opList; chanMode mode; @@ -178,6 +178,7 @@ void delete_user(fdList &allFds, int userNbr); /* *********************************UTILS************************************ */ /* ************************************************************************** */ +int find_client_list(std::vector &list, clientData *client); void ft_putstr_fd(int fd, std::string str); void cmd_error(fdList &allFds, int userNbr, std::string error); void cmd_reply(fdList &allFds, int userNbr, std::string error); diff --git a/srcs/commands/channel/join.cpp b/srcs/commands/channel/join.cpp index 8ed5bd1..8be3f27 100644 --- a/srcs/commands/channel/join.cpp +++ b/srcs/commands/channel/join.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/09 15:40:33 by apommier #+# #+# */ -/* Updated: 2023/02/19 18:18:29 by apommier ### ########.fr */ +/* Updated: 2023/02/23 20:33:50 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -39,13 +39,13 @@ void leave_all(fdList &allFds, int userNbr) int chan_check(fdList &allFds, int userNbr, int chanNbr, std::vector splitBuff) { std::string errorStr; - if (0/*banned*/) + if (find_client_list(allFds.channelList[chanNbr].banList, &allFds.userData[userNbr]) == -1) { errorStr = "474 * JOIN " + allFds.channelList[chanNbr].name + " :Cannot join channel (+b)\n"; cmd_error(allFds, allFds.userData[userNbr].fd, errorStr); //ERR_INVITEONLYCHAN return (0); } - if (allFds.channelList[chanNbr].mode.i) + else if (allFds.channelList[chanNbr].mode.i && find_client_list(allFds.channelList[chanNbr].invitedList, &allFds.userData[userNbr]) == -1) { errorStr = "461 * JOIN " + allFds.channelList[chanNbr].name + " :Cannot join channel (+i)\n"; cmd_error(allFds, allFds.userData[userNbr].fd, errorStr); //ERR_INVITEONLYCHAN @@ -73,6 +73,7 @@ int chan_check(fdList &allFds, int userNbr, int chanNbr, std::vector splitBuff; @@ -87,6 +88,8 @@ void join_or_create(std::string buffer, fdList &allFds, int userNbr) allFds.channelList[chanNbr].userList.push_back(&allFds.userData[userNbr]);//add user in chan data allFds.channelList[chanNbr].nbrUser++; joined_chan = *(allFds.userData[userNbr].joinedChan.back()); + if ((invitedUser = find_client_list(allFds.channelList[chanNbr].invitedList, &allFds.userData[userNbr])) != -1) + allFds.channelList[chanNbr].invitedList.erase(allFds.channelList[chanNbr].invitedList.begin() + invitedUser); } else //chan doesn't exist yet { @@ -101,6 +104,12 @@ void join_or_create(std::string buffer, fdList &allFds, int userNbr) allFds.channelList.push_back(new_chan); allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList.back());//add chan in user data } + // if (chanNbr == -1) + // { + // chanNbr = + // find_channel(allFds, splitBuff[1]) + // } + std::string fullMsg; fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip + " JOIN :" + joined_chan.name + "\n"; for (int i = 0; i < joined_chan.nbrUser; i++) @@ -175,8 +184,7 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr) std::cout << "userNbr= " << userNbr << std::endl; if (!allFds.userData[userNbr].registered) { - std::cout << "user not registered\n"; - cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not registered\n"); //ERR_NEEDMOREPARAMS + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not registered\n"); return ; } split(buffer, ' ', splitBuff); diff --git a/srcs/commands/channel/part.cpp b/srcs/commands/channel/part.cpp index 407d91b..b72d2a1 100644 --- a/srcs/commands/channel/part.cpp +++ b/srcs/commands/channel/part.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/19 22:10:07 by apommier #+# #+# */ -/* Updated: 2023/02/20 17:50:46 by apommier ### ########.fr */ +/* Updated: 2023/02/23 17:46:29 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -51,6 +51,11 @@ void PART(std::string buffer, fdList &allFds, int userNbr) std::vector splitChan; std::string msg; + if (!allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * PART :You have not registered\n"); + return ; + } split(buffer, ' ', splitBuff); if (splitBuff.size() < 2) { diff --git a/srcs/commands/channel/privmsg.cpp b/srcs/commands/channel/privmsg.cpp index f57ae02..de2f1f4 100644 --- a/srcs/commands/channel/privmsg.cpp +++ b/srcs/commands/channel/privmsg.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 08:53:03 by apommier #+# #+# */ -/* Updated: 2023/02/20 11:51:26 by apommier ### ########.fr */ +/* Updated: 2023/02/23 17:46:47 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,6 +25,11 @@ void PRIVMSG(std::string buffer, fdList &allFds, int userNbr) std::vector splitBuff; std::string msg; + if (!allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * PRIVMSG :You have not registered\n"); + return ; + } std::cout << "privmsg bufer= --" << buffer << std::endl; split(buffer, ' ', splitBuff); if (splitBuff.size() < 2) @@ -63,11 +68,17 @@ void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr) cmd_error(allFds, allFds.userData[userNbr].fd, "442 * PRIVMSG " + dest + " :You're not on that channel\n"); return ; } - // if (allFds.channelList[pos].mode.m && !allFds.userData[userNbr].op && !is_chan_op(allFds, &allFds.channelList[pos], userNbr) && !allFds.channelList[pos].userMode[nbr].v) + // if (find_client_list(allFds.channelList[pos].verboseList, &allFds.userData[userNbr]) != -1) // { - // cmd_error(allFds, allFds.userData[userNbr].fd, "404 * PRIVMSG " + dest + " :Cannot send to channel\n"); - // return ; + // allFds.channelList[pos].verboseList.erase(); // } + if (allFds.channelList[pos].mode.m && !allFds.userData[userNbr].op + && !is_chan_op(allFds, &allFds.channelList[pos], userNbr) + && find_client_list(allFds.channelList[pos].verboseList, &allFds.userData[userNbr]) == -1) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "404 * PRIVMSG " + dest + " :Cannot send to channel\n"); + return ; + } for (size_t i = 0; i < allFds.channelList[pos].userList.size(); i++) { std::cout << "send nickname " << allFds.channelList[pos].userList[i]->nickname << std::endl; diff --git a/srcs/commands/channel_op/invite.cpp b/srcs/commands/channel_op/invite.cpp index 549c147..b4f18a4 100644 --- a/srcs/commands/channel_op/invite.cpp +++ b/srcs/commands/channel_op/invite.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:56 by apommier #+# #+# */ -/* Updated: 2023/02/19 22:27:00 by apommier ### ########.fr */ +/* Updated: 2023/02/23 17:47:06 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,10 +23,16 @@ void INVITE(std::string buffer, fdList &allFds, int userNbr) { std::vector splitBuff; + std::string msg; int invitedNbr; channelData chan; int chanNbr; + if (!allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * INVITE :You have not registered\n"); + return ; + } split(buffer, ' ', splitBuff); if (splitBuff.size() < 3) { @@ -68,6 +74,7 @@ void INVITE(std::string buffer, fdList &allFds, int userNbr) std::cout << "invite him !!!!" << splitBuff[1] << " to " << splitBuff[2] << std::endl; //RPL_INVITING //RPL_AWAY - //set authorization to join - return ; + chan.invitedList.push_back(&allFds.userData[invitedNbr]);//set authorization to join + msg = "341 " + allFds.userData[userNbr].nickname + " " + chan.name + " " + splitBuff[1] + "\n"; + cmd_reply(allFds, allFds.userData[userNbr].fd, msg); } \ No newline at end of file diff --git a/srcs/commands/channel_op/kick.cpp b/srcs/commands/channel_op/kick.cpp index 7030c2f..f7f61df 100644 --- a/srcs/commands/channel_op/kick.cpp +++ b/srcs/commands/channel_op/kick.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:32 by apommier #+# #+# */ -/* Updated: 2023/02/21 00:42:37 by apommier ### ########.fr */ +/* Updated: 2023/02/23 17:47:18 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,6 +23,11 @@ void KICK(std::string buffer, fdList &allFds, int userNbr) int userPos; channelData chan; + if (!allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * KICK :You have not registered\n"); + return ; + } split(buffer, ' ', splitBuff); if (splitBuff.size() < 3) { diff --git a/srcs/commands/channel_op/topic.cpp b/srcs/commands/channel_op/topic.cpp index e87d0b5..b812edc 100644 --- a/srcs/commands/channel_op/topic.cpp +++ b/srcs/commands/channel_op/topic.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:52 by apommier #+# #+# */ -/* Updated: 2023/02/19 22:07:14 by apommier ### ########.fr */ +/* Updated: 2023/02/23 17:47:37 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,6 +19,11 @@ void TOPIC(std::string buffer, fdList &allFds, int userNbr) std::vector splitBuff; std::cout << "topic im here1\n";//RPL_NOTOPIC //RPL_TOPIC + if (!allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * TOPIC :You have not registered\n"); + return ; + } split(buffer, ' ', splitBuff); if (splitBuff.size() < 2) { diff --git a/srcs/commands/operator/kill.cpp b/srcs/commands/operator/kill.cpp index d63f40b..8eb1dc0 100644 --- a/srcs/commands/operator/kill.cpp +++ b/srcs/commands/operator/kill.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/15 16:34:57 by apommier #+# #+# */ -/* Updated: 2023/02/15 19:50:16 by apommier ### ########.fr */ +/* Updated: 2023/02/23 17:47:50 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,6 +16,12 @@ void KILL(std::string buffer, fdList &allFds, int userNbr) { int pos; std::vector splitBuff; + + if (!allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * KILL :You have not registered\n"); + return ; + } split(buffer, ' ', splitBuff); if (splitBuff.size() < 3) { diff --git a/srcs/commands/operator/oper.cpp b/srcs/commands/operator/oper.cpp index c890d2e..0f3cd02 100644 --- a/srcs/commands/operator/oper.cpp +++ b/srcs/commands/operator/oper.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:04:47 by apommier #+# #+# */ -/* Updated: 2023/02/17 20:38:40 by apommier ### ########.fr */ +/* Updated: 2023/02/23 17:48:01 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,6 +17,11 @@ void OPER(std::string buffer, fdList &allFds, int userNbr) std::vector splitBuff; std::string msg; + if (!allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * OPER :You have not registered\n"); + return ; + } split(buffer, ' ', splitBuff); if (splitBuff.size() < 3) { diff --git a/srcs/commands/operator/squit.cpp b/srcs/commands/operator/squit.cpp index 3f1b760..8cd30cd 100644 --- a/srcs/commands/operator/squit.cpp +++ b/srcs/commands/operator/squit.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:11:03 by apommier #+# #+# */ -/* Updated: 2023/02/15 20:05:27 by apommier ### ########.fr */ +/* Updated: 2023/02/23 17:48:11 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,6 +22,12 @@ void SQUIT(std::string buffer, fdList &allFds, int userNbr) std::cout << "squit | server end\n"; std::vector splitBuff; split(buffer, ' ', splitBuff); + + if (!allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * SQUIT :You have not registered\n"); + return ; + } if (splitBuff.size() < 2) { cmd_error(allFds, allFds.userData[userNbr].fd, "431 * SQUIT :Not enought argument\n"); diff --git a/srcs/commands/operator/wallops.cpp b/srcs/commands/operator/wallops.cpp index 43dbe21..a680e58 100644 --- a/srcs/commands/operator/wallops.cpp +++ b/srcs/commands/operator/wallops.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/16 17:09:38 by apommier #+# #+# */ -/* Updated: 2023/02/17 21:13:21 by apommier ### ########.fr */ +/* Updated: 2023/02/23 17:48:22 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,6 +19,11 @@ void WALLOPS(std::string buffer, fdList &allFds, int userNbr) std::string msg; //std::cout << "privmsg bufer= --" << buffer << std::endl; + if (!allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * WALLOPS :You have not registered\n"); + return ; + } split(buffer, ' ', splitBuff); if (splitBuff.size() < 2) { diff --git a/srcs/commands/other/names.cpp b/srcs/commands/other/names.cpp index 3a77a27..34c5a33 100644 --- a/srcs/commands/other/names.cpp +++ b/srcs/commands/other/names.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/16 18:14:15 by apommier #+# #+# */ -/* Updated: 2023/02/22 20:04:19 by apommier ### ########.fr */ +/* Updated: 2023/02/23 17:48:33 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -41,6 +41,11 @@ void NAMES(std::string buffer, fdList &allFds, int userNbr) std::vector splitBuff; int pos; + if (!allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * NAMES :You have not registered\n"); + return ; + } split(buffer, ' ', splitBuff); if (splitBuff.size() == 1 || splitBuff[1] == "0") { diff --git a/srcs/commands/other/who.cpp b/srcs/commands/other/who.cpp index 19e4867..4f73c3e 100644 --- a/srcs/commands/other/who.cpp +++ b/srcs/commands/other/who.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/16 18:14:17 by apommier #+# #+# */ -/* Updated: 2023/02/22 13:03:30 by apommier ### ########.fr */ +/* Updated: 2023/02/23 17:49:05 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -44,6 +44,12 @@ void WHO(std::string buffer, fdList &allFds, int userNbr) std::vector splitBuff; int pos; (void) userNbr; + + if (!allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * WHO :You have not registered\n"); + return ; + } split(buffer, ' ', splitBuff); if (splitBuff.size() == 1 || splitBuff[1] == "0") { diff --git a/srcs/utils.cpp b/srcs/utils.cpp index 2247cc9..e2185c9 100644 --- a/srcs/utils.cpp +++ b/srcs/utils.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/06 21:46:41 by apommier #+# #+# */ -/* Updated: 2023/02/22 20:03:09 by apommier ### ########.fr */ +/* Updated: 2023/02/23 20:29:25 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -78,7 +78,7 @@ int not_contain_other(std::string str, std::string toFind) return (1); } -int find_client_list(std::vector list, clientData *client) +int find_client_list(std::vector &list, clientData *client) { std::vector::iterator start = list.begin(); std::vector::iterator pastEnd = list.end(); @@ -89,5 +89,4 @@ int find_client_list(std::vector list, clientData *client) start++; } return (-1); -} - +} \ No newline at end of file