From 1dbcfb479003b4a1d08415831174301e9420fa72 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 1 Nov 2022 11:29:37 +0800 Subject: [PATCH 01/31] fixed:app example build sdl error --- .../Authorize_APPClient/Authorize_APPClient.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp index f51e403..bb09449 100644 --- a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp +++ b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp @@ -118,7 +118,7 @@ int AuthClient_Register() int nMsgLen = 0; CHAR* ptszMsgBuffer = NULL; - APIHelp_HttpRequest_Post(lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); + APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); printf("AuthClient_Register:\n%s\n", ptszMsgBuffer); BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); @@ -138,7 +138,7 @@ int AuthClient_Pay() int nMsgLen = 0; CHAR* ptszMsgBuffer = NULL; - APIHelp_HttpRequest_Post(lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); + APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); printf("AuthClient_Pay:\n%s\n", ptszMsgBuffer); BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); @@ -213,7 +213,7 @@ int AuthClient_GetPass() int nMsgLen = 0; CHAR* ptszMsgBuffer = NULL; - APIHelp_HttpRequest_Post(lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); + APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); printf("AuthClient_GetPass:\n%s\n", ptszMsgBuffer); BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); @@ -232,7 +232,7 @@ int AuthClient_GetTime() int nMsgLen = 0; CHAR* ptszMsgBuffer = NULL; - APIHelp_HttpRequest_Post(lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); + APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); printf("AuthClient_GetTime:\n%s\n", ptszMsgBuffer); BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); @@ -255,7 +255,7 @@ int AuthClient_Delete() int nMsgLen = 0; CHAR* ptszMsgBuffer = NULL; - APIHelp_HttpRequest_Post(lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); + APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); printf("AuthClient_Delete:\n%s\n", ptszMsgBuffer); BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); @@ -274,7 +274,7 @@ int AuthClient_Try() int nMsgLen = 0; CHAR* ptszMsgBuffer = NULL; - APIHelp_HttpRequest_Post(lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); + APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); printf("AuthClient_Try:\n%s\n", ptszMsgBuffer); BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); -- Gitee From 88d048feb014dcdaa4b99ad9d339730bf8d573bc Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 25 Nov 2022 13:11:07 +0800 Subject: [PATCH 02/31] update:readme --- README.en.md | 10 +++++++++- README.md | 10 +++++++++- .../XEngineAuthorizeApp.aps | Bin 119060 -> 100928 bytes 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/README.en.md b/README.en.md index a295b2f..9a7bf49 100644 --- a/README.en.md +++ b/README.en.md @@ -73,8 +73,16 @@ make complie make FLAGS=InstallAll Install File make FLAGS=CleanAll Clear Complie +## how to use +#### server(management) +Windows:complie complete,copy VSCopy_x86 or VSCopy_x64 to your complie dir,should copy depend module when execution complete,and copy XEngine_Release dir all file to complie dir +Linux:it can be execution.... + +#### client +client can be refer XEngine_Apps,and can be refer the docment of protocol,The process should be:register->login->pay->timeout->end. + ## test server -address:app.xyry.org or 159.75.200.173 +address:app.xyry.org port :tcp port 5300,websocket port 5301,http management port 5302,Transmission verification password: no encryption ## Screenshot of the program diff --git a/README.md b/README.md index 07a4e78..4f789e1 100644 --- a/README.md +++ b/README.md @@ -73,8 +73,16 @@ make 编译 make FLAGS=InstallAll 安装库程序 make FLAGS=CleanAll 清理编译 +## 如何使用 +#### 服务端(管理端) +Windows:编译成功后,拷贝VSCopy_x86或者VSCopy_x64 到你的编译目录,执行自动拷贝依赖的模块,然后把XEngine_Release下的文件全部拷贝到编译目录即可 +Linux:直接运行即可 + +#### 客户端 +客户端可以参考XEngine_Apps的例子,也可以参考文档的通信协议自己集成到你的客户端,流程应该是:注册->登录->充值->等待超时->结束. + ## 测试服务器 -地址:app.xyry.org 或者 159.75.200.173 +地址:app.xyry.org 端口:tcp端口 5300,websocket端口 5301,http管理端 5302,传输验证密码:无加密 ## 程序截图 diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index 3132c9f06e4d7b8b3700081abd8ee7e1630213d2..46ef550e5b8229e3fb11d635812ae291e71a164e 100644 GIT binary patch delta 1522 zcmb7DUr1A76hG%q^JXnw%(-qemuTInhP7dTASjX2HFenhvn-8zNT>&~$et=HqK6(9 zM|Of<`iBn@{lRF>OhkgrxoJdypr~GgAPHZRo?73xdnxp3esJ$O=XZYReCNC0{q^0- z8|hmVsmZ-^5uuh=HyqA`B>><9UY11Hh5p;I{@eIssVXo)a6_!;A$F@uI?Y?-xQdlH z`ph6I?Nl7sEKiGd9-uQ3-Y(0;Vs#L!YzF@3Oy^M(k2MbBSa8yH(#QHrWNcp$$5r2I_<#fJWFOqJZ$j!f%F<9OTdx z+S#2zHT#lt3oofmpey?gMi#!o*9DhEUmFL{xq8oq%A;3D>Xcy%dHhhxF8OzWk51CuBn-|wbq+exbrJm7^*uuZ(ZR2=rsC7q_xuya1tv|pPG-Jzhr zrWByd3gS`$YM~XXGgFMqVW1LnRD~Y-J23NGQqSHEriTF&8yFQ{2ArjMy^UsqHcAIn zdK<8*Uie`t7e}I0yVIz{KH|og^d(qE?e!}xTi_QR43?O=`vaeY2aH~al@w6rJ_k+K z7twgrN0Tv4i$h_q*aKj?0$FGJSd3FLFiW{XkH!DLK>*9{203#M^=+`)s#2m$$&(S2V zQruSh{9t7+0_X+&P9oif2rT74fnzBwQKtX!-J1fPk(54_XGNLCWkvq@09SD3q(FaLxoT203l(sSu$E7D zt=H(7wX~i3%aSc+yuQ5-U_=!B*UZ>I&14+$8nyuJJb}D+0!#8TBI`xE H?l1WZjs&pq delta 11045 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 Jr Date: Tue, 20 Dec 2022 09:46:27 +0800 Subject: [PATCH 03/31] added:window effects class --- .../AuthorizeModule_Help/AuthHelp_Define.h | 46 +++++++ .../AuthorizeModule_Help/AuthHelp_Error.h | 9 +- .../AuthHelp_Windows/AuthHelp_Windows.cpp | 127 ++++++++++++++++++ .../AuthHelp_Windows/AuthHelp_Windows.h | 23 ++++ .../AuthorizeModule_Help.def | 5 +- .../AuthorizeModule_Help.vcxproj | 2 + .../AuthorizeModule_Help.vcxproj.filters | 12 ++ XEngine_Source/AuthorizeModule_Help/pch.cpp | 13 ++ XEngine_Source/AuthorizeModule_Help/pch.h | 8 +- 9 files changed, 242 insertions(+), 3 deletions(-) create mode 100644 XEngine_Source/AuthorizeModule_Help/AuthHelp_Windows/AuthHelp_Windows.cpp create mode 100644 XEngine_Source/AuthorizeModule_Help/AuthHelp_Windows/AuthHelp_Windows.h diff --git a/XEngine_Source/AuthorizeModule_Help/AuthHelp_Define.h b/XEngine_Source/AuthorizeModule_Help/AuthHelp_Define.h index 069d700..f19a6aa 100644 --- a/XEngine_Source/AuthorizeModule_Help/AuthHelp_Define.h +++ b/XEngine_Source/AuthorizeModule_Help/AuthHelp_Define.h @@ -75,4 +75,50 @@ extern "C" BOOL AuthHelp_ClipBoard_Get(CHAR * ptszMsgBuffer, int* pInt_MsgLen, D 备注: *********************************************************************/ extern "C" BOOL AuthHelp_ClipBoard_Clear(); +/************************************************************************/ +/* 窗口类导出定义 */ +/************************************************************************/ +/******************************************************************** +函数名称:AuthHelp_Windows_Dithering +函数功能:窗口抖动函数 + 参数.一:hWnd + In/Out:In + 类型:窗口句柄 + 可空:N + 意思:要设置的窗口 + 参数.二:nDitheringDegree + In/Out:In + 类型:整数型 + 可空:Y + 意思:抖动次数,默认4此 + 参数.三:nDitheringCareer + In/Out:In + 类型:整数型 + 可空:Y + 意思:抖动间隔,默认30毫秒 +返回值 + 类型:逻辑型 + 意思:是否成功抖动 +备注:仿造QQ抖动,支持抖动后播放声音或者不播放,不播放传递NULL +*********************************************************************/ +extern "C" BOOL AuthHelp_Windows_Dithering(HWND hWnd, int nDitheringDegree = 4, int nDitheringCareer = 30); +/******************************************************************** +函数名称:AuthHelp_Windows_CreateTooltip +函数功能:为控件句柄添加提示 + 参数.一:hWnd + In/Out:In + 类型:句柄 + 可空:N + 意思:控件的句柄 + 参数.二:lpszContextOfTip + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:是否添加成功 +返回值 + 类型:逻辑型 + 意思:是否成功添加 +备注: +*********************************************************************/ +extern "C" BOOL AuthHelp_Windows_CreateTooltip(HWND hWnd, LPCTSTR lpszContextOfTip); #endif \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Help/AuthHelp_Error.h b/XEngine_Source/AuthorizeModule_Help/AuthHelp_Error.h index 1970155..2e216ac 100644 --- a/XEngine_Source/AuthorizeModule_Help/AuthHelp_Error.h +++ b/XEngine_Source/AuthorizeModule_Help/AuthHelp_Error.h @@ -20,4 +20,11 @@ #define ERROR_AUTHORIZE_MODULE_HELP_CLIPBOARD_OPEN 0x0050002 //打开剪贴板失败 #define ERROR_AUTHORIZE_MODULE_HELP_CLIPBOARD_OWNER 0x0050003 //设置所有者失败 #define ERROR_AUTHORIZE_MODULE_HELP_CLIPBOARD_MALLOC 0x0050004 //申请内存失败 -#define ERROR_AUTHORIZE_MODULE_HELP_CLIPBOARD_GETDATA 0x0050005 //获取内容失败 \ No newline at end of file +#define ERROR_AUTHORIZE_MODULE_HELP_CLIPBOARD_GETDATA 0x0050005 //获取内容失败 +/************************************************************************/ +/* 窗口 */ +/************************************************************************/ +#define ERROR_AUTHORIZE_MODULE_HELP_WINDOW_GETRECT 0x0050010 //获取失败 +#define ERROR_AUTHORIZE_MODULE_HELP_WINDOW_INIT 0x0050011 //初始化窗口失败 +#define ERROR_AUTHORIZE_MODULE_HELP_WINDOW_CREATEWINDOW 0x0050012 //创建窗口失败 +#define ERROR_AUTHORIZE_MODULE_HELP_WINDOW_SETWINDOW 0x0050013 //设置窗口失败 \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Help/AuthHelp_Windows/AuthHelp_Windows.cpp b/XEngine_Source/AuthorizeModule_Help/AuthHelp_Windows/AuthHelp_Windows.cpp new file mode 100644 index 0000000..4651715 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_Help/AuthHelp_Windows/AuthHelp_Windows.cpp @@ -0,0 +1,127 @@ +#include "pch.h" +#include "AuthHelp_Windows.h" +/******************************************************************** +// Created: 2022/12/19 16:38:15 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Help\AuthHelp_Windows\AuthHelp_Windows.cpp +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Help\AuthHelp_Windows +// File Base: AuthHelp_Windows +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 窗口效果函数 +// History: +*********************************************************************/ +CAuthHelp_Windows::CAuthHelp_Windows() +{ +} +CAuthHelp_Windows::~CAuthHelp_Windows() +{ +} +////////////////////////////////////////////////////////////////////////// +// 公有函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:AuthHelp_Windows_Dithering +函数功能:窗口抖动函数 + 参数.一:hWnd + In/Out:In + 类型:窗口句柄 + 可空:N + 意思:要设置的窗口 + 参数.二:nDitheringDegree + In/Out:In + 类型:整数型 + 可空:Y + 意思:抖动次数,默认4此 + 参数.三:nDitheringCareer + In/Out:In + 类型:整数型 + 可空:Y + 意思:抖动间隔,默认30毫秒 +返回值 + 类型:逻辑型 + 意思:是否成功抖动 +备注:仿造QQ抖动,支持抖动后播放声音或者不播放,不播放传递NULL +*********************************************************************/ +BOOL CAuthHelp_Windows::AuthHelp_Windows_Dithering(HWND hWnd, int nDitheringDegree /* = 4 */, int nDitheringCareer /* = 30 */) +{ + RECT st_Rect = { '\0' };//定义一个矩形 + //获得窗口边框 + if (!GetWindowRect(hWnd, &st_Rect)) + { + Help_IsErrorOccur = TRUE; + Help_dwErrorCode = ERROR_AUTHORIZE_MODULE_HELP_WINDOW_GETRECT; + return FALSE; + } + for (int i = 0; i < nDitheringDegree; i++) + { + Sleep(nDitheringCareer);//延迟。 + MoveWindow(hWnd, st_Rect.left - 1, st_Rect.top - 1, st_Rect.right - st_Rect.left, st_Rect.bottom - st_Rect.top, TRUE); + Sleep(nDitheringCareer); + MoveWindow(hWnd, st_Rect.left - 1, st_Rect.top, st_Rect.right - st_Rect.left, st_Rect.bottom - st_Rect.top, TRUE); + Sleep(nDitheringCareer); + MoveWindow(hWnd, st_Rect.left - 1, st_Rect.top + 1, st_Rect.right - st_Rect.left, st_Rect.bottom - st_Rect.top, TRUE); + Sleep(nDitheringCareer); + MoveWindow(hWnd, st_Rect.left, st_Rect.top + 1, st_Rect.right - st_Rect.left, st_Rect.bottom - st_Rect.top, TRUE); + Sleep(nDitheringCareer); + MoveWindow(hWnd, st_Rect.left + 1, st_Rect.top + 1, st_Rect.right - st_Rect.left, st_Rect.bottom - st_Rect.top, TRUE); + Sleep(nDitheringCareer); + MoveWindow(hWnd, st_Rect.left + 1, st_Rect.top, st_Rect.right - st_Rect.left, st_Rect.bottom - st_Rect.top, TRUE); + Sleep(nDitheringCareer); + MoveWindow(hWnd, st_Rect.left + 1, st_Rect.top - 1, st_Rect.right - st_Rect.left, st_Rect.bottom - st_Rect.top, TRUE); + Sleep(nDitheringCareer); + MoveWindow(hWnd, st_Rect.left, st_Rect.top - 1, st_Rect.right - st_Rect.left, st_Rect.bottom - st_Rect.top, TRUE); + } + MoveWindow(hWnd, st_Rect.left, st_Rect.top, st_Rect.right - st_Rect.left, st_Rect.bottom - st_Rect.top, 1);//归为 + return TRUE; +} +/******************************************************************** +函数名称:AuthHelp_Windows_CreateTooltip +函数功能:为控件句柄添加提示 + 参数.一:hWnd + In/Out:In + 类型:句柄 + 可空:N + 意思:控件的句柄 + 参数.二:lpszContextOfTip + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:是否添加成功 +返回值 + 类型:逻辑型 + 意思:是否成功添加 +备注: +*********************************************************************/ +BOOL CAuthHelp_Windows::AuthHelp_Windows_CreateTooltip(HWND hWnd, LPCTSTR lpszContextOfTip) +{ + Help_IsErrorOccur = FALSE; + + TOOLINFO tInfo; + RECT st_Rect = { '\0' }; + + HWND hWndEx = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, 0, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, 0, GetModuleHandle(NULL), 0); + if (NULL == hWndEx) + { + Help_IsErrorOccur = TRUE; + Help_dwErrorCode = ERROR_AUTHORIZE_MODULE_HELP_WINDOW_CREATEWINDOW; + return FALSE; + } + if (!SetWindowPos(hWndEx, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE)) + { + Help_IsErrorOccur = TRUE; + Help_dwErrorCode = ERROR_AUTHORIZE_MODULE_HELP_WINDOW_SETWINDOW; + return FALSE; + } + GetClientRect(hWnd, &st_Rect); + + tInfo.cbSize = sizeof(TOOLINFO); + tInfo.uFlags = TTF_SUBCLASS; + tInfo.hwnd = hWnd; + tInfo.hinst = GetModuleHandle(NULL); + tInfo.uId = 0; + tInfo.lpszText = (LPTSTR)lpszContextOfTip; + tInfo.rect = st_Rect; + SendMessage(hWndEx, TTM_ADDTOOL, 0, (LPARAM)&tInfo); + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Help/AuthHelp_Windows/AuthHelp_Windows.h b/XEngine_Source/AuthorizeModule_Help/AuthHelp_Windows/AuthHelp_Windows.h new file mode 100644 index 0000000..3043b1e --- /dev/null +++ b/XEngine_Source/AuthorizeModule_Help/AuthHelp_Windows/AuthHelp_Windows.h @@ -0,0 +1,23 @@ +#pragma once +/******************************************************************** +// Created: 2022/12/19 16:37:34 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Help\AuthHelp_Windows\AuthHelp_Windows.h +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Help\AuthHelp_Windows +// File Base: AuthHelp_Windows +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 窗口效果函数 +// History: +*********************************************************************/ + +class CAuthHelp_Windows +{ +public: + CAuthHelp_Windows(); + ~CAuthHelp_Windows(); +public: + BOOL AuthHelp_Windows_Dithering(HWND hWnd, int nDitheringDegree = 4, int nDitheringCareer = 30); + BOOL AuthHelp_Windows_CreateTooltip(HWND hWnd, LPCTSTR lpszContextOfTip); +private: +}; \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.def b/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.def index b0ee642..09f483e 100644 --- a/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.def +++ b/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.def @@ -5,4 +5,7 @@ EXPORTS AuthHelp_ClipBoard_Set AuthHelp_ClipBoard_Get - AuthHelp_ClipBoard_Clear \ No newline at end of file + AuthHelp_ClipBoard_Clear + + AuthHelp_Windows_Dithering + AuthHelp_Windows_CreateTooltip \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj b/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj index 19c883e..3593e62 100644 --- a/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj +++ b/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj @@ -146,11 +146,13 @@ + + Create diff --git a/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj.filters b/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj.filters index 2d3595c..e8e8913 100644 --- a/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj.filters +++ b/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj.filters @@ -19,6 +19,12 @@ {f8204c92-f86d-47b3-869b-bc57822a8276} + + {d240ac1c-aaa2-40cf-9b28-dffdc2f25922} + + + {4a1f4a92-dfc7-4a5a-bd47-85349ebdc583} + @@ -36,6 +42,9 @@ 头文件 + + 头文件\AuthHelp_Windows + @@ -47,6 +56,9 @@ 源文件\AuthHelp_ClipBoard + + 源文件\AuthHelp_Windows + diff --git a/XEngine_Source/AuthorizeModule_Help/pch.cpp b/XEngine_Source/AuthorizeModule_Help/pch.cpp index a1c0f06..d025dd5 100644 --- a/XEngine_Source/AuthorizeModule_Help/pch.cpp +++ b/XEngine_Source/AuthorizeModule_Help/pch.cpp @@ -1,5 +1,6 @@ #include "pch.h" #include "AuthHelp_ClipBoard/AuthHelp_ClipBoard.h" +#include "AuthHelp_Windows/AuthHelp_Windows.h" /******************************************************************** // Created: 2022/08/12 14:14:11 // File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Help\pch.cpp @@ -15,6 +16,7 @@ BOOL Help_IsErrorOccur = FALSE; DWORD Help_dwErrorCode = 0; ////////////////////////////////////////////////////////////////////////// CAuthHelp_ClipBoard m_HelpClipBoard; +CAuthHelp_Windows m_HelpWindow; ////////////////////////////////////////////////////////////////////////// extern "C" DWORD AuthHelp_GetLastError(int* pInt_SysError) { @@ -40,4 +42,15 @@ extern "C" BOOL AuthHelp_ClipBoard_Clear() { return m_HelpClipBoard.AuthHelp_ClipBoard_Clear(); } +/************************************************************************/ +/* 窗口类导出定义 */ +/************************************************************************/ +extern "C" BOOL AuthHelp_Windows_Dithering(HWND hWnd, int nDitheringDegree, int nDitheringCareer) +{ + return m_HelpWindow.AuthHelp_Windows_Dithering(hWnd, nDitheringDegree, nDitheringCareer); +} +extern "C" BOOL AuthHelp_Windows_CreateTooltip(HWND hWnd, LPCTSTR lpszContextOfTip) +{ + return m_HelpWindow.AuthHelp_Windows_CreateTooltip(hWnd, lpszContextOfTip); +} #endif \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Help/pch.h b/XEngine_Source/AuthorizeModule_Help/pch.h index 8529f7f..e0983a0 100644 --- a/XEngine_Source/AuthorizeModule_Help/pch.h +++ b/XEngine_Source/AuthorizeModule_Help/pch.h @@ -10,6 +10,7 @@ // 添加要在此处预编译的标头 #include "framework.h" #include +#include #endif //PCH_H #include "AuthHelp_Define.h" #include "AuthHelp_Error.h" @@ -25,4 +26,9 @@ // History: *********************************************************************/ extern BOOL Help_IsErrorOccur; -extern DWORD Help_dwErrorCode; \ No newline at end of file +extern DWORD Help_dwErrorCode; + + +#ifdef _MSC_BUILD +#pragma comment(lib,"Comctl32.lib") +#endif \ No newline at end of file -- Gitee From 65692260456c67c67bfb61d624760aea59bc887b Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 27 Dec 2022 13:12:52 +0800 Subject: [PATCH 04/31] added:tips window for management program --- .../XEngineAuthorizeApp.aps | Bin 100928 -> 119184 bytes .../XEngine_AuthorizeAppDlg.cpp | 5 +++++ .../XEngine_AuthorizeAppDlg.h | 2 ++ 3 files changed, 7 insertions(+) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index 46ef550e5b8229e3fb11d635812ae291e71a164e..c2d292478ffc28c392dab2fd04250849b5a93718 100644 GIT binary patch delta 10740 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 diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp index bc356f2..cb7ae70 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp @@ -28,6 +28,8 @@ void CXEngineAuthorizeAppDlg::DoDataExchange(CDataExchange* pDX) CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_TAB1, m_TabWindows); DDX_Control(pDX, IDC_EDIT1, m_EditLog); + DDX_Control(pDX, IDC_BUTTON1, m_BtnLogSave); + DDX_Control(pDX, IDC_BUTTON2, m_BtnLogClear); } BEGIN_MESSAGE_MAP(CXEngineAuthorizeAppDlg, CDialogEx) @@ -94,6 +96,9 @@ BOOL CXEngineAuthorizeAppDlg::OnInitDialog() m_TabWindows.SetCurSel(0); hMainWnd = m_hWnd; + + AuthHelp_Windows_CreateTooltip(m_BtnLogSave.m_hWnd, _T("保存日志为文件")); + AuthHelp_Windows_CreateTooltip(m_BtnLogClear.m_hWnd, _T("清空日志窗口")); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h index fec042d..5ca84ff 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h @@ -41,4 +41,6 @@ public: CEdit m_EditLog; afx_msg void OnBnClickedButton1(); afx_msg void OnBnClickedButton2(); + CButton m_BtnLogSave; + CButton m_BtnLogClear; }; -- Gitee From 04f4260f888ae2c93430961ae26c5d5e7d3ec93a Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 27 Dec 2022 14:11:01 +0800 Subject: [PATCH 05/31] modify:must set device type for token login --- .../AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp index c76ed0f..141f113 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp @@ -17,19 +17,28 @@ BOOL XEngine_AuthorizeHTTP_Token(LPCTSTR lpszClientAddr, TCHAR** pptszList, int if (0 == _tcsnicmp(lpszAPILogin, tszURLValue, _tcslen(lpszAPILogin))) { - //http://app.xyry.org:5302/api?function=login&user=123123aa&pass=123123 + //http://app.xyry.org:5302/api?function=login&user=123123aa&pass=123123&device=36 TCHAR tszUserName[128]; TCHAR tszUserPass[128]; + TCHAR tszDeviceType[128]; XNETHANDLE xhToken = 0; AUTHREG_USERTABLE st_UserTable; memset(tszUserName, '\0', sizeof(tszUserName)); memset(tszUserPass, '\0', sizeof(tszUserPass)); + memset(tszDeviceType, '\0', sizeof(tszDeviceType)); memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE)); + if (nListCount < 3) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "request parament is incorrent"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,登录失败,请求参数不正确"), lpszClientAddr); + return FALSE; + } BaseLib_OperatorString_GetKeyValue(pptszList[1], "=", tszURLKey, tszUserName); BaseLib_OperatorString_GetKeyValue(pptszList[2], "=", tszURLKey, tszUserPass); - + BaseLib_OperatorString_GetKeyValue(pptszList[3], "=", tszURLKey, tszDeviceType); //是否使用了第三方验证 if (st_AuthConfig.st_XLogin.bPassAuth) { @@ -42,7 +51,7 @@ BOOL XEngine_AuthorizeHTTP_Token(LPCTSTR lpszClientAddr, TCHAR** pptszList, int _tcscpy(st_AuthProtocol.tszUserName, tszUserName); _tcscpy(st_AuthProtocol.tszUserPass, tszUserPass); - st_AuthProtocol.enDeviceType = ENUM_PROTOCOL_FOR_DEVICE_TYPE_WEB; + st_AuthProtocol.enDeviceType = (ENUM_PROTOCOLDEVICE_TYPE)_ttoi(tszDeviceType); Protocol_Packet_HttpUserPass(tszSDBuffer, &nSDLen, &st_AuthProtocol); APIHelp_HttpRequest_Custom(_T("POST"), st_AuthConfig.st_XLogin.st_PassUrl.tszPassLogin, tszSDBuffer, &nHTTPCode, &ptszMsgBuffer, &nHTTPLen); @@ -134,7 +143,7 @@ BOOL XEngine_AuthorizeHTTP_Token(LPCTSTR lpszClientAddr, TCHAR** pptszList, int XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,用户名:%s,登录失败,客户端类型错误"), lpszClientAddr, tszUserName); return FALSE; } - st_UserTable.enDeviceType = ENUM_PROTOCOL_FOR_DEVICE_TYPE_WEB; + st_UserTable.enDeviceType = (ENUM_PROTOCOLDEVICE_TYPE)_ttoi(tszDeviceType); if (!Session_Authorize_Insert(lpszClientAddr, &st_UserTable, XENGINE_AUTH_APP_NETTYPE_HTTP)) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 500, "server is error"); -- Gitee From caf991f412a5b0dd4a20ffd4f1d170d6415455ce Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 27 Dec 2022 14:52:00 +0800 Subject: [PATCH 06/31] added:banned query list insert delete for sqlite --- .../AuthorizeModule_Database.def | 6 +- .../Database_Define.h | 73 ++++- .../Database_SQLite/Database_SQLite.cpp | 276 ++++++++++++++++++ .../Database_SQLite/Database_SQLite.h | 5 + .../AuthorizeModule_Database/pch.cpp | 16 + XEngine_Source/XAuth_Protocol.h | 11 +- 6 files changed, 384 insertions(+), 3 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def index 60ea7bf..f24c916 100644 --- a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def +++ b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def @@ -21,4 +21,8 @@ EXPORTS Database_SQLite_TryQuery Database_SQLite_TryDelete Database_SQLite_TryClear - Database_SQLite_TrySet \ No newline at end of file + Database_SQLite_TrySet + Database_SQLite_BannedInsert + Database_SQLite_BannedDelete + Database_SQLite_BannedList + Database_SQLite_BannedExist \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Database/Database_Define.h b/XEngine_Source/AuthorizeModule_Database/Database_Define.h index def70a0..79973e6 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_Define.h +++ b/XEngine_Source/AuthorizeModule_Database/Database_Define.h @@ -332,4 +332,75 @@ extern "C" BOOL Database_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUT 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL Database_SQLite_TrySet(AUTHREG_NETVER* pSt_AuthVer); \ No newline at end of file +extern "C" BOOL Database_SQLite_TrySet(AUTHREG_NETVER* pSt_AuthVer); +/******************************************************************** +函数名称:Database_SQLite_BannedInsert +函数功能:黑名单列表插入 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL Database_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned); +/******************************************************************** +函数名称:Database_SQLite_BannedDelete +函数功能:黑名单列表删除 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL Database_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned); +/******************************************************************** +函数名称:Database_SQLite_BannedList +函数功能:黑名单列表查询 + 参数.一:pppSt_BannedUser + In/Out:Out + 类型:三级指针 + 可空:N + 意思:禁用的用户名列表 + 参数.二:pInt_UserCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出用户禁用列表个数 + 参数.三:pppSt_BannedAddr + In/Out:Out + 类型:三级指针 + 可空:N + 意思:禁用的IP地址列表 + 参数.四:pInt_AddrCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出地址禁用列表个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount); +/******************************************************************** +函数名称:Database_SQLite_BannedExist +函数功能:名单是否存在黑名单列表 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL Database_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned); \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp index 29c428e..fbc88b5 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp @@ -1080,6 +1080,282 @@ BOOL CDatabase_SQLite::Database_SQLite_TrySet(AUTHREG_NETVER* pSt_AuthVer) } return TRUE; } +/******************************************************************** +函数名称:Database_SQLite_BannedInsert +函数功能:黑名单列表插入 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CDatabase_SQLite::Database_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned) +{ + SQLPacket_IsErrorOccur = FALSE; + + if (NULL == pSt_Banned) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return FALSE; + } + //存在直接返回 + if (Database_SQLite_BannedExist(pSt_Banned)) + { + return TRUE; + } + TCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + //处理的类型 + if (_tcslen(pSt_Banned->tszUserName) > 0) + { + _stprintf_s(tszSQLStatement, _T("INSERT INTO Auth_BannedUser(tszUserName,tszCreateTime) VALUES('%s',datetime('now', 'localtime'))"), pSt_Banned->tszUserName); + } + else + { + _stprintf_s(tszSQLStatement, _T("INSERT INTO Auth_BannedAddr(tszIPStart,tszIPEnd,tszCreateTime) VALUES('%s','%s',datetime('now', 'localtime'))"), pSt_Banned->tszIPStart, pSt_Banned->tszIPEnd); + } + //插入数据库 + if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return FALSE; + } + return TRUE; +} +/******************************************************************** +函数名称:Database_SQLite_BannedDelete +函数功能:黑名单列表删除 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CDatabase_SQLite::Database_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned) +{ + SQLPacket_IsErrorOccur = FALSE; + + if (NULL == pSt_Banned) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return FALSE; + } + TCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', 1024); + //处理的类型 + if (_tcslen(pSt_Banned->tszUserName) > 0) + { + _stprintf_s(tszSQLStatement, _T("DELETE * FROM Auth_BannedUser WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); + } + else + { + if (_tcslen(pSt_Banned->tszIPEnd) > 0) + { + _stprintf_s(tszSQLStatement, _T("DELETE * FROM Auth_BannedAddr WHERE tszIPStart = '%s' AND tszIPEnd = '%s'"), pSt_Banned->tszIPStart, pSt_Banned->tszIPEnd); + } + else + { + _stprintf_s(tszSQLStatement, _T("DELETE * FROM Auth_BannedAddr WHERE tszIPStart = '%s'"), pSt_Banned->tszIPStart); + } + } + //操作数据库 + if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return FALSE; + } + return TRUE; +} +/******************************************************************** +函数名称:Database_SQLite_BannedList +函数功能:黑名单列表查询 + 参数.一:pppSt_BannedUser + In/Out:Out + 类型:三级指针 + 可空:N + 意思:禁用的用户名列表 + 参数.二:pInt_UserCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出用户禁用列表个数 + 参数.三:pppSt_BannedAddr + In/Out:Out + 类型:三级指针 + 可空:N + 意思:禁用的IP地址列表 + 参数.四:pInt_AddrCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出地址禁用列表个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CDatabase_SQLite::Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount) +{ + SQLPacket_IsErrorOccur = FALSE; + + int nRow = 0; + int nColumn = 0; + CHAR** ppszResult = NULL; + TCHAR tszSQLStatement[1024]; //SQL语句 + + memset(tszSQLStatement, '\0', 1024); + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Auth_BannedAddr")); + + if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return FALSE; + } + int nFliedValue = nColumn; + list stl_ListAddr; + //轮训所有内容 + for (int i = 0; i < nRow; i++) + { + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + //ID + st_Banned.nID = _ttoi64(ppszResult[nFliedValue]); + nFliedValue++; + //起始地址 + _tcscpy(st_Banned.tszIPStart, ppszResult[nFliedValue]); + nFliedValue++; + //结束地址 + _tcscpy(st_Banned.tszIPEnd, ppszResult[nFliedValue]); + nFliedValue++; + //注册时间 + _tcscpy(st_Banned.tszTime, ppszResult[nFliedValue]); + + stl_ListAddr.push_back(st_Banned); + } + DataBase_SQLite_FreeTable(ppszResult); + //用户列表 + nRow = 0; + nColumn = 0; + memset(tszSQLStatement, '\0', 1024); + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Auth_BannedUser")); + + if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return FALSE; + } + nFliedValue = nColumn; + list stl_ListUser; + //轮训所有内容 + for (int i = 0; i < nRow; i++) + { + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + //ID + st_Banned.nID = _ttoi64(ppszResult[nFliedValue]); + nFliedValue++; + //用户名 + _tcscpy(st_Banned.tszUserName, ppszResult[nFliedValue]); + nFliedValue++; + //注册时间 + _tcscpy(st_Banned.tszTime, ppszResult[nFliedValue]); + + stl_ListAddr.push_back(st_Banned); + } + DataBase_SQLite_FreeTable(ppszResult); + //导出 + BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_BannedAddr, stl_ListAddr.size(), sizeof(AUTHREG_BANNED)); + BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_BannedUser, stl_ListUser.size(), sizeof(AUTHREG_BANNED)); + + list::const_iterator stl_ListIterator = stl_ListAddr.begin(); + for (int i = 0; stl_ListIterator != stl_ListAddr.end(); stl_ListIterator++, i++) + { + (*pppSt_BannedAddr)[i]->nID = stl_ListIterator->nID; + _tcscpy((*pppSt_BannedAddr)[i]->tszIPStart, stl_ListIterator->tszIPStart); + _tcscpy((*pppSt_BannedAddr)[i]->tszIPEnd, stl_ListIterator->tszIPEnd); + _tcscpy((*pppSt_BannedAddr)[i]->tszTime, stl_ListIterator->tszTime); + } + stl_ListIterator = stl_ListUser.begin(); + for (int i = 0; stl_ListIterator != stl_ListUser.end(); stl_ListIterator++, i++) + { + (*pppSt_BannedUser)[i]->nID = stl_ListIterator->nID; + _tcscpy((*pppSt_BannedUser)[i]->tszUserName, stl_ListIterator->tszUserName); + _tcscpy((*pppSt_BannedUser)[i]->tszTime, stl_ListIterator->tszTime); + } + + stl_ListAddr.clear(); + stl_ListUser.clear(); + return TRUE; +} +/******************************************************************** +函数名称:Database_SQLite_BannedExist +函数功能:名单是否存在黑名单列表 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CDatabase_SQLite::Database_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) +{ + SQLPacket_IsErrorOccur = FALSE; + + int nRow = 0; + int nColumn = 0; + CHAR** ppszResult = NULL; + TCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', 1024); + + if (_tcslen(pSt_Banned->tszUserName) > 0) + { + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Auth_BannedUser WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); + } + else + { + if (_tcslen(pSt_Banned->tszIPEnd) > 0) + { + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Auth_BannedAddr WHERE tszIPStart = '%s' AND tszIPEnd = '%s'"), pSt_Banned->tszIPStart, pSt_Banned->tszIPEnd); + } + else + { + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Auth_BannedAddr WHERE tszIPStart = '%s'"), pSt_Banned->tszIPStart); + } + } + + if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return FALSE; + } + DataBase_SQLite_FreeTable(ppszResult); + + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTMATCH; + return FALSE; + } + return TRUE; +} ////////////////////////////////////////////////////////////////////////// // 保护函数 ////////////////////////////////////////////////////////////////////////// diff --git a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.h b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.h index a5b3cfa..4a00c18 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.h +++ b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.h @@ -42,6 +42,11 @@ public: BOOL Database_SQLite_TryDelete(LPCTSTR lpszSerial); BOOL Database_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW); BOOL Database_SQLite_TrySet(AUTHREG_NETVER* pSt_AuthVer); +public: + BOOL Database_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned); + BOOL Database_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned); + BOOL Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount); + BOOL Database_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned); protected: BOOL Database_SQLite_UserPayTime(LPCTSTR lpszUserName, LPCTSTR lpszUserTime, LPCTSTR lpszCardTime, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthSerialType, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthUserType); private: diff --git a/XEngine_Source/AuthorizeModule_Database/pch.cpp b/XEngine_Source/AuthorizeModule_Database/pch.cpp index e202186..2df7b11 100644 --- a/XEngine_Source/AuthorizeModule_Database/pch.cpp +++ b/XEngine_Source/AuthorizeModule_Database/pch.cpp @@ -104,4 +104,20 @@ extern "C" BOOL Database_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUT extern "C" BOOL Database_SQLite_TrySet(AUTHREG_NETVER * pSt_AuthVer) { return m_SQLAuth.Database_SQLite_TrySet(pSt_AuthVer); +} +extern "C" BOOL Database_SQLite_BannedInsert(AUTHREG_BANNED * pSt_Banned) +{ + return m_SQLAuth.Database_SQLite_BannedInsert(pSt_Banned); +} +extern "C" BOOL Database_SQLite_BannedDelete(AUTHREG_BANNED * pSt_Banned) +{ + return m_SQLAuth.Database_SQLite_BannedDelete(pSt_Banned); +} +extern "C" BOOL Database_SQLite_BannedList(AUTHREG_BANNED * **pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED * **pppSt_BannedAddr, int* pInt_AddrCount) +{ + return m_SQLAuth.Database_SQLite_BannedList(pppSt_BannedUser, pInt_UserCount, pppSt_BannedAddr, pInt_AddrCount); +} +extern "C" BOOL Database_SQLite_BannedExist(AUTHREG_BANNED * pSt_Banned) +{ + return m_SQLAuth.Database_SQLite_BannedExist(pSt_Banned); } \ No newline at end of file diff --git a/XEngine_Source/XAuth_Protocol.h b/XEngine_Source/XAuth_Protocol.h index 3403889..1787e85 100644 --- a/XEngine_Source/XAuth_Protocol.h +++ b/XEngine_Source/XAuth_Protocol.h @@ -76,4 +76,13 @@ typedef struct tag_AuthReg_NetVer CHAR tszVerData[64]; //验证时间 ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode; //验证方式 int nTryTime; //试用时间 -}AUTHREG_NETVER, * LPAUTHREG_NETVER; \ No newline at end of file +}AUTHREG_NETVER, * LPAUTHREG_NETVER; +//禁止列表 +typedef struct +{ + __int64x nID; //ID + CHAR tszUserName[MAX_PATH]; //用户名 + CHAR tszIPStart[128]; //起始IP + CHAR tszIPEnd[128]; //结束IP + CHAR tszTime[64]; //时间 +}AUTHREG_BANNED, * LPAUTHREG_BANNED; \ No newline at end of file -- Gitee From 730a156e4811fc3237c66effac2b1a6ee97b6489 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 27 Dec 2022 15:13:29 +0800 Subject: [PATCH 07/31] modify:create banned table when sqlite init --- .../Database_SQLite/Database_SQLite.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp index fbc88b5..5536efe 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp @@ -89,6 +89,18 @@ BOOL CDatabase_SQLite::Database_SQLite_Init(LPCTSTR lpszSQLFile, BOOL bIsChange SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; return FALSE; } + if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE Auth_BannedAddr(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,tszIPStart TEXT,tszIPEnd TEXT,tszCreateTime DATE NOT NULL)"))) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; + return FALSE; + } + if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE Auth_BannedUser(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,tszUserName TEXT,tszCreateTime DATE NOT NULL)"))) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; + return FALSE; + } } return TRUE; } -- Gitee From cd57978e1ed450565ccf8f8350cef8201a3cb014 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 27 Dec 2022 15:14:02 +0800 Subject: [PATCH 08/31] update:readme --- README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4f789e1..1a333e1 100644 --- a/README.md +++ b/README.md @@ -116,10 +116,16 @@ V3版本为全新版本,为了适应过多环境要求开发 ## 开发计划 mfc转qt界面库(我们需要会Qt的人员加入一起开发) +动态验证码 +短信登录,扫码登录 消息公告 支持多端登录 多端登录合并用时 生成会话TOKEN分布式鉴权 +token 自动续期 +密码加密 +关键日志(强日志) +http basic和disgt支持 支持OAuth验证 mysql支持 列表数据分割,用于大型服务器 @@ -127,5 +133,8 @@ mysql支持 支持自定义序列号导入导出 统计用户所有在线时间 黑名单设置(IP,用户) -支持代理端 -支持绑定自定义内容 \ No newline at end of file +账号封禁与处罚,时间永久 +持久层,redis,memcached等支持 +支持代理端(序列号分发,权限控制) +支持绑定自定义内容 +自动售卡(支付宝,微信) \ No newline at end of file -- Gitee From c5d1d2e4d196898b2919b435dfc10cae55d0fabd Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 28 Dec 2022 14:47:03 +0800 Subject: [PATCH 09/31] fixed:banned exist process problem --- .../Database_SQLite/Database_SQLite.cpp | 74 +++++++++++-------- 1 file changed, 44 insertions(+), 30 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp index 5536efe..708221a 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp @@ -1330,42 +1330,56 @@ BOOL CDatabase_SQLite::Database_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) { SQLPacket_IsErrorOccur = FALSE; - int nRow = 0; - int nColumn = 0; - CHAR** ppszResult = NULL; - TCHAR tszSQLStatement[1024]; - memset(tszSQLStatement, '\0', 1024); - + //判断用域名是否存在 if (_tcslen(pSt_Banned->tszUserName) > 0) { + int nRow = 0; + int nColumn = 0; + CHAR** ppszResult = NULL; + TCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', 1024); + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Auth_BannedUser WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); - } - else - { - if (_tcslen(pSt_Banned->tszIPEnd) > 0) - { - _stprintf_s(tszSQLStatement, _T("SELECT * FROM Auth_BannedAddr WHERE tszIPStart = '%s' AND tszIPEnd = '%s'"), pSt_Banned->tszIPStart, pSt_Banned->tszIPEnd); - } - else - { - _stprintf_s(tszSQLStatement, _T("SELECT * FROM Auth_BannedAddr WHERE tszIPStart = '%s'"), pSt_Banned->tszIPStart); - } - } + if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return FALSE; + } + DataBase_SQLite_FreeTable(ppszResult); - if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTMATCH; + return FALSE; + } + } + //判断IP地址是否存在 + if (_tcslen(pSt_Banned->tszIPStart) > 0) { - SQLPacket_IsErrorOccur = TRUE; - SQLPacket_dwErrorCode = DataBase_GetLastError(); - return FALSE; - } - DataBase_SQLite_FreeTable(ppszResult); + int nRow = 0; + int nColumn = 0; + CHAR** ppszResult = NULL; + TCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', 1024); + + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Auth_BannedAddr WHERE tszIPStart = '%s'"), pSt_Banned->tszIPStart); + if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return FALSE; + } + DataBase_SQLite_FreeTable(ppszResult); - if (nRow <= 0) - { - SQLPacket_IsErrorOccur = TRUE; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTMATCH; - return FALSE; - } + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTMATCH; + return FALSE; + } + } return TRUE; } ////////////////////////////////////////////////////////////////////////// -- Gitee From efb96336baa99e064d92796cc83111afd21721d3 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 28 Dec 2022 14:49:07 +0800 Subject: [PATCH 10/31] added:banned list Judgment for user login and register and ipaddr connect --- .../AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp | 12 ++++++++ .../AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp | 12 ++++++++ .../Authorize_Net.cpp | 30 +++++++++++++++++++ .../Authorize_TCPTask.cpp | 14 +++++++++ 4 files changed, 68 insertions(+) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp index 141f113..6c46af6 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp @@ -39,6 +39,18 @@ BOOL XEngine_AuthorizeHTTP_Token(LPCTSTR lpszClientAddr, TCHAR** pptszList, int BaseLib_OperatorString_GetKeyValue(pptszList[1], "=", tszURLKey, tszUserName); BaseLib_OperatorString_GetKeyValue(pptszList[2], "=", tszURLKey, tszUserPass); BaseLib_OperatorString_GetKeyValue(pptszList[3], "=", tszURLKey, tszDeviceType); + //是否在黑名单 + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + + _tcscpy(st_Banned.tszUserName, tszUserName); + if (Database_SQLite_BannedExist(&st_Banned)) + { + 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, _T("客户端:%s,用户名:%s,登录失败,用户名已经被禁用!"), lpszClientAddr, st_Banned.tszUserName); + return FALSE; + } //是否使用了第三方验证 if (st_AuthConfig.st_XLogin.bPassAuth) { 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 1f390f9..8fabbbb 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 @@ -51,6 +51,18 @@ BOOL XEngine_AuthorizeHTTP_User(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, LPC return FALSE; } Protocol_Parse_HttpParseTable(lpszMsgBuffer, nMsgLen, &st_UserTable); + //是否在黑名单 + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + + _tcscpy(st_Banned.tszUserName, st_UserTable.st_UserInfo.tszUserName); + if (Database_SQLite_BannedExist(&st_Banned)) + { + 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, _T("HTTP客户端:%s,用户名:%s,注册失败,用户名已经被禁用!"), lpszClientAddr, st_Banned.tszUserName); + return FALSE; + } //填充写入数据 _stprintf(st_UserTable.tszLeftTime, _T("%d"), st_AuthConfig.st_XVerification.nTryTime); st_UserTable.enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)st_AuthConfig.st_XVerification.nTryMode; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp index 0f875a9..43421c2 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp @@ -2,6 +2,16 @@ ////////////////////////////////////////////////////////////////////////// BOOL __stdcall XEngine_Client_TCPAccept(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) { + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + + _tcscpy(st_Banned.tszIPStart, lpszClientAddr); + //是否在黑名单 + if (Database_SQLite_BannedExist(&st_Banned)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,连接被阻止,IP地址被禁用!"), lpszClientAddr); + return FALSE; + } HelpComponents_Datas_CreateEx(xhTCPPacket, lpszClientAddr, 0); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("TCP客户端:%s,进入服务器"), lpszClientAddr); return TRUE; @@ -20,6 +30,16 @@ void __stdcall XEngine_Client_TCPClose(LPCTSTR lpszClientAddr, SOCKET hSocket, L ////////////////////////////////////////////////////////////////////////// BOOL __stdcall XEngine_Client_WSAccept(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) { + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + + _tcscpy(st_Banned.tszIPStart, lpszClientAddr); + //是否在黑名单 + if (Database_SQLite_BannedExist(&st_Banned)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,连接被阻止,IP地址被禁用!"), lpszClientAddr); + return FALSE; + } RfcComponents_WSPacket_CreateEx(xhWSPacket, lpszClientAddr, 0); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("WS客户端:%s,进入服务器"), lpszClientAddr); return TRUE; @@ -54,6 +74,16 @@ void __stdcall XEngine_Client_WSClose(LPCTSTR lpszClientAddr, SOCKET hSocket, LP ////////////////////////////////////////////////////////////////////////// BOOL __stdcall XEngine_Client_HttpAccept(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) { + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + + _tcscpy(st_Banned.tszIPStart, lpszClientAddr); + //是否在黑名单 + if (Database_SQLite_BannedExist(&st_Banned)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,连接被阻止,IP地址被禁用!"), lpszClientAddr); + return FALSE; + } RfcComponents_HttpServer_CreateClientEx(xhHttpPacket, lpszClientAddr, 0); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,进入服务器"), lpszClientAddr); return TRUE; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp index d131d0d..67cde76 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp @@ -67,6 +67,20 @@ BOOL XEngine_Client_TCPTask(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int n pSt_ProtocolHdr->unPacketSize = 0; pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPLOGIN; + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + + _tcscpy(st_Banned.tszUserName, st_AuthProtocol.tszUserName); + //是否在黑名单 + if (Database_SQLite_BannedExist(&st_Banned)) + { + 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, _T("客户端:%s,用户名:%s,登录失败,用户名已经被禁用!"), lpszClientAddr, st_Banned.tszUserName); + return FALSE; + } + //是否允许登录 if (!st_FunSwitch.bSwitchLogin) { pSt_ProtocolHdr->wReserve = 503; -- Gitee From 414d30f4411a6efbc5f2469dc184283216cbdf3d Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 28 Dec 2022 15:09:40 +0800 Subject: [PATCH 11/31] fixed:modify user info cancel does not work --- .../Authorize_Dialog/Dialog_Modify.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Modify.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Modify.cpp index df179c7..32b0037 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Modify.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Modify.cpp @@ -40,6 +40,7 @@ void CDialog_Modify::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(CDialog_Modify, CDialogEx) ON_BN_CLICKED(IDC_BUTTON2, &CDialog_Modify::OnBnClickedButton2) + ON_BN_CLICKED(IDC_BUTTON3, &CDialog_Modify::OnBnClickedButton3) END_MESSAGE_MAP() @@ -282,3 +283,10 @@ void CDialog_Modify::OnBnClickedButton2() OnOK(); } + + +void CDialog_Modify::OnBnClickedButton3() +{ + // TODO: 在此添加控件通知处理程序代码 + OnCancel(); +} -- Gitee From ee93f71b9d46f63f975987a9c5a63732d26cd480 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 28 Dec 2022 15:10:15 +0800 Subject: [PATCH 12/31] modify:sqlite init can be update database --- .../Database_SQLite/Database_SQLite.cpp | 71 ++++++++----------- 1 file changed, 31 insertions(+), 40 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp index 708221a..84a3dba 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp @@ -43,7 +43,6 @@ CDatabase_SQLite::~CDatabase_SQLite() BOOL CDatabase_SQLite::Database_SQLite_Init(LPCTSTR lpszSQLFile, BOOL bIsChange /* = TRUE */) { SQLPacket_IsErrorOccur = FALSE; - BOOL bIsCreate = FALSE; //创建数据库 if (!DataBase_SQLite_Create(lpszSQLFile)) { @@ -55,10 +54,6 @@ BOOL CDatabase_SQLite::Database_SQLite_Init(LPCTSTR lpszSQLFile, BOOL bIsChange return FALSE; } } - else - { - bIsCreate = TRUE; - } m_bChange = bIsChange; //打开数据库 if (!DataBase_SQLite_Open(&xhData,lpszSQLFile)) @@ -67,41 +62,37 @@ BOOL CDatabase_SQLite::Database_SQLite_Init(LPCTSTR lpszSQLFile, BOOL bIsChange SQLPacket_dwErrorCode = DataBase_GetLastError(); return FALSE; } - //如果是否创建数据库为真,那么我们需要创建数据库 - if (bIsCreate) - { - //如果创建成功了,说明需要创建表 - if (!DataBase_SQLite_Exec(xhData,_T("CREATE TABLE AuthReg_User(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,UserName TEXT,Password TEXT,LeftTime TEXT,EmailAddr TEXT,HardCode TEXT,CardSerialType integer,PhoneNumber integer,IDCard integer,nUserLevel integer,CreateTime TEXT NOT NULL)"))) - { - SQLPacket_IsErrorOccur = TRUE; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; - return FALSE; - } - if (!DataBase_SQLite_Exec(xhData,_T("CREATE TABLE AuthReg_Serial(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,UserName TEXT,SerialNumber TEXT,MaxTime TEXT,CardSerialType integer,bIsUsed boolean,CreateTime TEXT NOT NULL)"))) - { - SQLPacket_IsErrorOccur = TRUE; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; - return FALSE; - } - if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE AuthReg_NetVer(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,VerSerial TEXT NOT NULL,VerMode integer NOT NULL,TryTime integer NOT NULL,CreateTime TEXT NOT NULL)"))) - { - SQLPacket_IsErrorOccur = TRUE; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; - return FALSE; - } - if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE Auth_BannedAddr(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,tszIPStart TEXT,tszIPEnd TEXT,tszCreateTime DATE NOT NULL)"))) - { - SQLPacket_IsErrorOccur = TRUE; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; - return FALSE; - } - if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE Auth_BannedUser(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,tszUserName TEXT,tszCreateTime DATE NOT NULL)"))) - { - SQLPacket_IsErrorOccur = TRUE; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; - return FALSE; - } - } + //如果创建成功了,说明需要创建表 + if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE IF NOT EXISTS AuthReg_User(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,UserName TEXT,Password TEXT,LeftTime TEXT,EmailAddr TEXT,HardCode TEXT,CardSerialType integer,PhoneNumber integer,IDCard integer,nUserLevel integer,CreateTime TEXT NOT NULL)"))) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; + return FALSE; + } + if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE IF NOT EXISTS AuthReg_Serial(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,UserName TEXT,SerialNumber TEXT,MaxTime TEXT,CardSerialType integer,bIsUsed boolean,CreateTime TEXT NOT NULL)"))) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; + return FALSE; + } + if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE IF NOT EXISTS AuthReg_NetVer(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,VerSerial TEXT NOT NULL,VerMode integer NOT NULL,TryTime integer NOT NULL,CreateTime TEXT NOT NULL)"))) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; + return FALSE; + } + if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE IF NOT EXISTS Auth_BannedAddr(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,tszIPStart TEXT,tszIPEnd TEXT,tszCreateTime DATE NOT NULL)"))) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; + return FALSE; + } + if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE IF NOT EXISTS Auth_BannedUser(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,tszUserName TEXT,tszCreateTime DATE NOT NULL)"))) + { + SQLPacket_IsErrorOccur = TRUE; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; + return FALSE; + } return TRUE; } /******************************************************************** -- Gitee From 57248dc65ce5375f75a629ee5245ac5be3a938bc Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 28 Dec 2022 15:43:52 +0800 Subject: [PATCH 13/31] modify:banned list only register work --- .../Authorize_Dialog/Dialog_Modify.h | 1 + .../AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp | 12 ------------ .../XEngine_AuthorizeService/Authorize_TCPTask.cpp | 14 -------------- 3 files changed, 1 insertion(+), 26 deletions(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Modify.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Modify.h index 35088e7..d9a9788 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Modify.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Modify.h @@ -35,4 +35,5 @@ public: CEdit m_EditHardCode; CEdit m_EditCreateTime; CButton m_BtnModify; + afx_msg void OnBnClickedButton3(); }; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp index 6c46af6..141f113 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp @@ -39,18 +39,6 @@ BOOL XEngine_AuthorizeHTTP_Token(LPCTSTR lpszClientAddr, TCHAR** pptszList, int BaseLib_OperatorString_GetKeyValue(pptszList[1], "=", tszURLKey, tszUserName); BaseLib_OperatorString_GetKeyValue(pptszList[2], "=", tszURLKey, tszUserPass); BaseLib_OperatorString_GetKeyValue(pptszList[3], "=", tszURLKey, tszDeviceType); - //是否在黑名单 - AUTHREG_BANNED st_Banned; - memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); - - _tcscpy(st_Banned.tszUserName, tszUserName); - if (Database_SQLite_BannedExist(&st_Banned)) - { - 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, _T("客户端:%s,用户名:%s,登录失败,用户名已经被禁用!"), lpszClientAddr, st_Banned.tszUserName); - return FALSE; - } //是否使用了第三方验证 if (st_AuthConfig.st_XLogin.bPassAuth) { diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp index 67cde76..d150185 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp @@ -66,20 +66,6 @@ BOOL XEngine_Client_TCPTask(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int n pSt_ProtocolHdr->unPacketSize = 0; pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPLOGIN; - - AUTHREG_BANNED st_Banned; - memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); - - _tcscpy(st_Banned.tszUserName, st_AuthProtocol.tszUserName); - //是否在黑名单 - if (Database_SQLite_BannedExist(&st_Banned)) - { - 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, _T("客户端:%s,用户名:%s,登录失败,用户名已经被禁用!"), lpszClientAddr, st_Banned.tszUserName); - return FALSE; - } //是否允许登录 if (!st_FunSwitch.bSwitchLogin) { -- Gitee From 858e08361b4d6122decff94e31ada48b86295942 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 09:07:09 +0800 Subject: [PATCH 14/31] added:banned process code file --- README.md | 3 +- .../AuthorizeHTTP_Banned.cpp | 29 +++++++++++++++++++ .../AuthorizeHTTP_Post/AuthorizeHTTP_Banned.h | 3 ++ .../XEngine_AuthorizeService/Authorize_Hdr.h | 1 + .../Authorize_HttpTask.cpp | 23 +++++++++++++++ .../XEngine_AuthorizeService.vcxproj | 2 ++ .../XEngine_AuthorizeService.vcxproj.filters | 6 ++++ 7 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp create mode 100644 XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.h diff --git a/README.md b/README.md index 1a333e1..7668e26 100644 --- a/README.md +++ b/README.md @@ -137,4 +137,5 @@ mysql支持 持久层,redis,memcached等支持 支持代理端(序列号分发,权限控制) 支持绑定自定义内容 -自动售卡(支付宝,微信) \ No newline at end of file +自动售卡(支付宝,微信) +MQTT协议支持,让你的嵌入式设备也用上授时验证 \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp new file mode 100644 index 0000000..b0b2648 --- /dev/null +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp @@ -0,0 +1,29 @@ +#include "../Authorize_Hdr.h" + +BOOL XEngine_AuthorizeHTTP_Banned(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, LPCTSTR lpszMsgBuffer, int nMsgLen) +{ + int nSDLen = 4096; + TCHAR tszSDBuffer[4096]; + LPCTSTR lpszAPIInsert = _T("insert"); + LPCTSTR lpszAPIDelete = _T("delete"); + LPCTSTR lpszAPIList = _T("list"); + + memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); + + if (0 == _tcsnicmp(lpszAPIInsert, lpszAPIName, _tcslen(lpszAPIInsert))) + { + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + + Protocol_Packet_HttpSwitch(tszSDBuffer, &nSDLen, &st_FunSwitch); + Database_SQLite_BannedInsert(&st_Banned); + + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,请求获取功能开关成功,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d"), lpszClientAddr, st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister); + } + else if (0 == _tcsnicmp(lpszAPIDelete, lpszAPIName, _tcslen(lpszAPIDelete))) + { + } + + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.h new file mode 100644 index 0000000..3fa918c --- /dev/null +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.h @@ -0,0 +1,3 @@ +#pragma once + +BOOL XEngine_AuthorizeHTTP_Banned(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, LPCTSTR lpszMsgBuffer, int nMsgLen); \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h index 6998e94..470a8af 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h @@ -81,6 +81,7 @@ extern XENGINE_FUNCTIONSWITCH st_FunSwitch; #include "AuthorizeHTTP_Post/AuthorizeHTTP_Serial.h" #include "AuthorizeHTTP_Post/AuthorizeHTTP_Pass.h" #include "AuthorizeHTTP_Post/AuthorizeHTTP_Switch.h" +#include "AuthorizeHTTP_Post/AuthorizeHTTP_Banned.h" #include "AuthorizeHTTP_Get/AuthorizeHTTP_Token.h" #ifdef _WINDOWS diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp index 396d764..94182b0 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp @@ -69,6 +69,7 @@ BOOL XEngine_Client_HttpTask(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int LPCTSTR lpszAPIVerUser = _T("user"); LPCTSTR lpszAPIVerPass = _T("pass"); LPCTSTR lpszAPIVerSwitch = _T("switch"); + LPCTSTR lpszAPIVerBanned = _T("banned"); memset(tszAPIType, '\0', sizeof(tszAPIType)); memset(tszAPIVer, '\0', sizeof(tszAPIVer)); @@ -157,6 +158,28 @@ BOOL XEngine_Client_HttpTask(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int } XEngine_AuthorizeHTTP_Switch(lpszClientAddr, tszAPIName, lpszMsgBuffer, nMsgLen); } + else if (0 == _tcsnicmp(lpszAPIVerBanned, tszAPIVer, _tcslen(lpszAPIVerBanned))) + { + AUTHREG_USERTABLE st_UserTable; + memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE)); + //验证权限 + Protocol_Parse_HttpParseToken(lpszMsgBuffer, nMsgLen, &xhToken); + if (!Session_Token_Get(xhToken, &st_UserTable)) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 401, "Unauthorized"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,请求的API:%s 失败,因为没有经过验证"), lpszClientAddr, pSt_HTTPParament->tszHttpUri); + return FALSE; + } + if (0 != st_UserTable.st_UserInfo.nUserLevel) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 401, "permission is failed"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,请求的API:%s 失败,因为TOKEN权限不足"), lpszClientAddr, pSt_HTTPParament->tszHttpUri); + return FALSE; + } + XEngine_AuthorizeHTTP_Banned(lpszClientAddr, tszAPIName, lpszMsgBuffer, nMsgLen); + } } else if (0 == _tcsnicmp(lpszMethodGet, pSt_HTTPParament->tszHttpMethod, _tcslen(lpszMethodGet))) { diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj index c6a20e7..6ddc6b9 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj @@ -151,6 +151,7 @@ + @@ -166,6 +167,7 @@ + diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj.filters b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj.filters index fed2230..5fec005 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj.filters +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj.filters @@ -66,6 +66,9 @@ 源文件\AuthorizeHTTP_Post + + 源文件\AuthorizeHTTP_Post + @@ -107,5 +110,8 @@ 头文件\AuthorizeHTTP_Post + + 头文件\AuthorizeHTTP_Post + \ No newline at end of file -- Gitee From ca2c296ac1948e8528ac685510a710f4b47bff49 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 13:16:39 +0800 Subject: [PATCH 15/31] modify:table name delete:does not create table when sql init --- .../Database_SQLite/Database_SQLite.cpp | 128 ++++++------------ 1 file changed, 43 insertions(+), 85 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp index 84a3dba..7503862 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp @@ -43,17 +43,6 @@ CDatabase_SQLite::~CDatabase_SQLite() BOOL CDatabase_SQLite::Database_SQLite_Init(LPCTSTR lpszSQLFile, BOOL bIsChange /* = TRUE */) { SQLPacket_IsErrorOccur = FALSE; - //创建数据库 - if (!DataBase_SQLite_Create(lpszSQLFile)) - { - //如果不是这个错误,说明创建数据库失败了 - if (ERROR_HELPCOMPONENTS_DATABASE_SQLITE_CREATE_ISEXIST != DataBase_GetLastError()) - { - SQLPacket_IsErrorOccur = TRUE; - SQLPacket_dwErrorCode = DataBase_GetLastError(); - return FALSE; - } - } m_bChange = bIsChange; //打开数据库 if (!DataBase_SQLite_Open(&xhData,lpszSQLFile)) @@ -62,37 +51,6 @@ BOOL CDatabase_SQLite::Database_SQLite_Init(LPCTSTR lpszSQLFile, BOOL bIsChange SQLPacket_dwErrorCode = DataBase_GetLastError(); return FALSE; } - //如果创建成功了,说明需要创建表 - if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE IF NOT EXISTS AuthReg_User(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,UserName TEXT,Password TEXT,LeftTime TEXT,EmailAddr TEXT,HardCode TEXT,CardSerialType integer,PhoneNumber integer,IDCard integer,nUserLevel integer,CreateTime TEXT NOT NULL)"))) - { - SQLPacket_IsErrorOccur = TRUE; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; - return FALSE; - } - if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE IF NOT EXISTS AuthReg_Serial(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,UserName TEXT,SerialNumber TEXT,MaxTime TEXT,CardSerialType integer,bIsUsed boolean,CreateTime TEXT NOT NULL)"))) - { - SQLPacket_IsErrorOccur = TRUE; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; - return FALSE; - } - if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE IF NOT EXISTS AuthReg_NetVer(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,VerSerial TEXT NOT NULL,VerMode integer NOT NULL,TryTime integer NOT NULL,CreateTime TEXT NOT NULL)"))) - { - SQLPacket_IsErrorOccur = TRUE; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; - return FALSE; - } - if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE IF NOT EXISTS Auth_BannedAddr(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,tszIPStart TEXT,tszIPEnd TEXT,tszCreateTime DATE NOT NULL)"))) - { - SQLPacket_IsErrorOccur = TRUE; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; - return FALSE; - } - if (!DataBase_SQLite_Exec(xhData, _T("CREATE TABLE IF NOT EXISTS Auth_BannedUser(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,tszUserName TEXT,tszCreateTime DATE NOT NULL)"))) - { - SQLPacket_IsErrorOccur = TRUE; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_CREATETABLE; - return FALSE; - } return TRUE; } /******************************************************************** @@ -133,7 +91,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserDelete(LPCTSTR lpszUserName) SQLPacket_IsErrorOccur = FALSE; TCHAR tszSQLStatement[1024]; //SQL语句 memset(tszSQLStatement,'\0',1024); - _stprintf_s(tszSQLStatement,_T("delete from AuthReg_User where UserName = '%s'"),lpszUserName); + _stprintf_s(tszSQLStatement,_T("delete from Authorize_User where UserName = '%s'"),lpszUserName); //执行 if (!DataBase_SQLite_Exec(xhData,tszSQLStatement)) { @@ -168,7 +126,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserRegister(AUTHREG_USERTABLE* pSt_UserI SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; return FALSE; } - _stprintf_s(tszSQLStatement, _T("INSERT INTO AuthReg_User(UserName, Password, LeftTime, EmailAddr, HardCode, CardSerialType, PhoneNumber, IDCard, nUserLevel, CreateTime) values('%s','%s','%s','%s','%s','%d',%lld,%lld,%d,datetime('now', 'localtime'))"), pSt_UserInfo->st_UserInfo.tszUserName, pSt_UserInfo->st_UserInfo.tszUserPass, pSt_UserInfo->tszLeftTime, pSt_UserInfo->st_UserInfo.tszEMailAddr, pSt_UserInfo->tszHardCode, pSt_UserInfo->enSerialType, pSt_UserInfo->st_UserInfo.nPhoneNumber, pSt_UserInfo->st_UserInfo.nIDNumber, pSt_UserInfo->st_UserInfo.nUserLevel); + _stprintf_s(tszSQLStatement, _T("INSERT INTO Authorize_User(UserName, Password, LeftTime, EmailAddr, HardCode, CardSerialType, PhoneNumber, IDCard, nUserLevel, CreateTime) values('%s','%s','%s','%s','%s','%d',%lld,%lld,%d,datetime('now', 'localtime'))"), pSt_UserInfo->st_UserInfo.tszUserName, pSt_UserInfo->st_UserInfo.tszUserPass, pSt_UserInfo->tszLeftTime, pSt_UserInfo->st_UserInfo.tszEMailAddr, pSt_UserInfo->tszHardCode, pSt_UserInfo->enSerialType, pSt_UserInfo->st_UserInfo.nPhoneNumber, pSt_UserInfo->st_UserInfo.nIDNumber, pSt_UserInfo->st_UserInfo.nUserLevel); if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) { SQLPacket_IsErrorOccur = TRUE; @@ -204,7 +162,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserQuery(LPCTSTR lpszUserName, AUTHREG_U int nColumn = 0; memset(tszSQLStatement,'\0',1024); - _stprintf_s(tszSQLStatement,_T("select * from AuthReg_User where UserName = '%s'"),lpszUserName); + _stprintf_s(tszSQLStatement,_T("select * from Authorize_User where UserName = '%s'"),lpszUserName); if (!DataBase_SQLite_GetTable(xhData,tszSQLStatement,&ppszResult,&nRow,&nColumn)) { SQLPacket_IsErrorOccur = TRUE; @@ -343,7 +301,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserPay(LPCTSTR lpszUserName,LPCTSTR lpsz SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTSUPPORT; return FALSE; } - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_Serial SET UserName = '%s',bIsUsed = '1' WHERE SerialNumber = '%s'"), lpszUserName, lpszSerialName); + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_Serial SET UserName = '%s',bIsUsed = '1' WHERE SerialNumber = '%s'"), lpszUserName, lpszSerialName); if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) { SQLPacket_IsErrorOccur = TRUE; @@ -377,7 +335,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_Time //天数卡只有剩余时间没有的时候才需要做处理 if (pSt_TimeProtocol->nTimeLeft <= 0) { - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_User SET LeftTime = '0' WHERE UserName = '%s'"), pSt_TimeProtocol->tszUserName); + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_User SET LeftTime = '0' WHERE UserName = '%s'"), pSt_TimeProtocol->tszUserName); } } if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_MINUTE == pSt_TimeProtocol->enSerialType) @@ -387,12 +345,12 @@ BOOL CDatabase_SQLite::Database_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_Time { pSt_TimeProtocol->nTimeLeft = 0; } - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_User SET LeftTime = '%lld' WHERE UserName = '%s'"), pSt_TimeProtocol->nTimeLeft, pSt_TimeProtocol->tszUserName); + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_User SET LeftTime = '%lld' WHERE UserName = '%s'"), pSt_TimeProtocol->nTimeLeft, pSt_TimeProtocol->tszUserName); } else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == pSt_TimeProtocol->enSerialType) { //次数卡不需要在线时间,直接减去一次就可以了 - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_User SET LeftTime = '%lld' WHERE UserName = '%s'"), _ttoi64(pSt_TimeProtocol->tszLeftTime) - 1, pSt_TimeProtocol->tszUserName); + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_User SET LeftTime = '%lld' WHERE UserName = '%s'"), _ttoi64(pSt_TimeProtocol->tszLeftTime) - 1, pSt_TimeProtocol->tszUserName); } else { @@ -429,7 +387,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserSet(AUTHREG_USERTABLE* pSt_UserTable) TCHAR tszSQLStatement[1024]; //SQL语句 memset(tszSQLStatement, '\0', 1024); - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_User SET Password = '%s',LeftTime = '%s',EmailAddr = '%s',HardCode = '%s',CardSerialType = '%d',PhoneNumber = '%lld',IDCard = '%lld',nUserLevel = '%d',CreateTime = '%s' WHERE UserName = '%s'"), pSt_UserTable->st_UserInfo.tszUserPass, pSt_UserTable->tszLeftTime, pSt_UserTable->st_UserInfo.tszEMailAddr, pSt_UserTable->tszHardCode, pSt_UserTable->enSerialType, pSt_UserTable->st_UserInfo.nPhoneNumber, pSt_UserTable->st_UserInfo.nIDNumber, pSt_UserTable->st_UserInfo.nUserLevel, pSt_UserTable->st_UserInfo.tszCreateTime, pSt_UserTable->st_UserInfo.tszUserName); + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_User SET Password = '%s',LeftTime = '%s',EmailAddr = '%s',HardCode = '%s',CardSerialType = '%d',PhoneNumber = '%lld',IDCard = '%lld',nUserLevel = '%d',CreateTime = '%s' WHERE UserName = '%s'"), pSt_UserTable->st_UserInfo.tszUserPass, pSt_UserTable->tszLeftTime, pSt_UserTable->st_UserInfo.tszEMailAddr, pSt_UserTable->tszHardCode, pSt_UserTable->enSerialType, pSt_UserTable->st_UserInfo.nPhoneNumber, pSt_UserTable->st_UserInfo.nIDNumber, pSt_UserTable->st_UserInfo.nUserLevel, pSt_UserTable->st_UserInfo.tszCreateTime, pSt_UserTable->st_UserInfo.tszUserName); //更新用户剩余时间 if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) { @@ -477,7 +435,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserI TCHAR tszSQLStatement[1024]; //SQL语句 memset(tszSQLStatement, '\0', 1024); - _stprintf_s(tszSQLStatement, _T("SELECT * FROM AuthReg_User LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Authorize_User LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) { SQLPacket_IsErrorOccur = TRUE; @@ -567,26 +525,26 @@ BOOL CDatabase_SQLite::Database_SQLite_SerialInsert(LPCTSTR lpszSerialNumber) } if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_MINUTE == enAuthSerialType) { - _stprintf_s(tszSQLStatement, _T("INSERT INTO AuthReg_Serial values(NULL,'NOT','%s','%d','%d',0,datetime('now', 'localtime'))"), lpszSerialNumber, st_AuthTimer.wMinute, enAuthSerialType); + _stprintf_s(tszSQLStatement, _T("INSERT INTO Authorize_Serial values(NULL,'NOT','%s','%d','%d',0,datetime('now', 'localtime'))"), lpszSerialNumber, st_AuthTimer.wMinute, enAuthSerialType); } else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == enAuthSerialType) { - _stprintf_s(tszSQLStatement, _T("INSERT INTO AuthReg_Serial values(NULL,'NOT','%s','%d','%d',0,datetime('now', 'localtime'))"), lpszSerialNumber, st_AuthTimer.wDay, enAuthSerialType); + _stprintf_s(tszSQLStatement, _T("INSERT INTO Authorize_Serial values(NULL,'NOT','%s','%d','%d',0,datetime('now', 'localtime'))"), lpszSerialNumber, st_AuthTimer.wDay, enAuthSerialType); } else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == enAuthSerialType) { - _stprintf_s(tszSQLStatement, _T("INSERT INTO AuthReg_Serial values(NULL,'NOT','%s','%d','%d',0,datetime('now', 'localtime'))"), lpszSerialNumber, st_AuthTimer.wFlags, enAuthSerialType); + _stprintf_s(tszSQLStatement, _T("INSERT INTO Authorize_Serial values(NULL,'NOT','%s','%d','%d',0,datetime('now', 'localtime'))"), lpszSerialNumber, st_AuthTimer.wFlags, enAuthSerialType); } else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM == enAuthSerialType) { TCHAR tszLeftTime[MAX_PATH]; memset(tszLeftTime, '\0', MAX_PATH); _stprintf_s(tszLeftTime, _T("%04d-%02d-%02d %02d:%02d:%02d"), st_AuthTimer.wYear, st_AuthTimer.wMonth, st_AuthTimer.wDay, st_AuthTimer.wHour, st_AuthTimer.wMinute, st_AuthTimer.wSecond); - _stprintf_s(tszSQLStatement, _T("INSERT INTO AuthReg_Serial values(NULL,'NOT','%s','%s','%d',0,datetime('now', 'localtime'))"), lpszSerialNumber, tszLeftTime, enAuthSerialType); + _stprintf_s(tszSQLStatement, _T("INSERT INTO Authorize_Serial values(NULL,'NOT','%s','%s','%d',0,datetime('now', 'localtime'))"), lpszSerialNumber, tszLeftTime, enAuthSerialType); } else { - _stprintf_s(tszSQLStatement, _T("INSERT INTO AuthReg_Serial values(NULL,'NOT','%s',0,'%d',0,datetime('now', 'localtime'))"), lpszSerialNumber, enAuthSerialType); + _stprintf_s(tszSQLStatement, _T("INSERT INTO Authorize_Serial values(NULL,'NOT','%s',0,'%d',0,datetime('now', 'localtime'))"), lpszSerialNumber, enAuthSerialType); } if (!DataBase_SQLite_Exec(xhData,tszSQLStatement)) @@ -616,7 +574,7 @@ BOOL CDatabase_SQLite::Database_SQLite_SerialDelete(LPCTSTR lpszSerialNumber) TCHAR tszSQLStatement[1024]; //SQL语句 memset(tszSQLStatement,'\0',1024); - _stprintf_s(tszSQLStatement,_T("delete from AuthReg_Serial where SerialNumber = '%s'"),lpszSerialNumber); + _stprintf_s(tszSQLStatement,_T("delete from Authorize_Serial where SerialNumber = '%s'"),lpszSerialNumber); //执行 if (!DataBase_SQLite_Exec(xhData,tszSQLStatement)) { @@ -653,7 +611,7 @@ BOOL CDatabase_SQLite::Database_SQLite_SerialQuery(LPCTSTR lpszSerialNumber,LPAU int nColumn = 0; memset(tszSQLStatement,'\0',1024); - _stprintf_s(tszSQLStatement,_T("select * from AuthReg_Serial where SerialNumber = '%s'"),lpszSerialNumber); + _stprintf_s(tszSQLStatement,_T("select * from Authorize_Serial where SerialNumber = '%s'"),lpszSerialNumber); if (!DataBase_SQLite_GetTable(xhData,tszSQLStatement,&ppszResult,&nRow,&nColumn)) { SQLPacket_IsErrorOccur = TRUE; @@ -733,7 +691,7 @@ BOOL CDatabase_SQLite::Database_SQLite_SerialQueryAll(AUTHREG_SERIALTABLE*** ppp memset(tszSQLStatement,'\0',1024); - _stprintf_s(tszSQLStatement, _T("SELECT * FROM AuthReg_Serial LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Authorize_Serial LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); if (!DataBase_SQLite_GetTable(xhData,tszSQLStatement,&ppszResult,&nRow,&nColumn)) { SQLPacket_IsErrorOccur = TRUE; @@ -802,7 +760,7 @@ BOOL CDatabase_SQLite::Database_SQLite_SerialPush(AUTHREG_SERIALTABLE* pSt_Seria SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; return FALSE; } - _stprintf_s(tszSQLStatement, _T("INSERT INTO AuthReg_Serial values(NULL,'%s','%s','%s',%d,%d,'%s')"), pSt_SerialTable->tszUserName, pSt_SerialTable->tszSerialNumber, pSt_SerialTable->tszMaxTime, pSt_SerialTable->enSerialType, pSt_SerialTable->bIsUsed, pSt_SerialTable->tszCreateTime); + _stprintf_s(tszSQLStatement, _T("INSERT INTO Authorize_Serial values(NULL,'%s','%s','%s',%d,%d,'%s')"), pSt_SerialTable->tszUserName, pSt_SerialTable->tszSerialNumber, pSt_SerialTable->tszMaxTime, pSt_SerialTable->enSerialType, pSt_SerialTable->bIsUsed, pSt_SerialTable->tszCreateTime); if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) { @@ -850,7 +808,7 @@ BOOL CDatabase_SQLite::Database_SQLite_TryInsert(AUTHREG_NETVER* pSt_AuthVer) return FALSE; } //插入数据库 - _stprintf_s(tszSQLStatement, _T("INSERT INTO AuthReg_NetVer(VerSerial,VerMode,TryTime,CreateTime) VALUES('%s',%d,%d,datetime('now', 'localtime'))"), pSt_AuthVer->tszVerSerial, pSt_AuthVer->enVerMode, pSt_AuthVer->nTryTime); + _stprintf_s(tszSQLStatement, _T("INSERT INTO Authorize_NetVer(VerSerial,VerMode,TryTime,CreateTime) VALUES('%s',%d,%d,datetime('now', 'localtime'))"), pSt_AuthVer->tszVerSerial, pSt_AuthVer->enVerMode, pSt_AuthVer->nTryTime); if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) { SQLPacket_IsErrorOccur = TRUE; @@ -888,7 +846,7 @@ BOOL CDatabase_SQLite::Database_SQLite_TryQuery(AUTHREG_NETVER* pSt_AuthVer) TCHAR tszSQLStatement[1024]; //SQL语句 memset(tszSQLStatement, '\0', 1024); - _stprintf_s(tszSQLStatement, _T("SELECT * FROM AuthReg_NetVer WHERE VerSerial = '%s'"), pSt_AuthVer->tszVerSerial); + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Authorize_NetVer WHERE VerSerial = '%s'"), pSt_AuthVer->tszVerSerial); if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) { @@ -944,7 +902,7 @@ BOOL CDatabase_SQLite::Database_SQLite_TryDelete(LPCTSTR lpszSerial) TCHAR tszSQLStatement[1024]; memset(tszSQLStatement, '\0', 1024); - _stprintf_s(tszSQLStatement, _T("DELETE * FROM AuthReg_NetVer WHERE VerSerial = '%s'"), lpszSerial); + _stprintf_s(tszSQLStatement, _T("DELETE * FROM Authorize_NetVer WHERE VerSerial = '%s'"), lpszSerial); if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) { @@ -982,7 +940,7 @@ BOOL CDatabase_SQLite::Database_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONE TCHAR tszSQLStatement[1024]; //SQL语句 memset(tszSQLStatement, '\0', 1024); - _stprintf_s(tszSQLStatement, _T("SELECT * FROM AuthReg_NetVer")); + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Authorize_NetVer")); if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) { @@ -1024,7 +982,7 @@ BOOL CDatabase_SQLite::Database_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONE if (nThanValue > stl_ListIterator->nTryTime) { memset(tszSQLStatement, '\0', 1024); - _stprintf_s(tszSQLStatement, _T("DELETE * FROM AuthReg_NetVer WHERE VerSerial = '%s'"), stl_ListIterator->tszVerSerial); + _stprintf_s(tszSQLStatement, _T("DELETE * FROM Authorize_NetVer WHERE VerSerial = '%s'"), stl_ListIterator->tszVerSerial); if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) { @@ -1039,7 +997,7 @@ BOOL CDatabase_SQLite::Database_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONE if (enVerMode == stl_ListIterator->enVerMode) { memset(tszSQLStatement, '\0', 1024); - _stprintf_s(tszSQLStatement, _T("DELETE * FROM AuthReg_NetVer WHERE VerSerial = '%s'"), stl_ListIterator->tszVerSerial); + _stprintf_s(tszSQLStatement, _T("DELETE * FROM Authorize_NetVer WHERE VerSerial = '%s'"), stl_ListIterator->tszVerSerial); if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) { @@ -1073,7 +1031,7 @@ BOOL CDatabase_SQLite::Database_SQLite_TrySet(AUTHREG_NETVER* pSt_AuthVer) TCHAR tszSQLStatement[1024]; memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_NetVer SET VerMode = '%d',TryTime = '%d',CreateTime = '%s' WHERE VerSerial = '%s'"), pSt_AuthVer->enVerMode, pSt_AuthVer->nTryTime, pSt_AuthVer->tszVerData, pSt_AuthVer->tszVerSerial); + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_NetVer SET VerMode = '%d',TryTime = '%d',CreateTime = '%s' WHERE VerSerial = '%s'"), pSt_AuthVer->enVerMode, pSt_AuthVer->nTryTime, pSt_AuthVer->tszVerData, pSt_AuthVer->tszVerSerial); //更新用户表 if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) { @@ -1116,11 +1074,11 @@ BOOL CDatabase_SQLite::Database_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned) //处理的类型 if (_tcslen(pSt_Banned->tszUserName) > 0) { - _stprintf_s(tszSQLStatement, _T("INSERT INTO Auth_BannedUser(tszUserName,tszCreateTime) VALUES('%s',datetime('now', 'localtime'))"), pSt_Banned->tszUserName); + _stprintf_s(tszSQLStatement, _T("INSERT INTO Authorize_BannedUser(tszUserName,tszCreateTime) VALUES('%s',datetime('now', 'localtime'))"), pSt_Banned->tszUserName); } else { - _stprintf_s(tszSQLStatement, _T("INSERT INTO Auth_BannedAddr(tszIPStart,tszIPEnd,tszCreateTime) VALUES('%s','%s',datetime('now', 'localtime'))"), pSt_Banned->tszIPStart, pSt_Banned->tszIPEnd); + _stprintf_s(tszSQLStatement, _T("INSERT INTO Authorize_BannedAddr(tszIPStart,tszIPEnd,tszCreateTime) VALUES('%s','%s',datetime('now', 'localtime'))"), pSt_Banned->tszIPStart, pSt_Banned->tszIPEnd); } //插入数据库 if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) @@ -1159,17 +1117,17 @@ BOOL CDatabase_SQLite::Database_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned) //处理的类型 if (_tcslen(pSt_Banned->tszUserName) > 0) { - _stprintf_s(tszSQLStatement, _T("DELETE * FROM Auth_BannedUser WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); + _stprintf_s(tszSQLStatement, _T("DELETE * FROM Authorize_BannedUser WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); } else { if (_tcslen(pSt_Banned->tszIPEnd) > 0) { - _stprintf_s(tszSQLStatement, _T("DELETE * FROM Auth_BannedAddr WHERE tszIPStart = '%s' AND tszIPEnd = '%s'"), pSt_Banned->tszIPStart, pSt_Banned->tszIPEnd); + _stprintf_s(tszSQLStatement, _T("DELETE * FROM Authorize_BannedAddr WHERE tszIPStart = '%s' AND tszIPEnd = '%s'"), pSt_Banned->tszIPStart, pSt_Banned->tszIPEnd); } else { - _stprintf_s(tszSQLStatement, _T("DELETE * FROM Auth_BannedAddr WHERE tszIPStart = '%s'"), pSt_Banned->tszIPStart); + _stprintf_s(tszSQLStatement, _T("DELETE * FROM Authorize_BannedAddr WHERE tszIPStart = '%s'"), pSt_Banned->tszIPStart); } } //操作数据库 @@ -1219,7 +1177,7 @@ BOOL CDatabase_SQLite::Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_Banned TCHAR tszSQLStatement[1024]; //SQL语句 memset(tszSQLStatement, '\0', 1024); - _stprintf_s(tszSQLStatement, _T("SELECT * FROM Auth_BannedAddr")); + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Authorize_BannedAddr")); if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) { @@ -1253,7 +1211,7 @@ BOOL CDatabase_SQLite::Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_Banned nRow = 0; nColumn = 0; memset(tszSQLStatement, '\0', 1024); - _stprintf_s(tszSQLStatement, _T("SELECT * FROM Auth_BannedUser")); + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Authorize_BannedUser")); if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) { @@ -1330,7 +1288,7 @@ BOOL CDatabase_SQLite::Database_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) TCHAR tszSQLStatement[1024]; memset(tszSQLStatement, '\0', 1024); - _stprintf_s(tszSQLStatement, _T("SELECT * FROM Auth_BannedUser WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Authorize_BannedUser WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) { SQLPacket_IsErrorOccur = TRUE; @@ -1355,7 +1313,7 @@ BOOL CDatabase_SQLite::Database_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) TCHAR tszSQLStatement[1024]; memset(tszSQLStatement, '\0', 1024); - _stprintf_s(tszSQLStatement, _T("SELECT * FROM Auth_BannedAddr WHERE tszIPStart = '%s'"), pSt_Banned->tszIPStart); + _stprintf_s(tszSQLStatement, _T("SELECT * FROM Authorize_BannedAddr WHERE tszIPStart = '%s'"), pSt_Banned->tszIPStart); if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) { SQLPacket_IsErrorOccur = TRUE; @@ -1434,7 +1392,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserPayTime(LPCTSTR lpszUserName, LPCTSTR } //更新用户表的充值卡类型 memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_User SET CardSerialType = '%d' WHERE UserName = '%s'"), en_AuthSerialType, lpszUserName); + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_User SET CardSerialType = '%d' WHERE UserName = '%s'"), en_AuthSerialType, lpszUserName); //执行用户表更新,因为序列卡类型被改变,所以需要更新。 if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) { @@ -1449,7 +1407,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserPayTime(LPCTSTR lpszUserName, LPCTSTR { //如果是分钟卡 //如果当前的充值卡类型不匹配,那么他以前的充值内容全部都会被删除! - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_User SET LeftTime = '%d' WHERE UserName = '%s'"), _ttoi(lpszCardTime), lpszUserName); //更新用户表的过期时间 + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), _ttoi(lpszCardTime), lpszUserName); //更新用户表的过期时间 } break; case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: @@ -1468,14 +1426,14 @@ BOOL CDatabase_SQLite::Database_SQLite_UserPayTime(LPCTSTR lpszUserName, LPCTSTR //格式化时间,到超时的时间 _stprintf_s(tszTimer, _T("%04d-%02d-%02d %02d:%02d:%02d"), st_EndTimer.wYear, st_EndTimer.wMonth, st_EndTimer.wDay, st_EndTimer.wHour, st_EndTimer.wMinute, st_EndTimer.wSecond); //更新用户表的过期时间 - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_User SET LeftTime = '%s' WHERE UserName = '%s'"), tszTimer, lpszUserName); //更新用户表的过期时间 + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_User SET LeftTime = '%s' WHERE UserName = '%s'"), tszTimer, lpszUserName); //更新用户表的过期时间 } break; case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: { //如果是次数卡 //更新用户表的过期时间 - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_User SET LeftTime = '%d' WHERE UserName = '%s'"), _ttoi(lpszCardTime), lpszUserName); + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), _ttoi(lpszCardTime), lpszUserName); } break; case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: @@ -1493,7 +1451,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserPayTime(LPCTSTR lpszUserName, LPCTSTR } _stprintf_s(tszTime, _T("%04d-%02d-%02d %02d:%02d:%02d"), st_AuthTime.wYear, st_AuthTime.wMonth, st_AuthTime.wDay, st_AuthTime.wHour, st_AuthTime.wMinute, st_AuthTime.wSecond); //更新用户表的过期时间 - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_User SET LeftTime = '%s' WHERE UserName = '%s'"), tszTimer, lpszUserName); + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_User SET LeftTime = '%s' WHERE UserName = '%s'"), tszTimer, lpszUserName); } break; default: @@ -1508,7 +1466,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserPayTime(LPCTSTR lpszUserName, LPCTSTR { int nCardTime = _ttoi(lpszCardTime); nCardTime += _ttoi(lpszUserTime); //我们把用户以前的时间也加上 - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_User SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); //更新用户表的过期时间 + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); //更新用户表的过期时间 } break; case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: @@ -1531,7 +1489,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserPayTime(LPCTSTR lpszUserName, LPCTSTR //格式化时间,到超时的时间 _stprintf_s(tszTimer, _T("%04d-%02d-%02d %02d:%02d:%02d"), st_EndTimer.wYear, st_EndTimer.wMonth, st_EndTimer.wDay, st_EndTimer.wHour, st_EndTimer.wMinute, st_EndTimer.wSecond); //更新用户表的过期时间 - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_User SET LeftTime = '%s' WHERE UserName = '%s'"), tszTimer, lpszUserName); + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_User SET LeftTime = '%s' WHERE UserName = '%s'"), tszTimer, lpszUserName); } break; case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: @@ -1539,7 +1497,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserPayTime(LPCTSTR lpszUserName, LPCTSTR //如果是次数卡 int nCardTime = _ttoi(lpszCardTime); nCardTime += _ttoi(lpszUserTime); //我们把用户以前的时间也加上 - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_User SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); //更新用户表的过期时间 + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); //更新用户表的过期时间 } break; case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: @@ -1558,7 +1516,7 @@ BOOL CDatabase_SQLite::Database_SQLite_UserPayTime(LPCTSTR lpszUserName, LPCTSTR } _stprintf_s(tszTime, _T("%04d-%02d-%02d %02d:%02d:%02d"), st_AuthTime.wYear, st_AuthTime.wMonth, st_AuthTime.wDay, st_AuthTime.wHour, st_AuthTime.wMinute, st_AuthTime.wSecond); //更新用户表的过期时间 - _stprintf_s(tszSQLStatement, _T("UPDATE AuthReg_User SET LeftTime = '%s' WHERE UserName = '%s'"), tszTimer, lpszUserName); + _stprintf_s(tszSQLStatement, _T("UPDATE Authorize_User SET LeftTime = '%s' WHERE UserName = '%s'"), tszTimer, lpszUserName); } break; default: -- Gitee From b8f0f75b25b9f415d746defaabe98a91c8ae202d Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 13:18:57 +0800 Subject: [PATCH 16/31] added:sql file --- XEngine_Release/XEngine_DataBase/SQL_User.db | Bin 0 -> 28672 bytes XEngine_SQL/main.sql | 123 +++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 XEngine_Release/XEngine_DataBase/SQL_User.db create mode 100644 XEngine_SQL/main.sql diff --git a/XEngine_Release/XEngine_DataBase/SQL_User.db b/XEngine_Release/XEngine_DataBase/SQL_User.db new file mode 100644 index 0000000000000000000000000000000000000000..fb3d51a5b3cfc7e77a2b5f2a6f860858507c63b9 GIT binary patch literal 28672 zcmeI&-%is|90%~0u~i~}^lFKT$>B;CIpb`pPo4KWm4um<_hWoCanlgS|BQbg`!@P}ROAgD z5P$##AOHafKmY;|_|F9nm4uYc<-{Y&rKO) zmbz?c4^M_cCdn z5ldSSJMtc*KC`O4s}S7mWSZ3B!*~?*Zw8N3*llIgT~^r|NVlljk2lSl1%pU9)pOGeG-Uu9mE*1|B`sxt2{x;7(K$7e5@ z*BP+9{csV^44g_YShMyoQit2ID7_Co=|wm0)JxPJ?vq|Lddc*<%P5+{+^bi3MqyzU z>Dw@yu#u;p9bIDW@3vEyD|(YpW0Q*O));l1LBP_L#H9 zdYZAWBzp#@9A5Y`|7Gfkh*C0@5jj2+Zq>`G`Q+HAgYy;dC?Y}@aM zX?0qy1x~WJxx+n3-Rk%SHSDV`1X> z8YGAiAOHafKmY;|fB*y_009U<00I!Wy1;EQmKy2)Z$q&E=YRUg0Rad=00Izz00bZa z0SG_<0uX?}01IIMKfsHN)F1!>2tWV=5P$##AOHafKmY Date: Thu, 29 Dec 2022 13:47:20 +0800 Subject: [PATCH 17/31] added:banned protocol parse for protocol module --- .../AuthorizeModule_Protocol.def | 3 +- .../Protocol_Define.h | 26 ++++++- .../Protocol_Parse/Protocol_Parse.cpp | 67 +++++++++++++++++++ .../Protocol_Parse/Protocol_Parse.h | 1 + .../AuthorizeModule_Protocol/pch.cpp | 4 ++ 5 files changed, 99 insertions(+), 2 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def index 417d8f2..c4d76cb 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def +++ b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def @@ -25,4 +25,5 @@ EXPORTS Protocol_Parse_HttpParseOnline Protocol_Parse_HttpParseTime Protocol_Parse_HttpParseSwitch - Protocol_Parse_HttpParsePos \ No newline at end of file + Protocol_Parse_HttpParsePos + Protocol_Parse_HttpParseBanned \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h index 7afa917..ccf0b68 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h @@ -607,4 +607,28 @@ extern "C" BOOL Protocol_Parse_HttpParseSwitch(LPCTSTR lpszMsgBuffer, int nMsgLe 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL Protocol_Parse_HttpParsePos(LPCTSTR lpszMsgBuffer, int nMsgLen, int* pInt_PosStart, int* pInt_PosEnd); \ No newline at end of file +extern "C" BOOL Protocol_Parse_HttpParsePos(LPCTSTR lpszMsgBuffer, int nMsgLen, int* pInt_PosStart, int* pInt_PosEnd); +/******************************************************************** +函数名称:Protocol_Parse_HttpParseBanned +函数功能:解析黑名单协议 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的缓冲区 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入要解析的大小 + 参数.三:pSt_AuthBanned + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:导出解析的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL Protocol_Parse_HttpParseBanned(LPCTSTR lpszMsgBuffer, int nMsgLen, AUTHREG_BANNED* pSt_AuthBanned); \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp index 950f596..755acee 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp @@ -866,4 +866,71 @@ BOOL CProtocol_Parse::Protocol_Parse_HttpParsePos(LPCTSTR lpszMsgBuffer, int nMs *pInt_PosStart = st_JsonRoot["PosStart"].asInt(); *pInt_PosEnd = st_JsonRoot["PosEnd"].asInt(); return TRUE; +} +/******************************************************************** +函数名称:Protocol_Parse_HttpParseBanned +函数功能:解析黑名单协议 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的缓冲区 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入要解析的大小 + 参数.三:pSt_AuthBanned + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:导出解析的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CProtocol_Parse::Protocol_Parse_HttpParseBanned(LPCTSTR lpszMsgBuffer, int nMsgLen, AUTHREG_BANNED* pSt_AuthBanned) +{ + Protocol_IsErrorOccur = FALSE; + + if ((NULL == lpszMsgBuffer) || (NULL == pSt_AuthBanned)) + { + Protocol_IsErrorOccur = TRUE; + Protocol_dwErrorCode = ERROR_AUTHORIZE_MODULE_PROTOCOL_PARAMENT; + return FALSE; + } + Json::Value st_JsonRoot; + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(lpszMsgBuffer, lpszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Protocol_IsErrorOccur = TRUE; + Protocol_dwErrorCode = ERROR_AUTHORIZE_MODULE_PROTOCOL_PARSE; + return FALSE; + } + + if (!st_JsonRoot["nID"].isNull()) + { + pSt_AuthBanned->nID = st_JsonRoot["nID"].asInt64(); + } + if (!st_JsonRoot["tszIPEnd"].isNull()) + { + _tcscpy(pSt_AuthBanned->tszIPEnd, st_JsonRoot["tszIPEnd"].asCString()); + } + if (!st_JsonRoot["tszIPStart"].isNull()) + { + _tcscpy(pSt_AuthBanned->tszIPStart, st_JsonRoot["tszIPStart"].asCString()); + } + if (!st_JsonRoot["tszTime"].isNull()) + { + _tcscpy(pSt_AuthBanned->tszTime, st_JsonRoot["tszTime"].asCString()); + } + if (!st_JsonRoot["tszUserName"].isNull()) + { + _tcscpy(pSt_AuthBanned->tszUserName, st_JsonRoot["tszUserName"].asCString()); + } + return TRUE; } \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.h b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.h index ca81eb2..52055bc 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.h +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.h @@ -31,6 +31,7 @@ public: BOOL Protocol_Parse_HttpParseTime(LPCTSTR lpszMsgBuffer, int nMsgLen, AUTHREG_PROTOCOL_TIME* pSt_ProtocolTime); BOOL Protocol_Parse_HttpParseSwitch(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_FUNCTIONSWITCH* pSt_FunSwitch); BOOL Protocol_Parse_HttpParsePos(LPCTSTR lpszMsgBuffer, int nMsgLen, int* pInt_PosStart, int* pInt_PosEnd); + BOOL Protocol_Parse_HttpParseBanned(LPCTSTR lpszMsgBuffer, int nMsgLen, AUTHREG_BANNED* pSt_AuthBanned); protected: private: }; \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Protocol/pch.cpp b/XEngine_Source/AuthorizeModule_Protocol/pch.cpp index f2bf42c..0fa7a12 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/pch.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/pch.cpp @@ -121,4 +121,8 @@ extern "C" BOOL Protocol_Parse_HttpParseSwitch(LPCTSTR lpszMsgBuffer, int nMsgLe extern "C" BOOL Protocol_Parse_HttpParsePos(LPCTSTR lpszMsgBuffer, int nMsgLen, int* pInt_PosStart, int* pInt_PosEnd) { return m_ProtocolParse.Protocol_Parse_HttpParsePos(lpszMsgBuffer, nMsgLen, pInt_PosStart, pInt_PosEnd); +} +extern "C" BOOL Protocol_Parse_HttpParseBanned(LPCTSTR lpszMsgBuffer, int nMsgLen, AUTHREG_BANNED * pSt_AuthBanned) +{ + return m_ProtocolParse.Protocol_Parse_HttpParseBanned(lpszMsgBuffer, nMsgLen, pSt_AuthBanned); } \ No newline at end of file -- Gitee From a3144218f9a7f226a1eb1d8b65af6b64b044eafe Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 13:55:35 +0800 Subject: [PATCH 18/31] added:banned packet for protocol module --- .../AuthorizeModule_Protocol.def | 1 + .../Protocol_Define.h | 39 +++++++++ .../Protocol_Packet/Protocol_Packet.cpp | 80 +++++++++++++++++++ .../Protocol_Packet/Protocol_Packet.h | 1 + .../AuthorizeModule_Protocol/pch.cpp | 4 + 5 files changed, 125 insertions(+) diff --git a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def index c4d76cb..a46d153 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def +++ b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def @@ -12,6 +12,7 @@ EXPORTS Protocol_Packet_HttpSerialList Protocol_Packet_HttpToken Protocol_Packet_HttpSwitch + Protocol_Packet_HttpBanned Protocol_Parse_WSHdr Protocol_Parse_HttpParseToken diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h index ccf0b68..e48ded7 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h @@ -268,6 +268,45 @@ extern "C" BOOL Protocol_Packet_HttpToken(TCHAR* ptszMsgBuffer, int* pInt_MsgLen 备注: *********************************************************************/ extern "C" BOOL Protocol_Packet_HttpSwitch(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_FUNCTIONSWITCH* pSt_FunSwitch); +/******************************************************************** +函数名称:Protocol_Packet_HttpBanned +函数功能:HTTP客户端禁用名单包装函数 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:导出包装好的缓冲区 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出包装大小 + 参数.三:pppSt_BannedUser + In/Out:In + 类型:三级指针 + 可空:N + 意思:输入要处理的用户列表 + 参数.四:nUserCount + In/Out:In + 类型:整数型 + 可空:N + 意思:输入用户列表个数 + 参数.五:pppSt_BannedAddr + In/Out:In + 类型:三级指针 + 可空:N + 意思:输入要处理的地址列表 + 参数.六:nAddrCount + In/Out:In + 类型:整数型 + 可空:N + 意思:输入地址列表个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL Protocol_Packet_HttpBanned(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_BANNED*** pppSt_BannedUser, int nUserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int nAddrCount); /************************************************************************/ /* 解析类协议 */ /************************************************************************/ diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp index 75386e0..59c77ad 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp @@ -586,6 +586,86 @@ BOOL CProtocol_Packet::Protocol_Packet_HttpSwitch(TCHAR* ptszMsgBuffer, int* pIn st_JsonRoot["bSwitchPay"] = pSt_FunSwitch->bSwitchPay; st_JsonRoot["bSwitchRegister"] = pSt_FunSwitch->bSwitchRegister; + *pInt_MsgLen = st_JsonRoot.toStyledString().length(); + memcpy(ptszMsgBuffer, st_JsonRoot.toStyledString().c_str(), *pInt_MsgLen); + return TRUE; +} +/******************************************************************** +函数名称:Protocol_Packet_HttpBanned +函数功能:HTTP客户端禁用名单包装函数 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:导出包装好的缓冲区 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出包装大小 + 参数.三:pppSt_BannedUser + In/Out:In + 类型:三级指针 + 可空:N + 意思:输入要处理的用户列表 + 参数.四:nUserCount + In/Out:In + 类型:整数型 + 可空:N + 意思:输入用户列表个数 + 参数.五:pppSt_BannedAddr + In/Out:In + 类型:三级指针 + 可空:N + 意思:输入要处理的地址列表 + 参数.六:nAddrCount + In/Out:In + 类型:整数型 + 可空:N + 意思:输入地址列表个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CProtocol_Packet::Protocol_Packet_HttpBanned(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_BANNED*** pppSt_BannedUser, int nUserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int nAddrCount) +{ + Protocol_IsErrorOccur = FALSE; + + if ((NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen)) + { + Protocol_IsErrorOccur = TRUE; + Protocol_dwErrorCode = ERROR_AUTHORIZE_MODULE_PROTOCOL_PARAMENT; + return FALSE; + } + Json::Value st_JsonRoot; + Json::Value st_JsonUser; + Json::Value st_JsonAddr; + + for (int i = 0; i < nUserCount; i++) + { + Json::Value st_JsonObject; + st_JsonObject["nID"] = (*pppSt_BannedUser)[i]->nID; + st_JsonObject["tszTime"] = (*pppSt_BannedUser)[i]->tszTime; + st_JsonObject["tszUserName"] = (*pppSt_BannedUser)[i]->tszUserName; + st_JsonUser.append(st_JsonObject); + } + for (int i = 0; i < nUserCount; i++) + { + Json::Value st_JsonObject; + st_JsonObject["nID"] = (*pppSt_BannedUser)[i]->nID; + st_JsonObject["tszIPEnd"] = (*pppSt_BannedUser)[i]->tszIPEnd; + st_JsonObject["tszIPStart"] = (*pppSt_BannedUser)[i]->tszIPStart; + st_JsonObject["tszTime"] = (*pppSt_BannedUser)[i]->tszTime; + st_JsonAddr.append(st_JsonObject); + } + st_JsonRoot["msg"] = "success"; + st_JsonRoot["code"] = 0; + st_JsonRoot["CountAddr"] = st_JsonAddr.size(); + st_JsonRoot["CountUser"] = st_JsonUser.size(); + st_JsonRoot["ArrayUser"] = st_JsonUser; + st_JsonRoot["ArrayAddr"] = st_JsonAddr; + *pInt_MsgLen = st_JsonRoot.toStyledString().length(); memcpy(ptszMsgBuffer, st_JsonRoot.toStyledString().c_str(), *pInt_MsgLen); return TRUE; diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.h b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.h index e48e58f..123ce07 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.h +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.h @@ -27,6 +27,7 @@ public: BOOL Protocol_Packet_HttpSerialList(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_SERIALTABLE*** pppSt_SerialList, int nListCount); BOOL Protocol_Packet_HttpToken(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XNETHANDLE xhToken, int nTimeout); BOOL Protocol_Packet_HttpSwitch(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_FUNCTIONSWITCH* pSt_FunSwitch); + BOOL Protocol_Packet_HttpBanned(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_BANNED*** pppSt_BannedUser, int nUserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int nAddrCount); protected: private: }; \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Protocol/pch.cpp b/XEngine_Source/AuthorizeModule_Protocol/pch.cpp index 0fa7a12..d8cbff3 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/pch.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/pch.cpp @@ -67,6 +67,10 @@ extern "C" BOOL Protocol_Packet_HttpSwitch(TCHAR * ptszMsgBuffer, int* pInt_MsgL { return m_ProtocolPacket.Protocol_Packet_HttpSwitch(ptszMsgBuffer, pInt_MsgLen, pSt_FunSwitch); } +extern "C" BOOL Protocol_Packet_HttpBanned(TCHAR * ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_BANNED * **pppSt_BannedUser, int nUserCount, AUTHREG_BANNED * **pppSt_BannedAddr, int nAddrCount) +{ + return m_ProtocolPacket.Protocol_Packet_HttpBanned(ptszMsgBuffer, pInt_MsgLen, pppSt_BannedUser, nUserCount, pppSt_BannedAddr, nAddrCount); +} /************************************************************************/ /* 解析类协议 */ /************************************************************************/ -- Gitee From 0632f862211267152b060cde73cf11d044311660 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 14:07:32 +0800 Subject: [PATCH 19/31] added:insert and delete and query apis for banned protocol --- .../AuthorizeHTTP_Banned.cpp | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp index b0b2648..21fc1d5 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp @@ -15,15 +15,36 @@ BOOL XEngine_AuthorizeHTTP_Banned(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, L AUTHREG_BANNED st_Banned; memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); - Protocol_Packet_HttpSwitch(tszSDBuffer, &nSDLen, &st_FunSwitch); + Protocol_Parse_HttpParseBanned(lpszMsgBuffer, nMsgLen, &st_Banned); Database_SQLite_BannedInsert(&st_Banned); - + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,请求获取功能开关成功,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d"), lpszClientAddr, st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,插入禁用列表成功,禁用的用户:%s,禁用的IP地址:%s - %s"), lpszClientAddr, st_Banned.tszUserName, st_Banned.tszIPStart, st_Banned.tszIPEnd); } else if (0 == _tcsnicmp(lpszAPIDelete, lpszAPIName, _tcslen(lpszAPIDelete))) { + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + + Protocol_Parse_HttpParseBanned(lpszMsgBuffer, nMsgLen, &st_Banned); + Database_SQLite_BannedDelete(&st_Banned); + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,删除禁用列表成功,删除禁用的用户:%s,删除禁用的IP地址:%s - %s"), lpszClientAddr, st_Banned.tszUserName, st_Banned.tszIPStart, st_Banned.tszIPEnd); + } + else if (0 == _tcsnicmp(lpszAPIList, lpszAPIName, _tcslen(lpszAPIList))) + { + int nCountAddr = 0; + int nCountUser = 0; + AUTHREG_BANNED** ppSt_BannedUser; + AUTHREG_BANNED** ppSt_BannedAddr; + + Database_SQLite_BannedList(&ppSt_BannedUser, &nCountUser, &ppSt_BannedAddr, &nCountAddr); + Protocol_Packet_HttpBanned(tszSDBuffer, &nSDLen, &ppSt_BannedUser, nCountUser, &ppSt_BannedAddr, nCountAddr); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_BannedAddr, nCountAddr); + BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_BannedUser, nCountUser); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,查询禁用列表成功,禁用的用户个数:%d,禁用的IP地址个数:%d"), lpszClientAddr, nCountUser, nCountAddr); } - return TRUE; } \ No newline at end of file -- Gitee From 691500f7d5fe0d2ee14e637bae1012d5d5dd9310 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 14:13:33 +0800 Subject: [PATCH 20/31] modify:banned protocol parse need sub-item --- .../Protocol_Parse/Protocol_Parse.cpp | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp index 755acee..39a5a23 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp @@ -911,26 +911,27 @@ BOOL CProtocol_Parse::Protocol_Parse_HttpParseBanned(LPCTSTR lpszMsgBuffer, int Protocol_dwErrorCode = ERROR_AUTHORIZE_MODULE_PROTOCOL_PARSE; return FALSE; } + Json::Value st_JsonObject = st_JsonRoot["st_Banned"]; - if (!st_JsonRoot["nID"].isNull()) + if (!st_JsonObject["nID"].isNull()) { - pSt_AuthBanned->nID = st_JsonRoot["nID"].asInt64(); + pSt_AuthBanned->nID = st_JsonObject["nID"].asInt64(); } - if (!st_JsonRoot["tszIPEnd"].isNull()) + if (!st_JsonObject["tszIPEnd"].isNull()) { - _tcscpy(pSt_AuthBanned->tszIPEnd, st_JsonRoot["tszIPEnd"].asCString()); + _tcscpy(pSt_AuthBanned->tszIPEnd, st_JsonObject["tszIPEnd"].asCString()); } - if (!st_JsonRoot["tszIPStart"].isNull()) + if (!st_JsonObject["tszIPStart"].isNull()) { - _tcscpy(pSt_AuthBanned->tszIPStart, st_JsonRoot["tszIPStart"].asCString()); + _tcscpy(pSt_AuthBanned->tszIPStart, st_JsonObject["tszIPStart"].asCString()); } - if (!st_JsonRoot["tszTime"].isNull()) + if (!st_JsonObject["tszTime"].isNull()) { - _tcscpy(pSt_AuthBanned->tszTime, st_JsonRoot["tszTime"].asCString()); + _tcscpy(pSt_AuthBanned->tszTime, st_JsonObject["tszTime"].asCString()); } - if (!st_JsonRoot["tszUserName"].isNull()) + if (!st_JsonObject["tszUserName"].isNull()) { - _tcscpy(pSt_AuthBanned->tszUserName, st_JsonRoot["tszUserName"].asCString()); + _tcscpy(pSt_AuthBanned->tszUserName, st_JsonObject["tszUserName"].asCString()); } return TRUE; } \ No newline at end of file -- Gitee From 7087fa8d29e0792540312739076ae9106bd63bf5 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 14:31:37 +0800 Subject: [PATCH 21/31] added:banned window for management program --- .../Authorize_Dialog/Dialog_Banned.cpp | 34 ++++++++++++++ .../Authorize_Dialog/Dialog_Banned.h | 24 ++++++++++ .../XEngineAuthorizeApp.aps | Bin 119184 -> 119804 bytes .../XEngineAuthorizeApp.rc | Bin 27018 -> 28412 bytes .../XEngine_AuthorizeApp.vcxproj | 2 + .../XEngine_AuthorizeApp.vcxproj.filters | 6 +++ .../XEngine_AuthorizeAppDlg.cpp | 42 ++++++++++++------ .../XEngine_AuthorizeAppDlg.h | 3 +- .../XEngine_AuthorizeApp/pch.h | 1 + .../XEngine_AuthorizeApp/resource.h | 4 +- 10 files changed, 101 insertions(+), 15 deletions(-) create mode 100644 XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.cpp create mode 100644 XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.h diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.cpp new file mode 100644 index 0000000..edc787b --- /dev/null +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.cpp @@ -0,0 +1,34 @@ +// Dialog_Banned.cpp: 实现文件 +// + +#include "pch.h" +#include "../XEngine_AuthorizeApp.h" +#include "afxdialogex.h" +#include "Dialog_Banned.h" + + +// CDialog_Banned 对话框 + +IMPLEMENT_DYNAMIC(CDialog_Banned, CDialogEx) + +CDialog_Banned::CDialog_Banned(CWnd* pParent /*=nullptr*/) + : CDialogEx(IDD_DIALOG_BANNED, pParent) +{ + +} + +CDialog_Banned::~CDialog_Banned() +{ +} + +void CDialog_Banned::DoDataExchange(CDataExchange* pDX) +{ + CDialogEx::DoDataExchange(pDX); +} + + +BEGIN_MESSAGE_MAP(CDialog_Banned, CDialogEx) +END_MESSAGE_MAP() + + +// CDialog_Banned 消息处理程序 diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.h new file mode 100644 index 0000000..e0b1215 --- /dev/null +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.h @@ -0,0 +1,24 @@ +#pragma once +#include "afxdialogex.h" + + +// CDialog_Banned 对话框 + +class CDialog_Banned : public CDialogEx +{ + DECLARE_DYNAMIC(CDialog_Banned) + +public: + CDialog_Banned(CWnd* pParent = nullptr); // 标准构造函数 + virtual ~CDialog_Banned(); + +// 对话框数据 +#ifdef AFX_DESIGN_TIME + enum { IDD = IDD_DIALOG_BANNED }; +#endif + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 + + DECLARE_MESSAGE_MAP() +}; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index c2d292478ffc28c392dab2fd04250849b5a93718..281aa83a287147d52ec0ba3ffb7e194d2b4b1d5f 100644 GIT binary patch delta 1100 zcmZuvT}V@L6hG%)*QVQQ(uXOd6(R@`Y&!L&Ky8%+Q)hx!$}r0a#3-^Tr2I-mgk1OG z;G3wZs1NES1uY-S(#=hK(uW@UFtD&MA49bBzdBRqz5M^@p5O0x&iUQ{y{(MT|)So81adhr{h~W@P7HaA#)Z&O9bG8Zf{<-nD$|zzC6?MS%o*s9*0KUGKzYgU-lyoLP?i(Vv6pJ9NN| z0LK~H*wFB5Ac(X;3rUl5;!VTCS|eUV!eyp<9N!r2~;wW2S2EE z9OFmFrqC*5BYm63vk5$4%Y8XS=m1(d&)>%CRO~akX7FHsBERhUZK_eFDtBQ`DmJnU zYgVzpyRa4&OP5AFX7B}4x(`kGm|Q-Lk-h*8`p`^|{Ai+bKl-TMkNaawEs3%E*=0gTslu(?^X@uSq$MXv(fddsm zWUmQenQU`hI7luIa?t?NTtCKYCRqHDJc62_AweDWB0U=x6uWAtKZ2^J=y|l1879RH z@sBmBGj<+?K?X3t4)M)ly!c16-iG+_gEVn{!#kwODU8)N^5{h$(ywVeL-X?(A=dV>FvQ#b+alq7i|OKzWxDJ CR7HOP delta 609 zcmZvZ&r4KM9L4W>qw_`@#7KluW(sB(vlz%0g%crSn?Q_dqrM44a*SkNf`b_bsSlc!gM<>zPkkV^F*n+e|G~8Heb7+Sh0FP#&-vba;d>9?n3HqnWScKu zfc>DOZ+Y>c3t4BX8?bAW4fa}3&Zktr{nm=&vR$;Aamq1LuVDwP!p`=sho~_Wlqox4 z-|U@o4ttZW@Y|i~(38P*W-yKK!GMwlbxvhc%gEJd`aU7EQZAx*^MdFfQI*yO4 zW#3U%(myQzMum-gtR%j@!k&7po~QFTbG{3IM-yH&`wx5Wv2V!S&f^1ED5944ipZgb zRtY=E@?sg$>VA3P6)h>z%&{^q;E|Rv-7*?b$De|X{dq<<5y1cxn>Z^SmX=|Th#2b* zXLR_ItC}XctEGj%yl{t+Ekul^ySyTbAzE9KUge00@nexQn%?KCrq{Wv>B0(+G>tRt z3Jo$LVoYb5a^B|PQy4I78edbpetv%)rPKH^`%Ke-`F3B?175zVY14;W20jE-kEVlbb4Fh+cGPZ-x`yZA56=>FY& IKWQ}^09P_c=>Px# delta 36 ucmV+<0Nelk-2sZz0k9NLlWJP9vy@YC50hM43bQ<9^aGRb3>ve(Xg&rvSr5$s diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj index 26763d5..04aa153 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj @@ -191,6 +191,7 @@ + @@ -205,6 +206,7 @@ + diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj.filters b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj.filters index 9f87650..22babc0 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj.filters +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj.filters @@ -63,6 +63,9 @@ 头文件\Authorize_Dialog + + 头文件\Authorize_Dialog + @@ -92,6 +95,9 @@ 源文件\Authorize_Dialog + + 源文件\Authorize_Dialog + diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp index cb7ae70..ce241c7 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp @@ -68,14 +68,16 @@ BOOL CXEngineAuthorizeAppDlg::OnInitDialog() WSAStartup(MAKEWORD(2, 2), &st_WSAData); m_TabWindows.InsertItem(0, _T("服务配置")); - m_TabWindows.InsertItem(1, _T("用户管理")); - m_TabWindows.InsertItem(2, _T("序列号管理")); - m_TabWindows.InsertItem(3, _T("功能开关")); - + m_TabWindows.InsertItem(1, _T("功能开关")); + m_TabWindows.InsertItem(2, _T("用户管理")); + m_TabWindows.InsertItem(3, _T("序列号管理")); + m_TabWindows.InsertItem(4, _T("黑名单配置")); + m_DlgConfig.Create(IDD_DIALOG_CONFIG, &m_TabWindows); + m_DlgSwitch.Create(IDD_DIALOG_SWITCH, &m_TabWindows); m_DlgUser.Create(IDD_DIALOG_USER, &m_TabWindows); m_DlgSerial.Create(IDD_DIALOG_SERIAL, &m_TabWindows); - m_DlgSwitch.Create(IDD_DIALOG_SWITCH, &m_TabWindows); + m_DlgBanned.Create(IDD_DIALOG_BANNED, &m_TabWindows); //调整子对话框在父窗口中的位置 CRect st_Rect; m_TabWindows.GetClientRect(&st_Rect); @@ -85,14 +87,16 @@ BOOL CXEngineAuthorizeAppDlg::OnInitDialog() st_Rect.right -= 1; //设置子对话框尺寸并移动到指定位置 m_DlgConfig.MoveWindow(&st_Rect); + m_DlgSwitch.MoveWindow(&st_Rect); m_DlgUser.MoveWindow(&st_Rect); m_DlgSerial.MoveWindow(&st_Rect); - m_DlgSwitch.MoveWindow(&st_Rect); + m_DlgBanned.MoveWindow(&st_Rect); //分别设置隐藏和显示 m_DlgConfig.ShowWindow(TRUE); + m_DlgSwitch.ShowWindow(FALSE); m_DlgUser.ShowWindow(FALSE); m_DlgSerial.ShowWindow(FALSE); - m_DlgSwitch.ShowWindow(FALSE); + m_DlgBanned.ShowWindow(FALSE); m_TabWindows.SetCurSel(0); hMainWnd = m_hWnd; @@ -147,27 +151,39 @@ void CXEngineAuthorizeAppDlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult { case 0: m_DlgConfig.ShowWindow(TRUE); + m_DlgSwitch.ShowWindow(FALSE); m_DlgUser.ShowWindow(FALSE); m_DlgSerial.ShowWindow(FALSE); - m_DlgSwitch.ShowWindow(FALSE); + m_DlgBanned.ShowWindow(FALSE); break; case 1: m_DlgConfig.ShowWindow(FALSE); - m_DlgUser.ShowWindow(TRUE); + m_DlgSwitch.ShowWindow(TRUE); + m_DlgUser.ShowWindow(FALSE); m_DlgSerial.ShowWindow(FALSE); - m_DlgSwitch.ShowWindow(FALSE); + m_DlgBanned.ShowWindow(FALSE); break; case 2: m_DlgConfig.ShowWindow(FALSE); - m_DlgUser.ShowWindow(FALSE); - m_DlgSerial.ShowWindow(TRUE); m_DlgSwitch.ShowWindow(FALSE); + m_DlgUser.ShowWindow(TRUE); + m_DlgSerial.ShowWindow(FALSE); + m_DlgBanned.ShowWindow(FALSE); break; case 3: m_DlgConfig.ShowWindow(FALSE); + m_DlgSwitch.ShowWindow(FALSE); + m_DlgUser.ShowWindow(FALSE); + m_DlgSerial.ShowWindow(TRUE); + m_DlgBanned.ShowWindow(FALSE); + break; + case 4: + m_DlgConfig.ShowWindow(FALSE); + m_DlgSwitch.ShowWindow(FALSE); m_DlgUser.ShowWindow(FALSE); m_DlgSerial.ShowWindow(FALSE); - m_DlgSwitch.ShowWindow(TRUE); + m_DlgBanned.ShowWindow(TRUE); + break; default: break; } diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h index 5ca84ff..446b4c1 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h @@ -32,9 +32,10 @@ protected: DECLARE_MESSAGE_MAP() public: CDialog_Config m_DlgConfig; + CDialog_Switch m_DlgSwitch; CDialog_User m_DlgUser; CDialog_Serial m_DlgSerial; - CDialog_Switch m_DlgSwitch; + CDialog_Banned m_DlgBanned; public: CTabCtrl m_TabWindows; afx_msg void OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h index b2a6b75..00025d1 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h @@ -34,6 +34,7 @@ using namespace std; #include "Authorize_Dialog/Dialog_Serial.h" #include "Authorize_Dialog/Dialog_Modify.h" #include "Authorize_Dialog/Dialog_Switch.h" +#include "Authorize_Dialog/Dialog_Banned.h" #include "Authorize_Help/Authorize_Help.h" extern HWND hMainWnd; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h index 16a25ce..23de8ae 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h @@ -9,6 +9,7 @@ #define IDD_DIALOG_SERIAL 134 #define IDD_DIALOG_MODIFY 136 #define IDD_DIALOG_SWITCH 138 +#define IDD_DIALOG_BANNED 140 #define IDC_TAB1 1000 #define IDC_EDIT1 1001 #define IDC_EDIT2 1002 @@ -17,6 +18,7 @@ #define IDC_EDIT4 1004 #define IDC_BUTTON1 1005 #define IDC_EDIT5 1005 +#define IDC_LIST2 1005 #define IDC_BUTTON2 1006 #define IDC_BUTTON3 1007 #define IDC_EDIT10 1007 @@ -47,7 +49,7 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 140 +#define _APS_NEXT_RESOURCE_VALUE 142 #define _APS_NEXT_COMMAND_VALUE 32771 #define _APS_NEXT_CONTROL_VALUE 1017 #define _APS_NEXT_SYMED_VALUE 101 -- Gitee From 7d2887df67d3a443eaa60952736d327f20f5a6d3 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 15:11:11 +0800 Subject: [PATCH 22/31] fixed:banned query size is incorrect --- .../Database_SQLite/Database_SQLite.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp index 7503862..1c09115 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp @@ -1235,10 +1235,12 @@ BOOL CDatabase_SQLite::Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_Banned //注册时间 _tcscpy(st_Banned.tszTime, ppszResult[nFliedValue]); - stl_ListAddr.push_back(st_Banned); + stl_ListUser.push_back(st_Banned); } DataBase_SQLite_FreeTable(ppszResult); //导出 + *pInt_AddrCount = stl_ListAddr.size(); + *pInt_UserCount = stl_ListUser.size(); BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_BannedAddr, stl_ListAddr.size(), sizeof(AUTHREG_BANNED)); BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_BannedUser, stl_ListUser.size(), sizeof(AUTHREG_BANNED)); -- Gitee From 5ed9abfcc09b2e46f892709b9f7a72a87c04e2f6 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 15:11:55 +0800 Subject: [PATCH 23/31] fixed:banned packet addr is incorrent --- .../Protocol_Packet/Protocol_Packet.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp index 59c77ad..c6a6fe2 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp @@ -650,13 +650,13 @@ BOOL CProtocol_Packet::Protocol_Packet_HttpBanned(TCHAR* ptszMsgBuffer, int* pIn st_JsonObject["tszUserName"] = (*pppSt_BannedUser)[i]->tszUserName; st_JsonUser.append(st_JsonObject); } - for (int i = 0; i < nUserCount; i++) + for (int i = 0; i < nAddrCount; i++) { Json::Value st_JsonObject; - st_JsonObject["nID"] = (*pppSt_BannedUser)[i]->nID; - st_JsonObject["tszIPEnd"] = (*pppSt_BannedUser)[i]->tszIPEnd; - st_JsonObject["tszIPStart"] = (*pppSt_BannedUser)[i]->tszIPStart; - st_JsonObject["tszTime"] = (*pppSt_BannedUser)[i]->tszTime; + st_JsonObject["nID"] = (*pppSt_BannedAddr)[i]->nID; + st_JsonObject["tszIPEnd"] = (*pppSt_BannedAddr)[i]->tszIPEnd; + st_JsonObject["tszIPStart"] = (*pppSt_BannedAddr)[i]->tszIPStart; + st_JsonObject["tszTime"] = (*pppSt_BannedAddr)[i]->tszTime; st_JsonAddr.append(st_JsonObject); } st_JsonRoot["msg"] = "success"; -- Gitee From 8ed70f6bc3c330278b935108507a92f89d76dc64 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 15:48:10 +0800 Subject: [PATCH 24/31] fixed:banned delete and list for sqlite --- .../Database_SQLite/Database_SQLite.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp index 1c09115..e26e048 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp @@ -1117,17 +1117,17 @@ BOOL CDatabase_SQLite::Database_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned) //处理的类型 if (_tcslen(pSt_Banned->tszUserName) > 0) { - _stprintf_s(tszSQLStatement, _T("DELETE * FROM Authorize_BannedUser WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); + _stprintf_s(tszSQLStatement, _T("DELETE FROM Authorize_BannedUser WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); } else { if (_tcslen(pSt_Banned->tszIPEnd) > 0) { - _stprintf_s(tszSQLStatement, _T("DELETE * FROM Authorize_BannedAddr WHERE tszIPStart = '%s' AND tszIPEnd = '%s'"), pSt_Banned->tszIPStart, pSt_Banned->tszIPEnd); + _stprintf_s(tszSQLStatement, _T("DELETE FROM Authorize_BannedAddr WHERE tszIPStart = '%s' AND tszIPEnd = '%s'"), pSt_Banned->tszIPStart, pSt_Banned->tszIPEnd); } else { - _stprintf_s(tszSQLStatement, _T("DELETE * FROM Authorize_BannedAddr WHERE tszIPStart = '%s'"), pSt_Banned->tszIPStart); + _stprintf_s(tszSQLStatement, _T("DELETE FROM Authorize_BannedAddr WHERE tszIPStart = '%s'"), pSt_Banned->tszIPStart); } } //操作数据库 @@ -1203,6 +1203,7 @@ BOOL CDatabase_SQLite::Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_Banned nFliedValue++; //注册时间 _tcscpy(st_Banned.tszTime, ppszResult[nFliedValue]); + nFliedValue++; stl_ListAddr.push_back(st_Banned); } @@ -1234,6 +1235,7 @@ BOOL CDatabase_SQLite::Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_Banned nFliedValue++; //注册时间 _tcscpy(st_Banned.tszTime, ppszResult[nFliedValue]); + nFliedValue++; stl_ListUser.push_back(st_Banned); } -- Gitee From b498d91b84b6dc4244318142bb3a0728c9c246bc Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 15:48:59 +0800 Subject: [PATCH 25/31] added:insert and delete and query for management program --- .../Authorize_Dialog/Dialog_Banned.cpp | 343 ++++++++++++++++++ .../Authorize_Dialog/Dialog_Banned.h | 15 + .../XEngineAuthorizeApp.aps | Bin 119804 -> 120276 bytes .../XEngineAuthorizeApp.rc | Bin 28412 -> 29624 bytes .../XEngine_AuthorizeApp/resource.h | 4 +- 5 files changed, 361 insertions(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.cpp index edc787b..9214299 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.cpp @@ -24,11 +24,354 @@ CDialog_Banned::~CDialog_Banned() void CDialog_Banned::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); + DDX_Control(pDX, IDC_RADIO1, m_RadioIPAddr); + DDX_Control(pDX, IDC_RADIO2, m_RadioUser); + DDX_Control(pDX, IDC_STATIC_TIPS, m_StaticTips); + DDX_Control(pDX, IDC_STATIC_TIPS2, m_StaticIPEnd); + DDX_Control(pDX, IDC_EDIT2, m_EditIPEnd); + DDX_Control(pDX, IDC_LIST1, m_ListAddr); + DDX_Control(pDX, IDC_LIST2, m_ListUser); + DDX_Control(pDX, IDC_EDIT1, m_EditUser); } BEGIN_MESSAGE_MAP(CDialog_Banned, CDialogEx) + ON_BN_CLICKED(IDC_RADIO1, &CDialog_Banned::OnBnClickedRadio1) + ON_BN_CLICKED(IDC_RADIO2, &CDialog_Banned::OnBnClickedRadio2) + ON_BN_CLICKED(IDC_BUTTON2, &CDialog_Banned::OnBnClickedButton2) + ON_BN_CLICKED(IDC_BUTTON4, &CDialog_Banned::OnBnClickedButton4) + ON_BN_CLICKED(IDC_BUTTON3, &CDialog_Banned::OnBnClickedButton3) END_MESSAGE_MAP() // CDialog_Banned 消息处理程序 + + +void CDialog_Banned::OnBnClickedRadio1() +{ + // TODO: 在此添加控件通知处理程序代码 + m_StaticTips.SetWindowText(_T("要禁用的IP地址:")); + m_StaticIPEnd.SetWindowText(_T("禁用的结束IP地址:")); + m_StaticIPEnd.ShowWindow(SW_SHOW); + m_EditIPEnd.ShowWindow(SW_SHOW); +} + + +void CDialog_Banned::OnBnClickedRadio2() +{ + // TODO: 在此添加控件通知处理程序代码 + m_StaticTips.SetWindowText(_T("要禁用的用户名:")); + + m_StaticIPEnd.ShowWindow(SW_HIDE); + m_EditIPEnd.ShowWindow(SW_HIDE); +} + + +BOOL CDialog_Banned::OnInitDialog() +{ + CDialogEx::OnInitDialog(); + + // TODO: 在此添加额外的初始化 + m_StaticTips.SetWindowText(_T("要禁用的用户名:")); + m_RadioUser.SetCheck(BST_CHECKED); + + m_StaticIPEnd.ShowWindow(SW_HIDE); + m_EditIPEnd.ShowWindow(SW_HIDE); + + m_ListAddr.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 80); + m_ListAddr.InsertColumn(1, _T("起始IP地址"), LVCFMT_LEFT, 120); + m_ListAddr.InsertColumn(2, _T("结束IP地址"), LVCFMT_LEFT, 120); + m_ListAddr.InsertColumn(3, _T("创建日期"), LVCFMT_LEFT, 120); + m_ListAddr.SetExtendedStyle(LVS_EX_FULLROWSELECT); + + m_ListUser.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 80); + m_ListUser.InsertColumn(1, _T("用户名"), LVCFMT_LEFT, 120); + m_ListUser.InsertColumn(2, _T("创建日期"), LVCFMT_LEFT, 120); + m_ListUser.SetExtendedStyle(LVS_EX_FULLROWSELECT); + return TRUE; // return TRUE unless you set the focus to a control + // 异常: OCX 属性页应返回 FALSE +} + + +void CDialog_Banned::OnBnClickedButton2() +{ + // TODO: 在此添加控件通知处理程序代码 + CString m_StrIPAddr; + CString m_StrIPPort; + CString m_StrToken; + CString m_StrUser; + CString m_StrIPEnd; + + CDialog_Config* pWnd = (CDialog_Config*)CDialog_Config::FromHandle(hConfigWnd); + pWnd->m_EditIPAddr.GetWindowText(m_StrIPAddr); + pWnd->m_EditIPPort.GetWindowText(m_StrIPPort); + pWnd->m_EditToken.GetWindowText(m_StrToken); + m_EditUser.GetWindowText(m_StrUser); + m_EditIPEnd.GetWindowText(m_StrIPEnd); + + TCHAR tszUrlAddr[MAX_PATH]; + memset(tszUrlAddr, '\0', MAX_PATH); + + _stprintf(tszUrlAddr, _T("http://%s:%s/auth/banned/insert"), m_StrIPAddr.GetBuffer(), m_StrIPPort.GetBuffer()); + int nMsgLen = 0; + CHAR* ptszMsgBuffer = NULL; + Json::Value st_JsonRoot; + Json::Value st_JsonObject; + st_JsonRoot["xhToken"] = _ttoi64(m_StrToken.GetBuffer()); + if (BST_CHECKED == m_RadioUser.GetCheck()) + { + st_JsonObject["tszUserName"] = m_StrUser.GetBuffer(); + } + else + { + st_JsonObject["tszIPStart"] = m_StrUser.GetBuffer(); + st_JsonObject["tszIPEnd"] = m_StrIPEnd.GetBuffer(); + } + st_JsonRoot["st_Banned"] = st_JsonObject; + //是否加密 + TCHAR tszPassBuffer[64]; + memset(tszPassBuffer, '\0', sizeof(tszPassBuffer)); + ::GetDlgItemText(hConfigWnd, IDC_EDIT6, tszPassBuffer, sizeof(tszPassBuffer)); + if (bCrypto) + { + TCHAR tszMsgBuffer[2048]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + nMsgLen = st_JsonRoot.toStyledString().length(); + OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (UCHAR*)tszMsgBuffer, tszPassBuffer); + APIHelp_HttpRequest_Custom(_T("POST"), tszUrlAddr, tszMsgBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + } + else + { + APIHelp_HttpRequest_Custom(_T("POST"), tszUrlAddr, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + } + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + st_JsonRoot.clear(); + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (bCrypto) + { + TCHAR tszMsgBuffer[2048]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszMsgBuffer, tszPassBuffer); + if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Authorize_Help_LogPrint(_T("解析客户列表接口数据错误,无法继续")); + return; + } + } + else + { + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Authorize_Help_LogPrint(_T("解析客户列表接口数据错误,无法继续")); + return; + } + } + + if (0 == st_JsonRoot["code"].asInt()) + { + Authorize_Help_LogPrint(_T("插入黑名单信息成功")); + } + else + { + Authorize_Help_LogPrint(_T("插入黑名单信息成功")); + } + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + OnBnClickedButton4(); +} + + +void CDialog_Banned::OnBnClickedButton4() +{ + // TODO: 在此添加控件通知处理程序代码 + m_ListUser.DeleteAllItems(); + m_ListAddr.DeleteAllItems(); + + CString m_StrIPAddr; + CString m_StrIPPort; + CString m_StrToken; + + CDialog_Config* pWnd = (CDialog_Config*)CDialog_Config::FromHandle(hConfigWnd); + pWnd->m_EditIPAddr.GetWindowText(m_StrIPAddr); + pWnd->m_EditIPPort.GetWindowText(m_StrIPPort); + pWnd->m_EditToken.GetWindowText(m_StrToken); + + TCHAR tszUrlAddr[MAX_PATH]; + memset(tszUrlAddr, '\0', MAX_PATH); + + _stprintf(tszUrlAddr, _T("http://%s:%s/auth/banned/list"), m_StrIPAddr.GetBuffer(), m_StrIPPort.GetBuffer()); + int nMsgLen = 0; + CHAR* ptszMsgBuffer = NULL; + Json::Value st_JsonRoot; + st_JsonRoot["xhToken"] = _ttoi64(m_StrToken.GetBuffer()); + //是否加密 + TCHAR tszPassBuffer[64]; + memset(tszPassBuffer, '\0', sizeof(tszPassBuffer)); + ::GetDlgItemText(hConfigWnd, IDC_EDIT6, tszPassBuffer, sizeof(tszPassBuffer)); + if (bCrypto) + { + TCHAR tszMsgBuffer[2048]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + nMsgLen = st_JsonRoot.toStyledString().length(); + OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (UCHAR*)tszMsgBuffer, tszPassBuffer); + APIHelp_HttpRequest_Custom(_T("POST"), tszUrlAddr, tszMsgBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + } + else + { + APIHelp_HttpRequest_Custom(_T("POST"), tszUrlAddr, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + } + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + st_JsonRoot.clear(); + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (bCrypto) + { + TCHAR tszMsgBuffer[2048]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszMsgBuffer, tszPassBuffer); + if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Authorize_Help_LogPrint(_T("解析客户列表接口数据错误,无法继续")); + return; + } + } + else + { + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Authorize_Help_LogPrint(_T("解析客户列表接口数据错误,无法继续")); + return; + } + } + + for (unsigned int i = 0; i < st_JsonRoot["ArrayAddr"].size(); i++) + { + TCHAR tszIndex[10]; + memset(tszIndex, '\0', 10); + _itot_s(i, tszIndex, 10); + + Json::Value st_JsonArray = st_JsonRoot["ArrayAddr"][i]; + + m_ListAddr.InsertItem(i, _T("")); + m_ListAddr.SetItemText(i, 0, tszIndex); + m_ListAddr.SetItemText(i, 1, st_JsonArray["tszIPStart"].asCString()); + m_ListAddr.SetItemText(i, 2, st_JsonArray["tszIPEnd"].asCString()); + m_ListAddr.SetItemText(i, 3, st_JsonArray["tszTime"].asCString()); + } + for (unsigned int i = 0; i < st_JsonRoot["ArrayUser"].size(); i++) + { + TCHAR tszIndex[10]; + memset(tszIndex, '\0', 10); + _itot_s(i, tszIndex, 10); + + Json::Value st_JsonArray = st_JsonRoot["ArrayUser"][i]; + + m_ListUser.InsertItem(i, _T("")); + m_ListUser.SetItemText(i, 0, tszIndex); + m_ListUser.SetItemText(i, 1, st_JsonArray["tszUserName"].asCString()); + m_ListUser.SetItemText(i, 2, st_JsonArray["tszTime"].asCString()); + } + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); +} + + +void CDialog_Banned::OnBnClickedButton3() +{ + CString m_StrUser; + CString m_StrIPStart; + CString m_StrIPEnd; + Json::Value st_JsonRoot; + Json::Value st_JsonObject; + // TODO: 在此添加控件通知处理程序代码 + POSITION pSt_Sition = m_ListUser.GetFirstSelectedItemPosition(); + int nSelect = m_ListUser.GetNextSelectedItem(pSt_Sition); + if (nSelect >= 0) + { + m_StrUser = m_ListUser.GetItemText(nSelect, 1); + st_JsonObject["tszUserName"] = m_StrUser.GetBuffer(); + } + pSt_Sition = m_ListAddr.GetFirstSelectedItemPosition(); + nSelect = m_ListAddr.GetNextSelectedItem(pSt_Sition); + if (nSelect >= 0) + { + m_StrIPStart = m_ListAddr.GetItemText(nSelect, 1); + m_StrIPEnd = m_ListAddr.GetItemText(nSelect, 2); + + st_JsonObject["tszIPStart"] = m_StrIPStart.GetBuffer(); + st_JsonObject["tszIPEnd"] = m_StrIPEnd.GetBuffer(); + } + CString m_StrIPAddr; + CString m_StrIPPort; + CString m_StrToken; + TCHAR tszUrlAddr[MAX_PATH]; + CDialog_Config* pWnd = (CDialog_Config*)CDialog_Config::FromHandle(hConfigWnd); + + memset(tszUrlAddr, '\0', MAX_PATH); + pWnd->m_EditIPAddr.GetWindowText(m_StrIPAddr); + pWnd->m_EditIPPort.GetWindowText(m_StrIPPort); + pWnd->m_EditToken.GetWindowText(m_StrToken); + + st_JsonRoot["xhToken"] = _ttoi64(m_StrToken.GetBuffer()); + st_JsonRoot["st_Banned"] = st_JsonObject; + int nMsgLen = 0; + CHAR* ptszMsgBuffer = NULL; + _stprintf(tszUrlAddr, _T("http://%s:%s/auth/banned/delete"), m_StrIPAddr.GetBuffer(), m_StrIPPort.GetBuffer()); + //是否加密 + TCHAR tszPassBuffer[64]; + memset(tszPassBuffer, '\0', sizeof(tszPassBuffer)); + ::GetDlgItemText(hConfigWnd, IDC_EDIT6, tszPassBuffer, sizeof(tszPassBuffer)); + + if (bCrypto) + { + TCHAR tszMsgBuffer[2048]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + nMsgLen = st_JsonRoot.toStyledString().length(); + OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (UCHAR*)tszMsgBuffer, tszPassBuffer); + APIHelp_HttpRequest_Custom(_T("POST"), tszUrlAddr, tszMsgBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + } + else + { + APIHelp_HttpRequest_Custom(_T("POST"), tszUrlAddr, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + } + st_JsonRoot.clear(); + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (bCrypto) + { + TCHAR tszMsgBuffer[2048]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszMsgBuffer, tszPassBuffer); + if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Authorize_Help_LogPrint(_T("解析删除黑名单接口数据错误,无法继续")); + return; + } + } + else + { + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Authorize_Help_LogPrint(_T("解析删除黑名单接口数据错误,无法继续")); + return; + } + } + + if (0 == st_JsonRoot["code"].asInt()) + { + Authorize_Help_LogPrint(_T("删除黑名单数据成功")); + } + else + { + Authorize_Help_LogPrint(_T("删除黑名单数据失败")); + } + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + //刷新 + OnBnClickedButton4(); +} diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.h index e0b1215..e401b23 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Banned.h @@ -21,4 +21,19 @@ protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() +public: + afx_msg void OnBnClickedRadio1(); + CButton m_RadioIPAddr; + CButton m_RadioUser; + CStatic m_StaticTips; + afx_msg void OnBnClickedRadio2(); + virtual BOOL OnInitDialog(); + CStatic m_StaticIPEnd; + CEdit m_EditIPEnd; + afx_msg void OnBnClickedButton2(); + afx_msg void OnBnClickedButton4(); + afx_msg void OnBnClickedButton3(); + CListCtrl m_ListAddr; + CListCtrl m_ListUser; + CEdit m_EditUser; }; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index 281aa83a287147d52ec0ba3ffb7e194d2b4b1d5f..13b5bb6322e5de9c3fa1ef48a44fd59e55e5a94c 100644 GIT binary patch delta 1097 zcmZ`%ZAep57=GV-XH(b25jI7ahLA(C=0_=#=5!GI5ngp*fpcT7BB*7ML1gMmLh+Au zq4!V1AfwW#Y><&>QRN&QSgglc`Gz$U%e)iTrvh$}d+bRH1Qp1MC0hBReN$2lAZ%czWEIOQj+M$g zZO=wja5_KXF75d01$tEMV%k7FC!_=u;*vr>WCRB5X*n#@)CkY~u- z1+WfX!094j9`59>T8q(QuC!UqQf-72IH!^|&a~uJTsXHFqU4XpG(|B0c=gVTa!~}; zc~{?%s}CP+6+8lEkKy+C1V#hg$7CeO7*=3ET^++64Bj#j`>~pQ!DcaU4Yj~=f`xxaEr?PxJ4))qy~=VUTS5Coz%-| zX_Q9zIC-3=IKmrRiqN_MrsGK}WgzUnNDTqTDy~o~L%d17d|Wt4BYd2Am!|mmC@pf+ zPtpY$_^FhGova+1=xh*EV>|-DW$I-Uq5dU}1eyB|+d7C9nfran{+y+@Q0P$j8V#U` z{d=Fx1uZ_L?g>m$^2WoO+pO8kn`g_;3t_`r=f`Ef^S}H?KT_)JXtIGddsy=aJUSi5 delta 659 zcmZut-Ahwp9Dbj3&YUiT6Xn-D%_7JY%1xJo8I_I5DrLhVq8LvrgG{;t~H*oHC`k!6t@0=dWKn=NTIA7A~i&SBU>aJ!aG=xX%;P8!$8$ zLUsg<`2E1?v-OJD!`g&f&~zTggY`&qJ%Z3-#Q;sFaKff>D8wUd3QD9fh`aPNg)XL! zbd|2A(Z^~gjrQcgM=V<~NywoI-|0yf2Wd11J$WIAO(0CJJld5=r1~qmlSiYnRu$ct zqIY@pD3@pD^sJrq0yO38D{3sjp{zxvBi3qx5L>V5is`uL<;1+5f@W)bi9)8gyefaM z+Ub+&y)4k@YOf+ED!i=-O+7RYx;Bm$amWynDHKBXUD>LTzxgCuGLmQ_%QhX z7gK+8S}fxL1$lw;FioKnU%#?Ki4q3YsSM~$4lOkb&qOk0FLU@IL;WUiWoVRH)w7`7 RZpodcXJ$B(r8i~R{{XC5&c^@% diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc index 7a15b7af5abc90ec9724f3f28f8479027351d39b..96ee716d879e06f95033ecfe95a4d99fd47c5f92 100644 GIT binary patch delta 499 zcmZ8eJxfAi6h0SHObZpGTiM6Wh9cDNw+clHWi)luND$!?2tib|6h#dQE#VX=qOqYL zV7N3zb4&h#h=OQ~_8L0pW(rL&JkNPP&UwF|gxhzawz}lkK?fP4Ab|==kntv<;O5vh ze&`V_S*lAX+(cnH)I>bku%a#WxzpiEpF}}Ya3|J-@!X}ag|eeLBPukZfCdSARm$T; z1r&Ul9LKcS#onH;t*hMOQMG`z!2$fV-2N08G-i-2N+k`<#HKupV1Zmn7w}=;3bBXY zbWG8!K?*Zj0~=vC?q_pBPUJk=z_E~t4dHfg#8)}398BzzYGWnf}(&U%`BUWPua|YAN zjDf;X5st|h0(9V__c_7xK>Zez85ImC7wC#i)(e`!4HsoFnCxgSym>+R1p%NY3kIXf YjESO?QoWds7|bU##w%|Ak#T?v04oY73;+NC diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h index 23de8ae..e41e37e 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h @@ -37,7 +37,9 @@ #define IDC_RADIO1 1015 #define IDC_RADIO2 1016 #define IDC_RADIO3 1017 +#define IDC_STATIC_TIPS 1017 #define IDC_RADIO4 1018 +#define IDC_STATIC_TIPS2 1018 #define IDC_RADIO5 1019 #define IDC_RADIO6 1020 #define IDC_RADIO7 1021 @@ -51,7 +53,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 142 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1017 +#define _APS_NEXT_CONTROL_VALUE 1018 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif -- Gitee From d18ea2224deaeb41754aa852173e82703912e261 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 16:53:28 +0800 Subject: [PATCH 26/31] modify:banned will only take effect after the request is completed --- .../Authorize_HttpTask.cpp | 13 ++++++++ .../Authorize_Net.cpp | 30 ------------------- .../Authorize_TCPTask.cpp | 14 +++++++++ 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp index 94182b0..ff46ecb 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp @@ -57,6 +57,19 @@ BOOL XEngine_Client_HttpTask(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + + _tcscpy(st_Banned.tszIPStart, lpszClientAddr); + BaseLib_OperatorIPAddr_SegAddr(st_Banned.tszIPStart); + //是否在黑名单 + if (Database_SQLite_BannedExist(&st_Banned)) + { + 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, _T("客户端:%s,登录连接被阻止,IP地址被禁用!"), lpszClientAddr); + return FALSE; + } if (0 == _tcsnicmp(lpszMethodPost, pSt_HTTPParament->tszHttpMethod, _tcslen(lpszMethodPost))) { TCHAR tszAPIType[64]; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp index 43421c2..0f875a9 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp @@ -2,16 +2,6 @@ ////////////////////////////////////////////////////////////////////////// BOOL __stdcall XEngine_Client_TCPAccept(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) { - AUTHREG_BANNED st_Banned; - memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); - - _tcscpy(st_Banned.tszIPStart, lpszClientAddr); - //是否在黑名单 - if (Database_SQLite_BannedExist(&st_Banned)) - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,连接被阻止,IP地址被禁用!"), lpszClientAddr); - return FALSE; - } HelpComponents_Datas_CreateEx(xhTCPPacket, lpszClientAddr, 0); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("TCP客户端:%s,进入服务器"), lpszClientAddr); return TRUE; @@ -30,16 +20,6 @@ void __stdcall XEngine_Client_TCPClose(LPCTSTR lpszClientAddr, SOCKET hSocket, L ////////////////////////////////////////////////////////////////////////// BOOL __stdcall XEngine_Client_WSAccept(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) { - AUTHREG_BANNED st_Banned; - memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); - - _tcscpy(st_Banned.tszIPStart, lpszClientAddr); - //是否在黑名单 - if (Database_SQLite_BannedExist(&st_Banned)) - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,连接被阻止,IP地址被禁用!"), lpszClientAddr); - return FALSE; - } RfcComponents_WSPacket_CreateEx(xhWSPacket, lpszClientAddr, 0); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("WS客户端:%s,进入服务器"), lpszClientAddr); return TRUE; @@ -74,16 +54,6 @@ void __stdcall XEngine_Client_WSClose(LPCTSTR lpszClientAddr, SOCKET hSocket, LP ////////////////////////////////////////////////////////////////////////// BOOL __stdcall XEngine_Client_HttpAccept(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) { - AUTHREG_BANNED st_Banned; - memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); - - _tcscpy(st_Banned.tszIPStart, lpszClientAddr); - //是否在黑名单 - if (Database_SQLite_BannedExist(&st_Banned)) - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,连接被阻止,IP地址被禁用!"), lpszClientAddr); - return FALSE; - } RfcComponents_HttpServer_CreateClientEx(xhHttpPacket, lpszClientAddr, 0); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,进入服务器"), lpszClientAddr); return TRUE; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp index d150185..dae045d 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp @@ -55,6 +55,20 @@ BOOL XEngine_Client_TCPTask(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int n TCHAR tszSDBuffer[2048]; memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + + _tcscpy(st_Banned.tszIPStart, lpszClientAddr); + BaseLib_OperatorIPAddr_SegAddr(st_Banned.tszIPStart); + //是否在黑名单 + if (Database_SQLite_BannedExist(&st_Banned)) + { + 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, _T("客户端:%s,登录连接被阻止,IP地址被禁用!"), lpszClientAddr); + return FALSE; + } if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQLOGIN == pSt_ProtocolHdr->unOperatorCode) { AUTHREG_USERTABLE st_UserTable; -- Gitee From 96ee1450d26a692b595a4ee8a15291c1a30581e7 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 17:06:28 +0800 Subject: [PATCH 27/31] fixed:linux build error --- .../Protocol_Packet/Protocol_Packet.cpp | 4 ++-- .../XEngine_APPService/XEngine_AuthorizeService/Makefile | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp index c6a6fe2..1cd8520 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp @@ -645,7 +645,7 @@ BOOL CProtocol_Packet::Protocol_Packet_HttpBanned(TCHAR* ptszMsgBuffer, int* pIn for (int i = 0; i < nUserCount; i++) { Json::Value st_JsonObject; - st_JsonObject["nID"] = (*pppSt_BannedUser)[i]->nID; + st_JsonObject["nID"] = (Json::Value::Int64)(*pppSt_BannedUser)[i]->nID; st_JsonObject["tszTime"] = (*pppSt_BannedUser)[i]->tszTime; st_JsonObject["tszUserName"] = (*pppSt_BannedUser)[i]->tszUserName; st_JsonUser.append(st_JsonObject); @@ -653,7 +653,7 @@ BOOL CProtocol_Packet::Protocol_Packet_HttpBanned(TCHAR* ptszMsgBuffer, int* pIn for (int i = 0; i < nAddrCount; i++) { Json::Value st_JsonObject; - st_JsonObject["nID"] = (*pppSt_BannedAddr)[i]->nID; + st_JsonObject["nID"] = (Json::Value::Int64)(*pppSt_BannedAddr)[i]->nID; st_JsonObject["tszIPEnd"] = (*pppSt_BannedAddr)[i]->tszIPEnd; st_JsonObject["tszIPStart"] = (*pppSt_BannedAddr)[i]->tszIPStart; st_JsonObject["tszTime"] = (*pppSt_BannedAddr)[i]->tszTime; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile index 4b7bc9e..b79e546 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile @@ -10,7 +10,7 @@ LIB = -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool LIBEX = -ldl -lpthread LOADSO = -Wl,-rpath=./,--disable-new-dtags LIBINCLUDE = Authorize_Config.o Authorize_Net.o Authorize_Task.o Authorize_TCPTask.o Authorize_WSTask.o Authorize_HttpTask.o XEngine_AuthorizeService.o \ - AuthorizeHTTP_Client.o AuthorizeHTTP_Serial.o AuthorizeHTTP_User.o AuthorizeHTTP_Pass.o AuthorizeHTTP_Switch.o \ + AuthorizeHTTP_Client.o AuthorizeHTTP_Serial.o AuthorizeHTTP_User.o AuthorizeHTTP_Pass.o AuthorizeHTTP_Switch.o AuthorizeHTTP_Banned.o \ AuthorizeHTTP_Token.o ifeq ($(OS),Windows_NT) @@ -65,6 +65,8 @@ AuthorizeHTTP_Pass.o:./AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp AuthorizeHTTP_Switch.o:./AuthorizeHTTP_Post/AuthorizeHTTP_Switch.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./AuthorizeHTTP_Post/AuthorizeHTTP_Switch.cpp +AuthorizeHTTP_Banned.o:./AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp AuthorizeHTTP_Token.o:./AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp -- Gitee From 019d591c439f1f6b7c0c95d797b64cd970933910 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 17:15:08 +0800 Subject: [PATCH 28/31] modify:login failed will be Dithering windows --- .../XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Config.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Config.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Config.cpp index 0dfd71c..b0b8903 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Config.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Config.cpp @@ -118,6 +118,7 @@ void CDialog_Config::OnBnClickedButton1() if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) { Authorize_Help_LogPrint(_T("登录失败,无法继续")); + AuthHelp_Windows_Dithering(hMainWnd); return; } } @@ -126,12 +127,14 @@ void CDialog_Config::OnBnClickedButton1() if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) { Authorize_Help_LogPrint(_T("登录失败,无法继续")); + AuthHelp_Windows_Dithering(hMainWnd); return; } } if (0 != st_JsonRoot["code"].asInt()) { Authorize_Help_LogPrint(_T("登录失败,无法继续")); + AuthHelp_Windows_Dithering(hMainWnd); return; } m_StrToken.Format(_T("%lld"), st_JsonRoot["xhToken"].asUInt64()); @@ -144,8 +147,6 @@ void CDialog_Config::OnBnClickedButton1() m_BtnLogin.EnableWindow(FALSE); m_BtnLogout.EnableWindow(TRUE); m_BtnUpdate.EnableWindow(TRUE); - - } -- Gitee From 1be3c1ff2bd4eff0c144f4b838f1ec86a0aa1d65 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 Dec 2022 17:15:27 +0800 Subject: [PATCH 29/31] fixed:app client build --- .../Authorize_APPClient/Authorize_APPClient.cpp | 2 +- XEngine_Apps/VSCopy_x86.bat | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 XEngine_Apps/VSCopy_x86.bat diff --git a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp index bb09449..8b769c4 100644 --- a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp +++ b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp @@ -160,7 +160,7 @@ int AuthClient_Login() st_ProtocolHdr.unPacketSize = sizeof(XENGINE_PROTOCOL_USERAUTH); st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL; - st_AuthUser.enDeviceType = ENUM_PROTOCOL_FOR_DEVICE_TYPE_PC; + st_AuthUser.enDeviceType = ENUM_PROTOCOL_FOR_DEVICE_TYPE_PC_WINDOWS; strcpy(st_AuthUser.tszUserName, lpszUser); strcpy(st_AuthUser.tszUserPass, lpszPass); diff --git a/XEngine_Apps/VSCopy_x86.bat b/XEngine_Apps/VSCopy_x86.bat new file mode 100644 index 0000000..ab7876b --- /dev/null +++ b/XEngine_Apps/VSCopy_x86.bat @@ -0,0 +1,14 @@ +copy /y "%XEngine_Lib32%\XEngine_BaseLib\XEngine_BaseLib.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_BaseLib\XEngine_Algorithm.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_OPenSsl.dll" "./" + +copy /y "%XEngine_Lib32%\XEngine_Client\XClient_Socket.dll" "./" + +copy /y "%XEngine_Lib32%\XEngine_NetHelp\NetHelp_APIHelp.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_SystemSdk\XEngine_SystemApi.dll" "./" + +copy /y "%XEngine_Lib32%\XEngine_HelpComponents\zlib1.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_LibEx\libcrypto-3.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_LibEx\libssl-3.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_LibEx\libcurl.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_LibEx\nghttp2.dll" "./" \ No newline at end of file -- Gitee From a5c24d4a65aa8253cf67ee7bca9c8af7c7f63a72 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 30 Dec 2022 09:04:43 +0800 Subject: [PATCH 30/31] update:configure file --- XEngine_Release/XEngine_Config/XEngine_Config.json | 1 + 1 file changed, 1 insertion(+) diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 6a5b946..23dfa80 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -45,6 +45,7 @@ "LogLeave":32 }, "XVer":[ + "V3.4.0.1001 Build20221230", "V3.3.0.1001 Build20221101", "V3.2.0.1001 Build20220923", "V3.1.0.1001 Build20220826", -- Gitee From 2fbdc2b94db9e08a1dd70928896a5265cb572f52 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 30 Dec 2022 09:23:50 +0800 Subject: [PATCH 31/31] update:readme and docment --- CHANGELOG | 18 ++++++++++++++++++ README.en.md | 8 ++++++-- README.md | 9 ++++++--- XEngine_Docment/Docment_en.docx | Bin 131256 -> 133692 bytes XEngine_Docment/Docment_zh.docx | Bin 132903 -> 135611 bytes 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 4519d72..f45edd8 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,21 @@ +XEngine_Authorize V3.4.0.1001 + +添加:windows窗口特效类 +添加:为管理程序增加提示窗口 +添加:黑名单功能,支持IP和用户名,支持删除,插入,查询 +修改:token登录现在必须设置设备类型 +修改:数据库表名称 +修改:现在数据库初始化不在创建数据库了 +修正:修改用户取消功能不生效的问题 + +added:window effects class +added:tips window for management program +added:black list function +modify:must set device type for token login +modify:database table name +modify:does not create table when sql init +fixed:modify user info cancel does not work +====================================================================================== XEngine_Authorize V3.3.0.1001 增加:自定义序列号导入和导出 diff --git a/README.en.md b/README.en.md index 9a7bf49..02b39b5 100644 --- a/README.en.md +++ b/README.en.md @@ -40,11 +40,12 @@ feature list: 12. support http management api function,you can write web page to implement network authorize management interface by self 13. support third user verification interface 14. support distributed verification authorize function +15. black list management ## install #### XEngine Evn -you must install XEngine,need V7.38 or above,install XEngine can be refer to xengine Readme docment +you must install XEngine,need V7.46 or above,install XEngine can be refer to xengine Readme docment GITEE:https://gitee.com/xyry/libxengine GITHUB:https://github.com/libxengine/xengine @@ -76,11 +77,14 @@ make FLAGS=CleanAll Clear Complie ## how to use #### server(management) Windows:complie complete,copy VSCopy_x86 or VSCopy_x64 to your complie dir,should copy depend module when execution complete,and copy XEngine_Release dir all file to complie dir -Linux:it can be execution.... +Linux or macos:it can be execution.... #### client client can be refer XEngine_Apps,and can be refer the docment of protocol,The process should be:register->login->pay->timeout->end. +#### administrator +The program released now comes with an administrator user, user name: admin password: 123123aa, you need to change the password yourself + ## test server address:app.xyry.org port :tcp port 5300,websocket port 5301,http management port 5302,Transmission verification password: no encryption diff --git a/README.md b/README.md index 7668e26..a885084 100644 --- a/README.md +++ b/README.md @@ -40,11 +40,12 @@ V2可以直接升级到V3版本,因为数据库并没有修改,直接替换程 12. 支持HTTP管理接口,可以自己写前端实现网络验证管理界面 13. 支持第三方用户验证接口 14. 分布式验证授权功能支持 +15. 黑名单管理 ## 安装教程 #### XEngine环境 -必须安装XEngine,版本需要V7.38或者以上版本,安装XEngine可以参考其Readme文档 +必须安装XEngine,版本需要V7.46或者以上版本,安装XEngine可以参考其Readme文档 GITEE:https://gitee.com/xyry/libxengine GITHUB:https://github.com/libxengine/xengine @@ -76,11 +77,14 @@ make FLAGS=CleanAll 清理编译 ## 如何使用 #### 服务端(管理端) Windows:编译成功后,拷贝VSCopy_x86或者VSCopy_x64 到你的编译目录,执行自动拷贝依赖的模块,然后把XEngine_Release下的文件全部拷贝到编译目录即可 -Linux:直接运行即可 +Linux or macos:直接运行即可 #### 客户端 客户端可以参考XEngine_Apps的例子,也可以参考文档的通信协议自己集成到你的客户端,流程应该是:注册->登录->充值->等待超时->结束. +#### 管理员 +现在发布的程序自带管理员用户,用户名:admin 密码:123123aa,你需要自己修改密码. + ## 测试服务器 地址:app.xyry.org 端口:tcp端口 5300,websocket端口 5301,http管理端 5302,传输验证密码:无加密 @@ -132,7 +136,6 @@ mysql支持 支持用户和硬件绑定同时验证 支持自定义序列号导入导出 统计用户所有在线时间 -黑名单设置(IP,用户) 账号封禁与处罚,时间永久 持久层,redis,memcached等支持 支持代理端(序列号分发,权限控制) diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index aafb22259739d02860a1d50ea922741fcbacccb1..5ccb1b127c1fd397759a0bbf816ec95084861c32 100644 GIT binary patch delta 114017 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 D4$8Ek diff --git a/XEngine_Docment/Docment_zh.docx b/XEngine_Docment/Docment_zh.docx index 9a75ba52cf423fc9e2a62f7f4b1b87ea09e32d25..0055345ead644a7e381d11dc32a934c473e972c9 100644 GIT binary patch delta 116366 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

~*)BfQM0CMY5JBzs!hk~7K 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 -- Gitee