/* * InspIRCd -- Internet Relay Chat Daemon * * Copyright (C) 2023 Sadie Powell * * 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 * License as published by the Free Software Foundation, version 2. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "inspircd.h" #include "modules/cloak.h" class StaticMethod final : public Cloak::Method { private: // The cloak to set on users. std::string cloak; public: StaticMethod(const Cloak::Engine* engine, const std::shared_ptr& tag) ATTR_NOT_NULL(2) : Cloak::Method(engine, tag) , cloak(tag->getString("cloak")) { } std::string Generate(LocalUser* user) override ATTR_NOT_NULL(2) { if (!MatchesUser(user)) return {}; // We shouldn't cloak this user. return cloak; } std::string Generate(const std::string& hostip) override { return cloak; } void GetLinkData(Module::LinkData& data, std::string& compatdata) override { data["cloak"] = cloak; } }; class StaticEngine final : public Cloak::Engine { public: StaticEngine(Module* Creator) : Cloak::Engine(Creator, "static") { } Cloak::MethodPtr Create(const std::shared_ptr& tag, bool primary) override { return std::make_shared(this, tag); } }; class ModuleCloakStatic final : public Module { private: StaticEngine nickcloak; public: ModuleCloakStatic() : Module(VF_VENDOR, "Adds the static cloaking method for use with the cloak module.") , nickcloak(this) { } }; MODULE_INIT(ModuleCloakStatic)