diff --git a/XEngine_SQL/mysql.sql b/XEngine_SQL/mysql.sql index a1486904ef04e04c6659eb63477ba78bd4a00ab7..22e774e9d07e3f95916e52e8ab6d4b3444c2cfc9 100644 --- a/XEngine_SQL/mysql.sql +++ b/XEngine_SQL/mysql.sql @@ -41,8 +41,8 @@ CREATE TABLE `Authorize_BannedAddr` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `bEnable` tinyint(4) NOT NULL, `tszIPAddr` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `tszLeftTime` date NULL DEFAULT NULL, - `tszCreateTime` date NOT NULL, + `tszLeftTime` datetime NULL DEFAULT NULL, + `tszCreateTime` datetime NOT NULL, PRIMARY KEY (`ID`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; @@ -58,8 +58,8 @@ CREATE TABLE `Authorize_BannedUser` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `bEnable` tinyint(1) NOT NULL, `tszUserName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `tszLeftTime` date NULL DEFAULT NULL, - `tszCreateTime` date NOT NULL, + `tszLeftTime` datetime NULL DEFAULT NULL, + `tszCreateTime` datetime NOT NULL, PRIMARY KEY (`ID`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp index 89094b421450019b350e5f3e30ed1a72ce19a5d4..088db2c1e715f4df6aef3d4cb1b180b806b5a985 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp @@ -1519,43 +1519,49 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) return false; } - if (nRow <= 0) + if (nRow > 0) { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; - DataBase_MySQL_FreeResult(xhData, xhTable); - return false; - } - - ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); - pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); - //ID - int nFliedValue = 0; - if (NULL != ppszResult[nFliedValue]) { - pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); - } - //是否启用 - nFliedValue++; - if (NULL != ppszResult[nFliedValue]) { - pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); - } - - //地址 - nFliedValue++; + //ID + int nFliedValue = 0; + if (NULL != ppszResult[nFliedValue]) { + pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); + } + //是否启用 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); + } + //地址 + nFliedValue++; + //过期时间 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); + } - //过期时间 - nFliedValue++; - if (NULL != ppszResult[nFliedValue]) { - _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); - } + //注册时间 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); + } - //注册时间 - nFliedValue++; - if (NULL != ppszResult[nFliedValue]) { - _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); + //如果启用 且 tszLeftTime 大于 0 + if (pSt_Banned->bEnable && _tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszStrTime[128]; + memset(tszStrTime, '\0', sizeof(tszStrTime)); + BaseLib_OperatorTime_TimeToStr(tszStrTime); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); + if (nTimer < 0) //如果没有超过禁用时间 直接返回 说明存在黑名单 不在执行判断IP地址 + { + return true; + } + } } - DataBase_MySQL_FreeResult(xhData, xhTable); } @@ -1584,7 +1590,7 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) if (nRow <= 0) { SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTUSER; DataBase_MySQL_FreeResult(xhData, xhTable); return false; } @@ -1622,31 +1628,31 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) { _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); } - - DataBase_MySQL_FreeResult(xhData, xhTable); - } - //处理是否被禁用 - if (!pSt_Banned->bEnable) - { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE; - return false; - } - if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) - { - __int64x nTimer = 0; - XCHAR tszStrTime[128]; - memset(tszStrTime, '\0', sizeof(tszStrTime)); - BaseLib_OperatorTime_TimeToStr(tszStrTime); - BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); - if (nTimer > 0) + //处理是否被禁用 + if (!pSt_Banned->bEnable) { SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE; return false; } + if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszStrTime[128]; + memset(tszStrTime, '\0', sizeof(tszStrTime)); + BaseLib_OperatorTime_TimeToStr(tszStrTime); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); + if (nTimer < 0) + { + return true; + } + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; + } + DataBase_MySQL_FreeResult(xhData, xhTable); } - return true; + + return false; } /******************************************************************** 函数名称:DBModule_MySQL_BannedUPDate diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp index 08c33ef5a296b2f09bbd5205a81f5b64539e701d..9aae3ef5dcc72f22c653c336effdd0e24bfe256b 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp @@ -1389,7 +1389,7 @@ bool CDBModule_SQLite::DBModule_SQLite_BannedList(AUTHREG_BANNED*** pppSt_Banned bool CDBModule_SQLite::DBModule_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) { SQLPacket_IsErrorOccur = false; - //判断用域名是否存在 + //判断用户名是否存在 if (_tcsxlen(pSt_Banned->tszUserName) > 0) { int nRow = 0; @@ -1405,28 +1405,39 @@ bool CDBModule_SQLite::DBModule_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) SQLPacket_dwErrorCode = DataBase_GetLastError(); return false; } - if (nRow <= 0) + if (nRow > 0) { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTMATCH; - DataBase_SQLite_FreeTable(ppszResult); - return false; + int nFliedValue = nColumn; + //ID + pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); + nFliedValue++; + //是否启用 + pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //地址 + nFliedValue++; + //过期时间 + _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); + nFliedValue++; + //注册时间 + _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); + + //如果启用 且 tszLeftTime 大于 0 + if (pSt_Banned->bEnable && _tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszStrTime[128]; + memset(tszStrTime, '\0', sizeof(tszStrTime)); + + BaseLib_OperatorTime_TimeToStr(tszStrTime); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); + if (nTimer < 0) //如果没有超过禁用时间 直接返回 说明存在黑名单 不在执行判断IP地址 + { + return true; + } + } } - int nFliedValue = nColumn; - //ID - pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); - nFliedValue++; - //是否启用 - pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); - nFliedValue++; - //地址 - nFliedValue++; - //过期时间 - _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); - nFliedValue++; - //注册时间 - _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); - DataBase_SQLite_FreeTable(ppszResult); + DataBase_SQLite_FreeTable(ppszResult); } //判断IP地址是否存在 if (_tcsxlen(pSt_Banned->tszIPAddr) > 0) @@ -1437,7 +1448,7 @@ bool CDBModule_SQLite::DBModule_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) XCHAR tszSQLStatement[1024]; memset(tszSQLStatement, '\0', 1024); - _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_BannedAddr WHERE tszIPAddr = '%s'"), pSt_Banned->tszIPAddr); + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_BannedAddr WHERE tszIPAddr = '%s'"), pSt_Banned->tszIPAddr); if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) { SQLPacket_IsErrorOccur = true; @@ -1447,50 +1458,50 @@ bool CDBModule_SQLite::DBModule_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) if (nRow <= 0) { SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTMATCH; - DataBase_SQLite_FreeTable(ppszResult); + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTUSER; return false; } + int nFliedValue = nColumn; - //ID + //ID pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); - nFliedValue++; - //是否启用 + nFliedValue++; + //是否启用 pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); - nFliedValue++; - //地址 - nFliedValue++; - //过期时间 - _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); - nFliedValue++; - //注册时间 - _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); - DataBase_SQLite_FreeTable(ppszResult); - } - //处理是否被禁用 - if (!pSt_Banned->bEnable) - { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE; - return false; - } - if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) - { - __int64x nTimer = 0; - XCHAR tszStrTime[128]; - memset(tszStrTime, '\0', sizeof(tszStrTime)); + nFliedValue++; + //地址 + nFliedValue++; + //过期时间 + _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); + nFliedValue++; + //注册时间 + _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); - BaseLib_OperatorTime_TimeToStr(tszStrTime); - BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); - if (nTimer > 0) - { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; - return false; - } + //处理是否被禁用 + if (!pSt_Banned->bEnable) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE; + return false; + } + if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszStrTime[128]; + memset(tszStrTime, '\0', sizeof(tszStrTime)); + + BaseLib_OperatorTime_TimeToStr(tszStrTime); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); + if (nTimer < 0) + { + return true; + } + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; + } + DataBase_SQLite_FreeTable(ppszResult); } - - return true; + return false; } /******************************************************************** 函数名称:DBModule_SQLite_BannedUPDate diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp index 81188f5f4155bf65d1d1f3de9b66feb056f16a21..8d637ca766c66d9cbcf5f8353bbc2df86fe22f25 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp @@ -80,7 +80,7 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "user name is banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户名:%s,注册失败,用户名已经被禁用!"), lpszClientAddr, st_Banned.tszUserName); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户名:%s,注册失败,用户名或IP地址已经被禁用!"), lpszClientAddr, st_Banned.tszUserName); return false; } //填充写入数据 diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp index fa73a14d15d9163002726d92932d30adbc72b8d6..a286baa2a44ba22b63e02fd4c99c15aa00f1ef7b 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp @@ -76,7 +76,7 @@ bool XEngine_Client_HttpTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "ip address is banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,登录连接被阻止,IP地址被禁用!"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,登录连接被阻止,用户名或IP地址被禁用!"), lpszClientAddr); return false; } if (0 == _tcsxnicmp(lpszMethodPost, pSt_HTTPParament->tszHttpMethod, _tcsxlen(lpszMethodPost))) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp index b4cb4acf07f15ca9dbc7bdb8a1140b8d0142475d..77ff1595e0f7ecb5f645df9493047002556bb766 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp @@ -59,6 +59,7 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); _tcsxcpy(st_Banned.tszIPAddr, lpszClientAddr); + _tcsxcpy(st_Banned.tszUserName, lpszMsgBuffer); BaseLib_OperatorIPAddr_SegAddr(st_Banned.tszIPAddr); //是否在黑名单 bool bSuccess = false; @@ -75,7 +76,7 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n pSt_ProtocolHdr->wReserve = 423; Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,登录连接被阻止,IP地址被禁用!"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,登录连接被阻止,用户名或IP地址被禁用!"), lpszClientAddr); return false; }