#include "CommandValidator.hpp" CommandValidator::CommandValidator(void) {} CommandValidator::CommandValidator(const CommandValidator &other) { (void)other; } CommandValidator &CommandValidator::operator=(const CommandValidator &other) { (void)other; return (*this); } CommandValidator::~CommandValidator(void) {} bool CommandValidator::isKnownCommand(const std::string &cmd) { return (cmd == "PASS" || cmd == "NICK" || cmd == "USER" || cmd == "JOIN" || cmd == "PART" || cmd == "PRIVMSG" || cmd == "NOTICE" || cmd == "QUIT" || cmd == "PING" || cmd == "PONG" || cmd == "KICK" || cmd == "INVITE" || cmd == "TOPIC" || cmd == "MODE"); } /* This is only syntactic/minimal validation. The real command handler still checks: - password correctness - nickname already used - channel exists - permissions/operator status - invite-only/key/limit modes */ bool CommandValidator::hasEnoughParams(const IrcMessage &msg) { const std::string &cmd = msg.getCommand(); if (cmd == "PASS") return (msg.paramCount() >= 1); if (cmd == "NICK") return (msg.paramCount() >= 1); if (cmd == "USER") return (msg.paramCount() >= 4); if (cmd == "JOIN") return (msg.paramCount() >= 1); if (cmd == "PART") return (msg.paramCount() >= 1); if (cmd == "PRIVMSG") return (msg.paramCount() >= 2); if (cmd == "NOTICE") return (msg.paramCount() >= 2); if (cmd == "QUIT") return (true); if (cmd == "PING") return (msg.paramCount() >= 1); if (cmd == "PONG") return (msg.paramCount() >= 1); if (cmd == "KICK") return (msg.paramCount() >= 2); if (cmd == "INVITE") return (msg.paramCount() >= 2); if (cmd == "TOPIC") return (msg.paramCount() >= 1); if (cmd == "MODE") return (msg.paramCount() >= 1); return (false); } /* Before registration, usually only PASS, NICK, USER, PING/PONG/QUIT are useful. */ bool CommandValidator::needsRegistration(const std::string &cmd) { return !(cmd == "PASS" || cmd == "NICK" || cmd == "USER" || cmd == "PING" || cmd == "PONG" || cmd == "QUIT"); }