#include #include #include #include using namespace std; static const unsigned int maxNameSize = 12; static const unsigned int minNameSize = 3; static const string nameRange = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"; static const string isEmptyTokens = "\t\r\n\f\v "; static const unsigned int maxMessageSize = 1024; string validateName(const string& in) { if(in.size() > maxNameSize || in.size() < minNameSize) { ostringstream msg; msg << "Your name must be between " << minNameSize << " and " << maxNameSize << " characters in length."; throw invalid_argument(msg.str()); } if(in.find_last_not_of(nameRange) != string::npos) { throw invalid_argument("Invalid character in name. Valid characters are letter and digits."); } string out = in; transform(out.begin(), out.end(), out.begin(), ::tolower); if(out.begin() != out.end()) { transform(out.begin(), out.begin() + 1, out.begin(), ::toupper); } return out; } string validateMessage(const string& in) { if(in.size() > maxMessageSize) { ostringstream os; os << "Message length exceeded, maximum length is " << maxMessageSize << " characters."; throw MW::InvalidMessageException(os.str()); } if(in.find_last_not_of(isEmptyTokens) == string::npos) { throw invalid_argument("Your message is empty and was ignored."); } // Strip html codes in the message string out; for(char c : in) { switch(c) { case '&': { out.append("&"); break; } case '"': { out.append("""); break; } case '\'': { out.append("'"); break; } case '<': { out.append("<"); break; } case '>': { out.append(">"); break; } case '\r': case '\n': case '\v': case '\f': case '\t': { out.append(" "); break; } default: { out.push_back(c); break; } } } return out; }