bool Check(User *u, XLine *x) override { if (x->regex) { Anope::string uh = u->GetIdent() + "@" + u->host, nuhr = u->nick + "!" + uh + "#" + u->realname; return std::regex_match(uh.str(), *x->regex) || std::regex_match(nuhr.str(), *x->regex); } if (!x->GetNick().empty() && !Anope::Match(u->nick, x->GetNick())) return false; if (!x->GetUser().empty() && !Anope::Match(u->GetIdent(), x->GetUser())) return false; if (!x->GetReal().empty() && !Anope::Match(u->realname, x->GetReal())) return false; if (x->c && x->c->match(u->ip)) return true; if (x->GetHost().empty() || Anope::Match(u->host, x->GetHost()) || Anope::Match(u->ip.addr(), x->GetHost())) return true; return false; }
EventReturn OnLoadDatabase() override { const Anope::string &db_name = Anope::DataDir + "/" + Config->GetModule(this)->Get<Anope::string>("database", "anope.db"); std::fstream fd(db_name.c_str(), std::ios_base::in | std::ios_base::binary); if (!fd.is_open()) { Log(this) << "Unable to open " << db_name << " for reading!"; return EVENT_STOP; } Serialize::TypeBase *type = nullptr; Serialize::Object *obj = nullptr; for (Anope::string buf; std::getline(fd, buf.str());) { if (buf.find("OBJECT ") == 0) { Anope::string t = buf.substr(7); if (obj) Log(LOG_DEBUG) << "obj != null but got OBJECT"; if (type) Log(LOG_DEBUG) << "type != null but got OBJECT"; type = Serialize::TypeBase::Find(t); obj = nullptr; } else if (buf.find("ID ") == 0) { if (!type || obj) continue; try { Serialize::ID id = convertTo<Serialize::ID>(buf.substr(3)); obj = type->Require(id); } catch (const ConvertException &) { Log(LOG_DEBUG) << "Unable to parse object id " << buf.substr(3); } } else if (buf.find("DATA ") == 0) { if (!type) continue; if (!obj) obj = type->Create(); size_t sp = buf.find(' ', 5); // Skip DATA if (sp == Anope::string::npos) continue; Anope::string key = buf.substr(5, sp - 5), value = buf.substr(sp + 1); Serialize::FieldBase *field = type->GetField(key); if (field) field->UnserializeFromString(obj, value); } else if (buf.find("END") == 0) { type = nullptr; obj = nullptr; } } fd.close(); loaded = true; return EVENT_STOP; }
bool ChannelModeParam::IsValid(Anope::string &value) const { return std::regex_search(value.str(), param_validation); }