void OnCheckAuthentication(User *, NickServ::IdentifyRequest *req) override { NickServ::Nick *na = NickServ::FindNick(req->GetAccount()); if (na == NULL) return; NickServ::Account *nc = na->GetAccount(); size_t pos = nc->GetPassword().find(':'); if (pos == Anope::string::npos) return; Anope::string hash_method(nc->GetPassword().begin(), nc->GetPassword().begin() + pos); if (!hash_method.equals_cs("oldmd5")) return; Anope::string buf; this->OnEncrypt(req->GetPassword(), buf); if (nc->GetPassword().equals_cs(buf)) { /* if we are NOT the first module in the list, * we want to re-encrypt the pass with the new encryption */ if (ModuleManager::FindFirstOf(ENCRYPTION) != this) { Anope::string p; Anope::Encrypt(req->GetPassword(), p); nc->SetPassword(p); } req->Success(this); } }
void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override { User *u = source.GetUser(); Anope::string nick = !params.empty() ? params[0] : ""; NickServ::Nick *na = NickServ::FindNick(!nick.empty() ? nick : u->nick); if (u->Account()->GetRefs<NickServ::Nick *>().size() == 1) { source.Reply(_("Your nickname is not grouped to anything, so you can't ungroup it.")); return; } if (!na) { source.Reply(_("\002{0}\002 isn't registered."), !nick.empty() ? nick : u->nick); return; } if (na->GetAccount() != u->Account()) { source.Reply(_("\002{0}\002 is not in your group."), na->GetNick()); return; } NickServ::Account *oldcore = na->GetAccount(); if (na->GetNick().equals_ci(oldcore->GetDisplay())) oldcore->SetDisplay(oldcore->GetRef<NickServ::Nick *>()); NickServ::Account *nc = Serialize::New<NickServ::Account *>(); nc->SetDisplay(na->GetNick()); na->SetAccount(nc); nc->SetPassword(oldcore->GetPassword()); if (!oldcore->GetEmail().empty()) nc->SetEmail(oldcore->GetEmail()); nc->SetLanguage(oldcore->GetLanguage()); source.Reply(_("\002{0}\002 has been ungrouped from \002{1}\002."), na->GetNick(), oldcore->GetDisplay()); User *user = User::Find(na->GetNick()); if (user) /* The user on the nick who was ungrouped may be identified to the old group, set -r */ user->RemoveMode(source.service, "REGISTERED"); }