From 99e4e5cdb3072d6d9872b85f2e4104540ea71011 Mon Sep 17 00:00:00 2001 From: aortigos Date: Fri, 15 May 2026 14:24:46 +0200 Subject: [PATCH] user command has been init --- Makefile | 3 ++- Server/Server.cpp | 3 ++- Server/Server.hpp | 3 ++- cmds/nick.cpp | 37 +++++++++++++++++++---------------- cmds/user.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 76 insertions(+), 20 deletions(-) create mode 100644 cmds/user.cpp diff --git a/Makefile b/Makefile index 71b7055..dd2a42d 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ NAME = ircserv -SRC = main.cpp Server/Server.cpp User/User.cpp +SRC = main.cpp Server/Server.cpp User/User.cpp \ + cmds/pass.cpp cmds/nick.cpp cmds/user.cpp \ HEADERS = Server/Server.hpp User/User.hpp diff --git a/Server/Server.cpp b/Server/Server.cpp index 677b7e2..fe8065a 100644 --- a/Server/Server.cpp +++ b/Server/Server.cpp @@ -6,7 +6,7 @@ /* By: aortigos > args; + if (!client.isAuthenticated()) + return (client.send(":" SERVER_NAME " 451 * :You have not registered\r\n")); if (args.empty()) return (client.send(":" SERVER_NAME " 431 * :Not nickname given\r\n")); if (!isValidNick(args)) - return (client.send(":" SERVER_NAME " 432 * " + args + ":Erroneous nickname\r\n")) + return (client.send(":" SERVER_NAME " 432 * " + args + " Erroneous nickname\r\n")); for (std::map::iterator it = clients_.begin(); it != clients_.end(); it++) { if (it->second.getNick() == args) - return (client.send(":" SERVER_NAME " 433 * " + args + " :Nickname is already in use\r\n")) + return (client.send(":" SERVER_NAME " 433 * " + args + " :Nickname is already in use\r\n")); } std::string oldNick = client.getNick(); @@ -47,17 +64,3 @@ void Server::nick_cmd(User &client, std::istringstream &ss) client.send(":" SERVER_NAME " 004 " + args + " :" SERVER_NAME " 1.0\r\n"); } } - -static bool isValidNick(const std::string &nick) -{ - const std::string special = "[]\\`_^{|}"; - - if (!isalpha(nick[0]) && special.find(nick[0]) == std::string::npos) - return (false); - for (size_t i = 1; i < nick.size(); i++) - { - if (!isalnum(nick[i])) && special.find(nick[i] == std::string::npos && nick[i] != '-') - return (false); - } - return (true); -} \ No newline at end of file diff --git a/cmds/user.cpp b/cmds/user.cpp new file mode 100644 index 0000000..f15a51f --- /dev/null +++ b/cmds/user.cpp @@ -0,0 +1,50 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* user.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: aortigos > username >> hostname >> servername; + std::getline(ss, realname); + + if (!client.isAuthenticated()) + return (client.send(":" SERVER_NAME " 451 * :You have not registered\r\n")); + if (client.isRegistered()) + return (client.send(":" SERVER_NAME " 462 " + client.getNick() + " :Unauthorized command (already registered)\r\n")); + + if (!realname.empty() && realname[0] == ' ') + realname = realname.substr(1); + if (realname.empty() || realname[0] != ':') + return (client.send(":" SERVER_NAME " 461 * USER :Not enough parameters\r\n")); + if (!realname.empty() && realname[0] == ':') + realname = realname.substr(1); + + if (username.empty() || hostname.empty() || servername.empty() || realname.empty()) + return (client.send(":" SERVER_NAME " 461 * USER :Not enough parameters\r\n")); + client.setUsername(username); + client.setRealname(realname); + + if (!client.getNick().empty()) + { + client.setRegistered(true); + client.send(":" SERVER_NAME " 001 " + client.getNick() + " :Welcome to the IRC Network " + client.getNick() + "\r\n"); + client.send(":" SERVER_NAME " 002 " + client.getNick() + " :Your host is " SERVER_NAME ", running version 1.0\r\n"); + client.send(":" SERVER_NAME " 003 " + client.getNick() + " :This server was created May 2026\r\n"); + client.send(":" SERVER_NAME " 004 " + client.getNick() + " :" SERVER_NAME " 1.0\r\n"); + } +} -- 2.49.1