rename files
This commit is contained in:
1 parent
a655d0adc4
commit
0c6fe1941f
23 files changed
+231
-101
No files matched your search
@@ -324,58 +324,6 @@ INSERT INTO `battlenet_modules` VALUES
|
|||||||
/*!40000 ALTER TABLE `battlenet_modules` ENABLE KEYS */;
|
/*!40000 ALTER TABLE `battlenet_modules` ENABLE KEYS */;
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
|
|
||||||
--
|
|
||||||
-- Table structure for table `ip2nation`
|
|
||||||
--
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `ip2nation`;
|
|
||||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
||||||
/*!40101 SET character_set_client = utf8 */;
|
|
||||||
CREATE TABLE `ip2nation` (
|
|
||||||
`ip` int(11) unsigned NOT NULL DEFAULT '0',
|
|
||||||
`country` char(2) NOT NULL DEFAULT '',
|
|
||||||
KEY `ip` (`ip`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Dumping data for table `ip2nation`
|
|
||||||
--
|
|
||||||
|
|
||||||
LOCK TABLES `ip2nation` WRITE;
|
|
||||||
/*!40000 ALTER TABLE `ip2nation` DISABLE KEYS */;
|
|
||||||
/*!40000 ALTER TABLE `ip2nation` ENABLE KEYS */;
|
|
||||||
UNLOCK TABLES;
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Table structure for table `ip2nationCountries`
|
|
||||||
--
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `ip2nationCountries`;
|
|
||||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
||||||
/*!40101 SET character_set_client = utf8 */;
|
|
||||||
CREATE TABLE `ip2nationCountries` (
|
|
||||||
`code` varchar(4) NOT NULL DEFAULT '',
|
|
||||||
`iso_code_2` varchar(2) NOT NULL DEFAULT '',
|
|
||||||
`iso_code_3` varchar(3) DEFAULT '',
|
|
||||||
`iso_country` varchar(255) NOT NULL DEFAULT '',
|
|
||||||
`country` varchar(255) NOT NULL DEFAULT '',
|
|
||||||
`lat` float NOT NULL DEFAULT '0',
|
|
||||||
`lon` float NOT NULL DEFAULT '0',
|
|
||||||
PRIMARY KEY (`code`),
|
|
||||||
KEY `code` (`code`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Dumping data for table `ip2nationCountries`
|
|
||||||
--
|
|
||||||
|
|
||||||
LOCK TABLES `ip2nationCountries` WRITE;
|
|
||||||
/*!40000 ALTER TABLE `ip2nationCountries` DISABLE KEYS */;
|
|
||||||
/*!40000 ALTER TABLE `ip2nationCountries` ENABLE KEYS */;
|
|
||||||
UNLOCK TABLES;
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Table structure for table `ip_banned`
|
-- Table structure for table `ip_banned`
|
||||||
--
|
--
|
||||||
@@ -2011,7 +1959,8 @@ INSERT INTO `updates` VALUES
|
|||||||
('2018_03_28_00_auth.sql','45A7C896BDF00B1C319C9F889893D3B95E45EF0A','ARCHIVED','2018-03-28 01:40:04',0),
|
('2018_03_28_00_auth.sql','45A7C896BDF00B1C319C9F889893D3B95E45EF0A','ARCHIVED','2018-03-28 01:40:04',0),
|
||||||
('2018_04_15_00_auth.sql','2293BAA1DA754CFD780838FE99EDB98FD7C041E0','ARCHIVED','2018-04-15 01:40:04',0),
|
('2018_04_15_00_auth.sql','2293BAA1DA754CFD780838FE99EDB98FD7C041E0','ARCHIVED','2018-04-15 01:40:04',0),
|
||||||
('2018_05_15_00_auth.sql','9076B44013D5BE1E92A06BDE7CE4F9B6663272CC','ARCHIVED','2018-05-15 01:40:04',0),
|
('2018_05_15_00_auth.sql','9076B44013D5BE1E92A06BDE7CE4F9B6663272CC','ARCHIVED','2018-05-15 01:40:04',0),
|
||||||
('2018_06_15_00_auth.sql','28E2E814F529190BC9423E2A220970F60307DD22','ARCHIVED','2018-06-15 01:40:04',0);
|
('2018_06_15_00_auth.sql','28E2E814F529190BC9423E2A220970F60307DD22','ARCHIVED','2018-06-15 01:40:04',0),
|
||||||
|
('2018_06_23_00_auth.sql','BE35312C386A127D047E5A7CE0D14DB41D905F8E','ARCHIVED','2018-06-23 01:40:04',0);
|
||||||
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
|
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
--
|
||||||
|
DROP TABLE IF EXISTS `ip2nation`;
|
||||||
|
DROP TABLE IF EXISTS `ip2nationCountries`;
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+2
@@ -1,3 +1,4 @@
|
|||||||
|
/*
|
||||||
--
|
--
|
||||||
UPDATE `quest_request_items` SET `EmoteOnComplete`=0 WHERE `ID` IN
|
UPDATE `quest_request_items` SET `EmoteOnComplete`=0 WHERE `ID` IN
|
||||||
(118, -- Quest "The Price of Shoes"
|
(118, -- Quest "The Price of Shoes"
|
||||||
@@ -153,3 +154,4 @@ INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `Emot
|
|||||||
(2358,1,1,0,0,0,0,0,0,0);
|
(2358,1,1,0,0,0,0,0,0,0);
|
||||||
UPDATE `quest_request_items` SET `EmoteOnIncomplete`=6, `EmoteOnComplete`=6 WHERE `ID`=2358;
|
UPDATE `quest_request_items` SET `EmoteOnIncomplete`=6, `EmoteOnComplete`=6 WHERE `ID`=2358;
|
||||||
UPDATE `quest_offer_reward` SET `Emote1`=21, `Emote2`=1 WHERE `ID`=2358;
|
UPDATE `quest_offer_reward` SET `Emote1`=21, `Emote2`=1 WHERE `ID`=2358;
|
||||||
|
*/
|
||||||
File renamed without changes.
+2
@@ -1,3 +1,4 @@
|
|||||||
|
/*
|
||||||
-- Rift Spawn
|
-- Rift Spawn
|
||||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=6492 AND `source_type`=0;
|
DELETE FROM `smart_scripts` WHERE `entryorguid`=6492 AND `source_type`=0;
|
||||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=649200 AND `source_type`=9;
|
DELETE FROM `smart_scripts` WHERE `entryorguid`=649200 AND `source_type`=9;
|
||||||
@@ -25,3 +26,4 @@ DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=64
|
|||||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=9082 AND `ConditionTypeOrReference`=1;
|
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=9082 AND `ConditionTypeOrReference`=1;
|
||||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||||
(13,1,9082,0,0,1,0,9032,0,0,0,0,0,"","Create Containment Coffer can only be casted if target has aura 'Self Stun - 30 seconds'");
|
(13,1,9082,0,0,1,0,9032,0,0,0,0,0,"","Create Containment Coffer can only be casted if target has aura 'Self Stun - 30 seconds'");
|
||||||
|
*/
|
||||||
@@ -0,0 +1,126 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2008-2018 TrinityCore <https://www.trinitycore.org/>
|
||||||
|
*
|
||||||
|
* This program 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; either version 2 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "IPLocation.h"
|
||||||
|
#include "Config.h"
|
||||||
|
#include "IpAddress.h"
|
||||||
|
#include "Log.h"
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
IpLocationStore::IpLocationStore()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
IpLocationStore::~IpLocationStore()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void IpLocationStore::Load()
|
||||||
|
{
|
||||||
|
std::string value = sConfigMgr->GetStringDefault("IPLocationFile", ".");
|
||||||
|
if (value.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
_ipLocationStore.clear();
|
||||||
|
TC_LOG_INFO("server.loading", "Loading IP Location Database...");
|
||||||
|
|
||||||
|
// Default folder
|
||||||
|
if (!value.compare("."))
|
||||||
|
value.append("/IP2LOCATION-LITE-DB1.CSV");
|
||||||
|
|
||||||
|
// Check file name
|
||||||
|
if (value.find("IP2LOCATION-LITE-DB1.CSV") == std::string::npos)
|
||||||
|
{
|
||||||
|
TC_LOG_ERROR("server.loading", "IPLocation:: File name is not valid, must be IP2LOCATION-LITE-DB1.CSV");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if file exists
|
||||||
|
std::ifstream ipfile(value);
|
||||||
|
if (!ipfile)
|
||||||
|
{
|
||||||
|
TC_LOG_ERROR("server.loading", "IPLocation:: No database file exists.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ipfile.is_open())
|
||||||
|
{
|
||||||
|
TC_LOG_ERROR("server.loading", "IPLocation:: The file can not be opened.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string ip_from;
|
||||||
|
std::string ip_to;
|
||||||
|
std::string country_code;
|
||||||
|
std::string country_name;
|
||||||
|
|
||||||
|
while (ipfile.good())
|
||||||
|
{
|
||||||
|
// Read lines
|
||||||
|
std::getline(ipfile, ip_from, ',');
|
||||||
|
std::getline(ipfile, ip_to, ',');
|
||||||
|
std::getline(ipfile, country_code, ',');
|
||||||
|
std::getline(ipfile, country_name, '\n');
|
||||||
|
|
||||||
|
// Remove new lines and return
|
||||||
|
country_name.erase(std::remove(country_name.begin(), country_name.end(), '\r'), country_name.end());
|
||||||
|
country_name.erase(std::remove(country_name.begin(), country_name.end(), '\n'), country_name.end());
|
||||||
|
|
||||||
|
// Remove quotation marks
|
||||||
|
ip_from.erase(std::remove(ip_from.begin(), ip_from.end(), '"'), ip_from.end());
|
||||||
|
ip_to.erase(std::remove(ip_to.begin(), ip_to.end(), '"'), ip_to.end());
|
||||||
|
country_code.erase(std::remove(country_code.begin(), country_code.end(), '"'), country_code.end());
|
||||||
|
country_name.erase(std::remove(country_name.begin(), country_name.end(), '"'), country_name.end());
|
||||||
|
|
||||||
|
// Convert country code to lowercase
|
||||||
|
std::transform(country_code.begin(), country_code.end(), country_code.begin(), ::tolower);
|
||||||
|
|
||||||
|
IpLocationRecord data;
|
||||||
|
data.ip_from = (uint32)atoull(ip_from.c_str());
|
||||||
|
data.ip_to = (uint32)atoull(ip_to.c_str());
|
||||||
|
data.country_code = country_code;
|
||||||
|
data.country_name = country_name;
|
||||||
|
|
||||||
|
_ipLocationStore.push_back(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::sort(_ipLocationStore.begin(), _ipLocationStore.end(), [](IpLocationRecord const& a, IpLocationRecord const& b) { return a.ip_from < b.ip_from; });
|
||||||
|
|
||||||
|
ipfile.close();
|
||||||
|
|
||||||
|
TC_LOG_INFO("server.loading", ">> Loaded %u entries.", uint32(_ipLocationStore.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
IpLocationRecord* IpLocationStore::GetData(std::string const& ipAddress)
|
||||||
|
{
|
||||||
|
if (_ipLocationStore.empty())
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
uint32 ip = Trinity::Net::address_to_uint(Trinity::Net::make_address_v4(ipAddress));
|
||||||
|
auto itr = std::upper_bound(_ipLocationStore.begin(), _ipLocationStore.end(), ip, [](uint32 ip, IpLocationRecord const& loc) { return loc.ip_to >= ip; });
|
||||||
|
ASSERT(&(*itr));
|
||||||
|
|
||||||
|
return &(*itr);
|
||||||
|
}
|
||||||
|
|
||||||
|
IpLocationStore* IpLocationStore::instance()
|
||||||
|
{
|
||||||
|
static IpLocationStore instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2008-2018 TrinityCore <https://www.trinitycore.org/>
|
||||||
|
*
|
||||||
|
* This program 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; either version 2 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Define.h"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
struct IpLocationRecord
|
||||||
|
{
|
||||||
|
uint32 ip_from;
|
||||||
|
uint32 ip_to;
|
||||||
|
std::string country_code;
|
||||||
|
std::string country_name;
|
||||||
|
};
|
||||||
|
|
||||||
|
class TC_COMMON_API IpLocationStore
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
IpLocationStore();
|
||||||
|
~IpLocationStore();
|
||||||
|
static IpLocationStore* instance();
|
||||||
|
|
||||||
|
void Load();
|
||||||
|
IpLocationRecord* GetData(std::string const& ipAddress);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<IpLocationRecord> _ipLocationStore;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define sIPLocation IpLocationStore::instance()
|
||||||
|
|
||||||
@@ -33,6 +33,7 @@
|
|||||||
#include "GitRevision.h"
|
#include "GitRevision.h"
|
||||||
#include "GruntRealmList.h"
|
#include "GruntRealmList.h"
|
||||||
#include "IoContext.h"
|
#include "IoContext.h"
|
||||||
|
#include "IPLocation.h"
|
||||||
#include "MySQLThreading.h"
|
#include "MySQLThreading.h"
|
||||||
#include "ProcessPriority.h"
|
#include "ProcessPriority.h"
|
||||||
#include "Util.h"
|
#include "Util.h"
|
||||||
@@ -137,6 +138,9 @@ int main(int argc, char** argv)
|
|||||||
if (!StartDB())
|
if (!StartDB())
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
// Load IP Location Database
|
||||||
|
sIPLocation->Load();
|
||||||
|
|
||||||
std::shared_ptr<void> dbHandle(nullptr, [](void*) { StopDB(); });
|
std::shared_ptr<void> dbHandle(nullptr, [](void*) { StopDB(); });
|
||||||
|
|
||||||
std::shared_ptr<Trinity::Asio::IoContext> ioContext = std::make_shared<Trinity::Asio::IoContext>();
|
std::shared_ptr<Trinity::Asio::IoContext> ioContext = std::make_shared<Trinity::Asio::IoContext>();
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
#include "DatabaseEnv.h"
|
#include "DatabaseEnv.h"
|
||||||
#include "Errors.h"
|
#include "Errors.h"
|
||||||
|
#include "IPLocation.h"
|
||||||
#include "GruntRealmList.h"
|
#include "GruntRealmList.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
#include "Realm.h"
|
#include "Realm.h"
|
||||||
@@ -171,7 +172,6 @@ void AuthSession::Start()
|
|||||||
|
|
||||||
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP_INFO);
|
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP_INFO);
|
||||||
stmt->setString(0, ip_address);
|
stmt->setString(0, ip_address);
|
||||||
stmt->setUInt32(1, inet_addr(ip_address.c_str()));
|
|
||||||
|
|
||||||
_queryProcessor.AddQuery(LoginDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&AuthSession::CheckIpCallback, this, std::placeholders::_1)));
|
_queryProcessor.AddQuery(LoginDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&AuthSession::CheckIpCallback, this, std::placeholders::_1)));
|
||||||
}
|
}
|
||||||
@@ -197,9 +197,6 @@ void AuthSession::CheckIpCallback(PreparedQueryResult result)
|
|||||||
if (fields[0].GetUInt64() != 0)
|
if (fields[0].GetUInt64() != 0)
|
||||||
banned = true;
|
banned = true;
|
||||||
|
|
||||||
if (!fields[1].GetString().empty())
|
|
||||||
_ipCountry = fields[1].GetString();
|
|
||||||
|
|
||||||
} while (result->NextRow());
|
} while (result->NextRow());
|
||||||
|
|
||||||
if (banned)
|
if (banned)
|
||||||
@@ -346,6 +343,9 @@ void AuthSession::LogonChallengeCallback(PreparedQueryResult result)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (IpLocationRecord* location = sIPLocation->GetData(ipAddress))
|
||||||
|
_ipCountry = location->country_code;
|
||||||
|
|
||||||
TC_LOG_DEBUG("server.authserver", "[AuthChallenge] Account '%s' is not locked to ip", _accountInfo.Login.c_str());
|
TC_LOG_DEBUG("server.authserver", "[AuthChallenge] Account '%s' is not locked to ip", _accountInfo.Login.c_str());
|
||||||
if (_accountInfo.LockCountry.empty() || _accountInfo.LockCountry == "00")
|
if (_accountInfo.LockCountry.empty() || _accountInfo.LockCountry == "00")
|
||||||
TC_LOG_DEBUG("server.authserver", "[AuthChallenge] Account '%s' is not locked to country", _accountInfo.Login.c_str());
|
TC_LOG_DEBUG("server.authserver", "[AuthChallenge] Account '%s' is not locked to country", _accountInfo.Login.c_str());
|
||||||
|
|||||||
@@ -157,6 +157,16 @@ SourceDirectory = ""
|
|||||||
|
|
||||||
MySQLExecutable = ""
|
MySQLExecutable = ""
|
||||||
|
|
||||||
|
#
|
||||||
|
# IPLocationFile
|
||||||
|
# Description: The path to your IP2Location database CSV file.
|
||||||
|
# Example: "C:/Trinity/IP2Location.csv"
|
||||||
|
# "/home/trinity/IP2Location.csv"
|
||||||
|
# Default: "." - (Current core directory)
|
||||||
|
# "" - (Disabled)
|
||||||
|
|
||||||
|
IPLocationFile = "."
|
||||||
|
|
||||||
#
|
#
|
||||||
###################################################################################################
|
###################################################################################################
|
||||||
|
|
||||||
|
|||||||
@@ -26,9 +26,7 @@ void LoginDatabaseConnection::DoPrepareStatements()
|
|||||||
PrepareStatement(LOGIN_SEL_REALMLIST, "SELECT id, name, address, localAddress, localSubnetMask, port, icon, flag, timezone, allowedSecurityLevel, population, gamebuild, Region, Battlegroup FROM realmlist WHERE flag <> 3 ORDER BY name", CONNECTION_SYNCH);
|
PrepareStatement(LOGIN_SEL_REALMLIST, "SELECT id, name, address, localAddress, localSubnetMask, port, icon, flag, timezone, allowedSecurityLevel, population, gamebuild, Region, Battlegroup FROM realmlist WHERE flag <> 3 ORDER BY name", CONNECTION_SYNCH);
|
||||||
PrepareStatement(LOGIN_DEL_EXPIRED_IP_BANS, "DELETE FROM ip_banned WHERE unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC);
|
PrepareStatement(LOGIN_DEL_EXPIRED_IP_BANS, "DELETE FROM ip_banned WHERE unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC);
|
||||||
PrepareStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS, "UPDATE account_banned SET active = 0 WHERE active = 1 AND unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC);
|
PrepareStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS, "UPDATE account_banned SET active = 0 WHERE active = 1 AND unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC);
|
||||||
PrepareStatement(LOGIN_SEL_IP_INFO, "(SELECT unbandate > UNIX_TIMESTAMP() OR unbandate = bandate AS banned, NULL as country FROM ip_banned WHERE ip = ?) "
|
PrepareStatement(LOGIN_SEL_IP_INFO, "SELECT unbandate > UNIX_TIMESTAMP() OR unbandate = bandate AS banned, NULL as country FROM ip_banned WHERE ip = ?", CONNECTION_ASYNC);
|
||||||
"UNION "
|
|
||||||
"(SELECT NULL AS banned, country FROM ip2nation WHERE INET_NTOA(ip) = ?)", CONNECTION_ASYNC);
|
|
||||||
PrepareStatement(LOGIN_INS_IP_AUTO_BANNED, "INSERT INTO ip_banned (ip, bandate, unbandate, bannedby, banreason) VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity Auth', 'Failed login autoban')", CONNECTION_ASYNC);
|
PrepareStatement(LOGIN_INS_IP_AUTO_BANNED, "INSERT INTO ip_banned (ip, bandate, unbandate, bannedby, banreason) VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity Auth', 'Failed login autoban')", CONNECTION_ASYNC);
|
||||||
PrepareStatement(LOGIN_SEL_IP_BANNED_ALL, "SELECT ip, bandate, unbandate, bannedby, banreason FROM ip_banned WHERE (bandate = unbandate OR unbandate > UNIX_TIMESTAMP()) ORDER BY unbandate", CONNECTION_SYNCH);
|
PrepareStatement(LOGIN_SEL_IP_BANNED_ALL, "SELECT ip, bandate, unbandate, bannedby, banreason FROM ip_banned WHERE (bandate = unbandate OR unbandate > UNIX_TIMESTAMP()) ORDER BY unbandate", CONNECTION_SYNCH);
|
||||||
PrepareStatement(LOGIN_SEL_IP_BANNED_BY_IP, "SELECT ip, bandate, unbandate, bannedby, banreason FROM ip_banned WHERE (bandate = unbandate OR unbandate > UNIX_TIMESTAMP()) AND ip LIKE CONCAT('%%', ?, '%%') ORDER BY unbandate", CONNECTION_SYNCH);
|
PrepareStatement(LOGIN_SEL_IP_BANNED_BY_IP, "SELECT ip, bandate, unbandate, bannedby, banreason FROM ip_banned WHERE (bandate = unbandate OR unbandate > UNIX_TIMESTAMP()) AND ip LIKE CONCAT('%%', ?, '%%') ORDER BY unbandate", CONNECTION_SYNCH);
|
||||||
@@ -44,7 +42,6 @@ void LoginDatabaseConnection::DoPrepareStatements()
|
|||||||
PrepareStatement(LOGIN_SEL_RECONNECTCHALLENGE, "SELECT a.id, UPPER(a.username), a.locked, a.lock_country, a.last_ip, a.failed_logins, ab.unbandate > UNIX_TIMESTAMP() OR ab.unbandate = ab.bandate, "
|
PrepareStatement(LOGIN_SEL_RECONNECTCHALLENGE, "SELECT a.id, UPPER(a.username), a.locked, a.lock_country, a.last_ip, a.failed_logins, ab.unbandate > UNIX_TIMESTAMP() OR ab.unbandate = ab.bandate, "
|
||||||
"ab.unbandate = ab.bandate, aa.gmlevel, a.sessionKey "
|
"ab.unbandate = ab.bandate, aa.gmlevel, a.sessionKey "
|
||||||
"FROM account a LEFT JOIN account_access aa ON a.id = aa.id LEFT JOIN account_banned ab ON ab.id = a.id AND ab.active = 1 WHERE a.username = ?", CONNECTION_ASYNC);
|
"FROM account a LEFT JOIN account_access aa ON a.id = aa.id LEFT JOIN account_banned ab ON ab.id = a.id AND ab.active = 1 WHERE a.username = ?", CONNECTION_ASYNC);
|
||||||
PrepareStatement(LOGIN_SEL_LOGON_COUNTRY, "SELECT country FROM ip2nation WHERE ip < ? ORDER BY ip DESC LIMIT 0,1", CONNECTION_SYNCH);
|
|
||||||
PrepareStatement(LOGIN_UPD_FAILEDLOGINS, "UPDATE account SET failed_logins = failed_logins + 1 WHERE username = ?", CONNECTION_ASYNC);
|
PrepareStatement(LOGIN_UPD_FAILEDLOGINS, "UPDATE account SET failed_logins = failed_logins + 1 WHERE username = ?", CONNECTION_ASYNC);
|
||||||
PrepareStatement(LOGIN_SEL_ACCOUNT_ID_BY_NAME, "SELECT id FROM account WHERE username = ?", CONNECTION_SYNCH);
|
PrepareStatement(LOGIN_SEL_ACCOUNT_ID_BY_NAME, "SELECT id FROM account WHERE username = ?", CONNECTION_SYNCH);
|
||||||
PrepareStatement(LOGIN_SEL_ACCOUNT_LIST_BY_NAME, "SELECT id, username FROM account WHERE username = ?", CONNECTION_SYNCH);
|
PrepareStatement(LOGIN_SEL_ACCOUNT_LIST_BY_NAME, "SELECT id, username FROM account WHERE username = ?", CONNECTION_SYNCH);
|
||||||
@@ -103,7 +100,6 @@ void LoginDatabaseConnection::DoPrepareStatements()
|
|||||||
PrepareStatement(LOGIN_SEL_LAST_IP, "SELECT last_ip FROM account WHERE id = ?", CONNECTION_SYNCH);
|
PrepareStatement(LOGIN_SEL_LAST_IP, "SELECT last_ip FROM account WHERE id = ?", CONNECTION_SYNCH);
|
||||||
PrepareStatement(LOGIN_SEL_REALMLIST_SECURITY_LEVEL, "SELECT allowedSecurityLevel from realmlist WHERE id = ?", CONNECTION_SYNCH);
|
PrepareStatement(LOGIN_SEL_REALMLIST_SECURITY_LEVEL, "SELECT allowedSecurityLevel from realmlist WHERE id = ?", CONNECTION_SYNCH);
|
||||||
PrepareStatement(LOGIN_DEL_ACCOUNT, "DELETE FROM account WHERE id = ?", CONNECTION_ASYNC);
|
PrepareStatement(LOGIN_DEL_ACCOUNT, "DELETE FROM account WHERE id = ?", CONNECTION_ASYNC);
|
||||||
PrepareStatement(LOGIN_SEL_IP2NATION_COUNTRY, "SELECT c.country FROM ip2nationCountries c, ip2nation i WHERE i.ip < ? AND c.code = i.country ORDER BY i.ip DESC LIMIT 0,1", CONNECTION_SYNCH);
|
|
||||||
PrepareStatement(LOGIN_SEL_AUTOBROADCAST, "SELECT id, weight, text FROM autobroadcast WHERE realmid = ? OR realmid = -1", CONNECTION_SYNCH);
|
PrepareStatement(LOGIN_SEL_AUTOBROADCAST, "SELECT id, weight, text FROM autobroadcast WHERE realmid = ? OR realmid = -1", CONNECTION_SYNCH);
|
||||||
PrepareStatement(LOGIN_GET_EMAIL_BY_ID, "SELECT email FROM account WHERE id = ?", CONNECTION_SYNCH);
|
PrepareStatement(LOGIN_GET_EMAIL_BY_ID, "SELECT email FROM account WHERE id = ?", CONNECTION_SYNCH);
|
||||||
// 0: uint32, 1: uint32, 2: uint8, 3: uint32, 4: string // Complete name: "Login_Insert_AccountLoginDeLete_IP_Logging"
|
// 0: uint32, 1: uint32, 2: uint8, 3: uint32, 4: string // Complete name: "Login_Insert_AccountLoginDeLete_IP_Logging"
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ enum LoginDatabaseStatements : uint32
|
|||||||
LOGIN_UPD_LOGONPROOF,
|
LOGIN_UPD_LOGONPROOF,
|
||||||
LOGIN_SEL_LOGONCHALLENGE,
|
LOGIN_SEL_LOGONCHALLENGE,
|
||||||
LOGIN_SEL_RECONNECTCHALLENGE,
|
LOGIN_SEL_RECONNECTCHALLENGE,
|
||||||
LOGIN_SEL_LOGON_COUNTRY,
|
|
||||||
LOGIN_UPD_FAILEDLOGINS,
|
LOGIN_UPD_FAILEDLOGINS,
|
||||||
LOGIN_SEL_ACCOUNT_ID_BY_NAME,
|
LOGIN_SEL_ACCOUNT_ID_BY_NAME,
|
||||||
LOGIN_SEL_ACCOUNT_LIST_BY_NAME,
|
LOGIN_SEL_ACCOUNT_LIST_BY_NAME,
|
||||||
@@ -95,7 +94,6 @@ enum LoginDatabaseStatements : uint32
|
|||||||
LOGIN_SEL_ACCOUNT_WHOIS,
|
LOGIN_SEL_ACCOUNT_WHOIS,
|
||||||
LOGIN_SEL_REALMLIST_SECURITY_LEVEL,
|
LOGIN_SEL_REALMLIST_SECURITY_LEVEL,
|
||||||
LOGIN_DEL_ACCOUNT,
|
LOGIN_DEL_ACCOUNT,
|
||||||
LOGIN_SEL_IP2NATION_COUNTRY,
|
|
||||||
LOGIN_SEL_AUTOBROADCAST,
|
LOGIN_SEL_AUTOBROADCAST,
|
||||||
LOGIN_SEL_LAST_ATTEMPT_IP,
|
LOGIN_SEL_LAST_ATTEMPT_IP,
|
||||||
LOGIN_SEL_LAST_IP,
|
LOGIN_SEL_LAST_IP,
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#include "BattlenetAccountMgr.h"
|
#include "BattlenetAccountMgr.h"
|
||||||
#include "BigNumber.h"
|
#include "BigNumber.h"
|
||||||
#include "DatabaseEnv.h"
|
#include "DatabaseEnv.h"
|
||||||
|
#include "IPLocation.h"
|
||||||
#include "Opcodes.h"
|
#include "Opcodes.h"
|
||||||
#include "PacketLog.h"
|
#include "PacketLog.h"
|
||||||
#include "QueryCallback.h"
|
#include "QueryCallback.h"
|
||||||
@@ -60,7 +61,6 @@ void WorldSocket::Start()
|
|||||||
std::string ip_address = GetRemoteIpAddress().to_string();
|
std::string ip_address = GetRemoteIpAddress().to_string();
|
||||||
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP_INFO);
|
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP_INFO);
|
||||||
stmt->setString(0, ip_address);
|
stmt->setString(0, ip_address);
|
||||||
stmt->setUInt32(1, inet_addr(ip_address.c_str()));
|
|
||||||
|
|
||||||
_queryProcessor.AddQuery(LoginDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&WorldSocket::CheckIpCallback, this, std::placeholders::_1)));
|
_queryProcessor.AddQuery(LoginDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&WorldSocket::CheckIpCallback, this, std::placeholders::_1)));
|
||||||
}
|
}
|
||||||
@@ -76,9 +76,6 @@ void WorldSocket::CheckIpCallback(PreparedQueryResult result)
|
|||||||
if (fields[0].GetUInt64() != 0)
|
if (fields[0].GetUInt64() != 0)
|
||||||
banned = true;
|
banned = true;
|
||||||
|
|
||||||
if (!fields[1].GetString().empty())
|
|
||||||
_ipCountry = fields[1].GetString();
|
|
||||||
|
|
||||||
} while (result->NextRow());
|
} while (result->NextRow());
|
||||||
|
|
||||||
if (banned)
|
if (banned)
|
||||||
@@ -614,6 +611,9 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr<AuthSession> authSes
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IpLocationRecord* location = sIPLocation->GetData(address))
|
||||||
|
_ipCountry = location->country_code;
|
||||||
|
|
||||||
///- Re-check ip locking (same check as in auth).
|
///- Re-check ip locking (same check as in auth).
|
||||||
if (account.BattleNet.IsLockedToIP) // if ip is locked
|
if (account.BattleNet.IsLockedToIP) // if ip is locked
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -51,6 +51,7 @@
|
|||||||
#include "GuildFinderMgr.h"
|
#include "GuildFinderMgr.h"
|
||||||
#include "GuildMgr.h"
|
#include "GuildMgr.h"
|
||||||
#include "InstanceSaveMgr.h"
|
#include "InstanceSaveMgr.h"
|
||||||
|
#include "IPLocation.h"
|
||||||
#include "Language.h"
|
#include "Language.h"
|
||||||
#include "LFGMgr.h"
|
#include "LFGMgr.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
@@ -1516,6 +1517,9 @@ void World::SetInitialWorldSettings()
|
|||||||
// Load M2 fly by cameras
|
// Load M2 fly by cameras
|
||||||
LoadM2Cameras(m_dataPath);
|
LoadM2Cameras(m_dataPath);
|
||||||
|
|
||||||
|
// Load IP Location Database
|
||||||
|
sIPLocation->Load();
|
||||||
|
|
||||||
std::unordered_map<uint32, std::vector<uint32>> mapData;
|
std::unordered_map<uint32, std::vector<uint32>> mapData;
|
||||||
for (MapEntry const* mapEntry : sMapStore)
|
for (MapEntry const* mapEntry : sMapStore)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ EndScriptData */
|
|||||||
#include "Chat.h"
|
#include "Chat.h"
|
||||||
#include "DatabaseEnv.h"
|
#include "DatabaseEnv.h"
|
||||||
#include "IpAddress.h"
|
#include "IpAddress.h"
|
||||||
|
#include "IPLocation.h"
|
||||||
#include "Language.h"
|
#include "Language.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
#include "Player.h"
|
#include "Player.h"
|
||||||
@@ -290,25 +291,18 @@ public:
|
|||||||
{
|
{
|
||||||
if (param == "on")
|
if (param == "on")
|
||||||
{
|
{
|
||||||
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_LOGON_COUNTRY);
|
if (IpLocationRecord* location = sIPLocation->GetData(handler->GetSession()->GetRemoteAddress()))
|
||||||
uint32 ip = Trinity::Net::address_to_uint(Trinity::Net::make_address_v4(handler->GetSession()->GetRemoteAddress()));
|
|
||||||
EndianConvertReverse(ip);
|
|
||||||
stmt->setUInt32(0, ip);
|
|
||||||
PreparedQueryResult result = LoginDatabase.Query(stmt);
|
|
||||||
if (result)
|
|
||||||
{
|
{
|
||||||
Field* fields = result->Fetch();
|
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_ACCOUNT_LOCK_CONTRY);
|
||||||
std::string country = fields[0].GetString();
|
stmt->setString(0, location->country_code);
|
||||||
stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_ACCOUNT_LOCK_CONTRY);
|
|
||||||
stmt->setString(0, country);
|
|
||||||
stmt->setUInt32(1, handler->GetSession()->GetAccountId());
|
stmt->setUInt32(1, handler->GetSession()->GetAccountId());
|
||||||
LoginDatabase.Execute(stmt);
|
LoginDatabase.Execute(stmt);
|
||||||
handler->PSendSysMessage(LANG_COMMAND_ACCLOCKLOCKED);
|
handler->PSendSysMessage(LANG_COMMAND_ACCLOCKLOCKED);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
handler->PSendSysMessage("[IP2NATION] Table empty");
|
handler->PSendSysMessage("IP2Location] No information");
|
||||||
TC_LOG_DEBUG("server.authserver", "[IP2NATION] Table empty");
|
TC_LOG_DEBUG("server.authserver", "IP2Location] No information");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (param == "off")
|
else if (param == "off")
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include "Chat.h"
|
#include "Chat.h"
|
||||||
#include "DatabaseEnv.h"
|
#include "DatabaseEnv.h"
|
||||||
#include "IpAddress.h"
|
#include "IpAddress.h"
|
||||||
|
#include "IPLocation.h"
|
||||||
#include "Language.h"
|
#include "Language.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
#include "Player.h"
|
#include "Player.h"
|
||||||
@@ -128,25 +129,18 @@ public:
|
|||||||
{
|
{
|
||||||
if (param == "on")
|
if (param == "on")
|
||||||
{
|
{
|
||||||
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_LOGON_COUNTRY);
|
if (IpLocationRecord* location = sIPLocation->GetData(handler->GetSession()->GetRemoteAddress()))
|
||||||
uint32 ip = Trinity::Net::address_to_uint(Trinity::Net::make_address_v4(handler->GetSession()->GetRemoteAddress()));
|
|
||||||
EndianConvertReverse(ip);
|
|
||||||
stmt->setUInt32(0, ip);
|
|
||||||
PreparedQueryResult result = LoginDatabase.Query(stmt);
|
|
||||||
if (result)
|
|
||||||
{
|
{
|
||||||
Field* fields = result->Fetch();
|
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_BNET_ACCOUNT_LOCK_CONTRY);
|
||||||
std::string country = fields[0].GetString();
|
stmt->setString(0, location->country_code);
|
||||||
stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_BNET_ACCOUNT_LOCK_CONTRY);
|
|
||||||
stmt->setString(0, country);
|
|
||||||
stmt->setUInt32(1, handler->GetSession()->GetBattlenetAccountId());
|
stmt->setUInt32(1, handler->GetSession()->GetBattlenetAccountId());
|
||||||
LoginDatabase.Execute(stmt);
|
LoginDatabase.Execute(stmt);
|
||||||
handler->PSendSysMessage(LANG_COMMAND_ACCLOCKLOCKED);
|
handler->PSendSysMessage(LANG_COMMAND_ACCLOCKLOCKED);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
handler->PSendSysMessage("[IP2NATION] Table empty");
|
handler->PSendSysMessage("IP2Location] No information");
|
||||||
TC_LOG_DEBUG("server.authserver", "[IP2NATION] Table empty");
|
TC_LOG_DEBUG("server.authserver", "IP2Location] No information");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (param == "off")
|
else if (param == "off")
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
#include "GroupMgr.h"
|
#include "GroupMgr.h"
|
||||||
#include "InstanceSaveMgr.h"
|
#include "InstanceSaveMgr.h"
|
||||||
#include "IpAddress.h"
|
#include "IpAddress.h"
|
||||||
|
#include "IPLocation.h"
|
||||||
#include "Item.h"
|
#include "Item.h"
|
||||||
#include "Language.h"
|
#include "Language.h"
|
||||||
#include "LFG.h"
|
#include "LFG.h"
|
||||||
@@ -1697,17 +1698,10 @@ public:
|
|||||||
lastIp = fields[4].GetString();
|
lastIp = fields[4].GetString();
|
||||||
lastLogin = fields[5].GetString();
|
lastLogin = fields[5].GetString();
|
||||||
|
|
||||||
uint32 ip = Trinity::Net::address_to_uint(Trinity::Net::make_address_v4(lastIp));
|
if (IpLocationRecord* location = sIPLocation->GetData(lastIp))
|
||||||
EndianConvertReverse(ip);
|
|
||||||
|
|
||||||
// If ip2nation table is populated, it displays the country
|
|
||||||
stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP2NATION_COUNTRY);
|
|
||||||
stmt->setUInt32(0, ip);
|
|
||||||
if (PreparedQueryResult result2 = LoginDatabase.Query(stmt))
|
|
||||||
{
|
{
|
||||||
Field* fields2 = result2->Fetch();
|
|
||||||
lastIp.append(" (");
|
lastIp.append(" (");
|
||||||
lastIp.append(fields2[0].GetString());
|
lastIp.append(location->country_name);
|
||||||
lastIp.append(")");
|
lastIp.append(")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -208,6 +208,16 @@ SourceDirectory = ""
|
|||||||
|
|
||||||
MySQLExecutable = ""
|
MySQLExecutable = ""
|
||||||
|
|
||||||
|
#
|
||||||
|
# IPLocationFile
|
||||||
|
# Description: The path to your IP2Location database CSV file.
|
||||||
|
# Example: "C:/Trinity/IP2Location.csv"
|
||||||
|
# "/home/trinity/IP2Location.csv"
|
||||||
|
# Default: "." - (Current core directory)
|
||||||
|
# "" - (Disabled)
|
||||||
|
|
||||||
|
IPLocationFile = "."
|
||||||
|
|
||||||
#
|
#
|
||||||
###################################################################################################
|
###################################################################################################
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user