/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2019 Peter Powell <petpow@saberuk.com>
+ * Copyright (C) 2019-2021 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2019 Matt Schatz <genius3000@g3k.solutions>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
* redistribute it and/or modify it under the terms of the GNU General Public
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+/// $CompilerFlags: require_version("libmaxminddb" "0" "1.2.1") warning("The version of libmaxminddb you are using may cause a segmentation fault if given a corrupt database file!")
/// $CompilerFlags: find_compiler_flags("libmaxminddb" "")
+
/// $LinkerFlags: find_linker_flags("libmaxminddb" "-lmaxminddb")
+/// $PackageInfo: require_system("arch") libmaxminddb pkgconf
/// $PackageInfo: require_system("darwin") libmaxminddb pkg-config
/// $PackageInfo: require_system("debian" "9.0") libmaxminddb-dev pkg-config
/// $PackageInfo: require_system("ubuntu" "16.04") libmaxminddb-dev pkg-config
#include "modules/geolocation.h"
#include <maxminddb.h>
-class GeolocationExtItem : public LocalExtItem
+class GeolocationExtItem : public ExtensionItem
{
public:
GeolocationExtItem(Module* parent)
- : LocalExtItem("geolocation", ExtensionItem::EXT_USER, parent)
+ : ExtensionItem("geolocation", ExtensionItem::EXT_USER, parent)
+ {
+ }
+
+ std::string ToHuman(const Extensible* container, void* item) const CXX11_OVERRIDE
{
+ Geolocation::Location* location = static_cast<Geolocation::Location*>(item);
+ return location->GetName() + " [" + location->GetCode() + "]";
}
void free(Extensible* container, void* item) CXX11_OVERRIDE
Version GetVersion() CXX11_OVERRIDE
{
- return Version("Provides Geolocation lookups using the libMaxMindDB library", VF_VENDOR);
+ return Version("Allows the server to perform geolocation lookups on both IP addresses and users.", VF_VENDOR);
}
void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
{
ConfigTag* tag = ServerInstance->Config->ConfValue("maxmind");
- const std::string file = ServerInstance->Config->Paths.PrependConfig(tag->getString("file", "GeoLite2-Country.mmdb"));
+ const std::string file = ServerInstance->Config->Paths.PrependConfig(tag->getString("file", "GeoLite2-Country.mmdb", 1));
// Try to read the new database.
MMDB_s mmdb;
void OnGarbageCollect() CXX11_OVERRIDE
{
for (LocationMap::iterator iter = geoapi.locations.begin(); iter != geoapi.locations.end(); )
- {
+ {
Geolocation::Location* location = iter->second;
if (location->GetUseCount())
{