X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fextra%2Fm_geoip.cpp;h=44253775b155cfc5a41416a36bd7378741f4d432;hb=b950e46bfeef5643ff68c8c78530c1eff25d024e;hp=57a08ed8497acdabb3563c9cb1034d3c60a5ed2c;hpb=56a5ace638d503099accf4e3461c53b154edaa1d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/extra/m_geoip.cpp b/src/modules/extra/m_geoip.cpp index 57a08ed84..44253775b 100644 --- a/src/modules/extra/m_geoip.cpp +++ b/src/modules/extra/m_geoip.cpp @@ -23,10 +23,15 @@ class ModuleGeoIP : public Module { GeoIP * gi; + bool banunknown; + + std::map GeoBans; + + public: ModuleGeoIP(InspIRCd *Me) : Module(Me) { - ReadConf(); + OnRehash(NULL, ""); Implementation eventlist[] = { I_OnRehash, I_OnUserRegister }; ServerInstance->Modules->Attach(eventlist, this, 2); @@ -39,18 +44,23 @@ class ModuleGeoIP : public Module virtual Version GetVersion() { - return Version(1, 2, 0, 0, VF_VENDOR, API_VERSION); - } - - virtual void ReadConf() - { - ConfigReader *MyConf = new ConfigReader(ServerInstance); - delete MyConf; + return Version("$Id$", VF_VENDOR, API_VERSION); } virtual void OnRehash(User* user, const std::string ¶meter) { - ReadConf(); + GeoBans.clear(); + + ConfigReader conf(ServerInstance); + + banunknown = conf.ReadFlag("geoip", "banunknown", 0); + + for (int i = 0; i < conf.Enumerate("geoban"); ++i) + { + std::string countrycode = conf.ReadValue("geoban", "country", i); + std::string reason = conf.ReadValue("geoban", "reason", i); + GeoBans[countrycode] = reason; + } } virtual int OnUserRegister(User* user) @@ -61,16 +71,16 @@ class ModuleGeoIP : public Module const char* c = GeoIP_country_code_by_addr(gi, user->GetIPString()); if (c) { - std::string country(c); - ServerInstance->Logs->Log("m_geoip", DEBUG, "*** Country: %s", country.c_str()); + std::map::iterator x = GeoBans.find(c); + if (x != GeoBans.end()) + ServerInstance->Users->QuitUser(user, x->second); } else { - ServerInstance->Logs->Log("m_geoip", DEBUG, "*** No country for %s!", user->GetIPString()); + if (banunknown) + ServerInstance->Users->QuitUser(user, "Could not identify your country of origin. Access denied."); } } - - /* don't do anything with this hot potato */ return 0; } };