diff --git a/CHANGELOG b/CHANGELOG index 2516f1d..292e856 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,53 @@ +XEngine_Authorize V3.2.0.1001 + +增加:为管理程序增加用户注册功能 +增加:日志窗口并且支持日志保存和清理 +增加:http支持加密 +增加:配置窗口支持加密配置管理 +增加:发送消息内存池支持 +增加:登录配置选项 +增加:指定会话TOKEN用户超时 +增加:HTTP用户授权验证 +增加:会话网络类型 +增加:三方验证支持 +增加:分布式验证功能 +修改:Session_Authorize_GetTimer 为 Session_Authorize_GetClientForUser 可以获取更多信息 +修改:token关闭的时候验证会话也会一起关闭 +修改:http管理接口验证权限 +修改:程序启动按钮关闭没有禁用 +修改:用户管理和用户修改以及序列号验证接口支持加解密了 +修改:允许http管理器重复登录了 +修改:弹窗消息现在显示在日志窗口了 +修正:一个大小写问题 +修正:websocket协议不支持加密的问题 +修正:token打印问题 +修正:添加用户注册级别设置无效的问题 +删除:类型字符串 + +added:user insert for app management +added:log windows and log save and clear +added:encrypto for payload of the http +added:configure dialog supported crypto for management app +added:memory pool for send message +added:login for configure +added:specified user timeout for session token +added:user authorize verification for http +added:nettype for session authorize +added:Third Party Verification +added:distributed verification function +modify:Session_Authorize_GetTimer to Session_Authorize_GetClientForUser for get more information +modify:token close with authorize session +modify:http manage api verification permission now +modify:close buttom is not disable when program start +modify:user manage and user modify and serial management support encrypto +modify:allow repeat login for http management +modify:messagebox to log window +fixed:case problem +fixed:websocket not support crypto +fixed:token print error +fixed:add user level set does not work +delete:type string array +====================================================================================== XEngine_Authorize V3.1.0.1001 添加:删除TOKEN会话功能 diff --git a/README.en.md b/README.en.md index a5e3c22..90dd59b 100644 --- a/README.en.md +++ b/README.en.md @@ -7,17 +7,26 @@ As long as the repository is not in a suspended state, someone will maintain and c c++网络验证服务器 网络授权服务器 c c++network Authorize service the server is network authorize verification service code library,This service mainly provides network authorization verification function.support local and network verification mode -network verification support tcp and websocket protocol verification.it is means:support app program and web +network verification support tcp and websocket and http protocol verification.it is means:support app program and web first open source C/C++ network authentication server, supporting various languages ​​and platforms for network authentication and authorization This is a cross-platform simple high-performance network authorization server that provides a complete demo code +#### why choose us +Fast iteration: feature updates are timely +Technical support: complete technical documentation and technical support, quick response to your questions +Unlimited language: don't care about the language your client uses, you can choose your own appropriate communication method +Stable and reliable: based on C/C++, the core framework has been verified for 10 years. It is stable and compatible with high performance +Flexible authentication: supports third-party authentication and authorization, supports distributed authentication and authorization, and can use its own user password system +more functions: support various types of authorization + #### Version difference V3 version, the protocol is basically reimplemented. It is no longer compatible with the V2 protocol. V3 is basically changed to the HTTP interface for management. The compatibility is better. Please check the documentation for more. +V2 Version can be update to V3,V3 DB Compatible with V2 Databse ## Software feature A simple and high-performance cross-platform network authentication and authorization server developed and implemented based on XEngine feature list: -1. use standard private protocol to handle network communication +1. support tcp,http.websocket protocols 2. Support Encrypto communication 3. Support User Management 4. Support Serial Management @@ -29,6 +38,8 @@ feature list: 10. Support app program and html web Authorize 11. Support Accesss Control 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 ## install @@ -64,12 +75,13 @@ make FLAGS=CleanAll Clear Complie ## test server address:app.xyry.org or 159.75.200.173 -port :tcp port 5300,websocket port 5301,Transmission verification password: no encryption +port :tcp port 5300,websocket port 5301,http management port 5302,Transmission verification password: no encryption ## Screenshot of the program ![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/1.png "在这里输入图片标题") ![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/2.png "在这里输入图片标题") ![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/3.png "在这里输入图片标题") +![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/4.png "在这里输入图片标题") ## Participate in contribution @@ -78,6 +90,11 @@ port :tcp port 5300,websocket port 5301,Transmission verification password: no e 3. Submit the code 4. New Pull Request +## development path +The V1 version is an XEngine component. Most of the code is concentrated in XEngine +The V2 version comes out separately with all related modules and is developed separately +The V3 version is a new version, developed to meet the requirements of many environments + ## Authorization instructions Use this software must be open source and indicate the source,If you want closed source and commercial,Then need to be authorized by the author. diff --git a/README.md b/README.md index edcb69b..dc2ad46 100644 --- a/README.md +++ b/README.md @@ -7,17 +7,26 @@ c c++网络验证服务器 网络授权服务器 c c++network Authorize service 这是网络授权验证服务器的代码库,这个服务主要提供网络授权验证功能.支持本地和网络两种验证模式 -网络验证支持TCP和WEBSOCKET协议验证,也就是说,支持APP程序和WEB网页端 +网络验证支持TCP和WEBSOCKET以及HTTP协议验证,也就是说,支持APP程序和WEB网页端 全国首款开源C/C++ 网络验证服务器,支持各种语言各种平台进行网络验证和授时服务 这是一个跨平台简单高性能网络授权服务器,提供了完整的演示代码 +#### 为什么选择我们 +快速迭代:功能更新及时 +技术支持:完善的技术文档和技术支持,快速响应你的问题 +不限语言:不关心你的客户端使用的语言,你可以选择自己合适的通信方式 +稳定可靠:基于C/C++实现的,核心框架10年+验证.稳定与高性能兼容 +灵活验证:支持第三方验证授权,支持分布式验证授权,可以使用自己的用户密码系统 +功能丰富:支持各种类型授权,支持时间和次数等等模式 + #### 版本区别 V3版本后协议基本重新实现,不在兼容V2协议,V3基本改为HTTP接口进行管理.兼容性更好.请查看文档获取更多. +V2可以直接升级到V3版本,因为数据库并没有修改,直接替换程序即可.数据库兼容V2版本 ## 软件特性 基于XEngine开发并实现的一套简洁高性能跨平台网络验证授权服务器 软件特性: -1. 采用标准私协议来处理网络通信 +1. 支持HTTP,TCP,WEBSOCKET协议 2. 支持加密通信 3. 支持用户管理 4. 支持序列卡管理 @@ -29,6 +38,8 @@ V3版本后协议基本重新实现,不在兼容V2协议,V3基本改为HTTP接 10. 支持APP程序和HTML网页授权验证 11. 支持权限控制 12. 支持HTTP管理接口,可以自己写前端实现网络验证管理界面 +13. 支持第三方用户验证接口 +14. 分布式验证授权功能支持 ## 安装教程 @@ -64,12 +75,13 @@ make FLAGS=CleanAll 清理编译 ## 测试服务器 地址:app.xyry.org 或者 159.75.200.173 -端口:tcp端口 5300,websocket端口 5301,传输验证密码:无加密 +端口:tcp端口 5300,websocket端口 5301,http管理端 5302,传输验证密码:无加密 ## 程序截图 ![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/1.png "在这里输入图片标题") ![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/2.png "在这里输入图片标题") ![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/3.png "在这里输入图片标题") +![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/4.png "在这里输入图片标题") ## 参与贡献 @@ -78,6 +90,11 @@ make FLAGS=CleanAll 清理编译 3. 提交代码 4. 新建 Pull Request +## 发展历程 +V1版本为XEngine组件.大部分代码集中在XEngine中 +V2版本单独出来了所有相关模块,单独开发 +V3版本为全新版本,为了适应过多环境要求开发 + ## 授权说明 使用此软件必须开源并且注明出处,如果想闭源商用,那么需要经过作者授权. @@ -89,13 +106,14 @@ make FLAGS=CleanAll 清理编译 如果你有问题,可以在issues中提交 ## 开发计划 +功能启用关闭(注册,登录,等) mfc转qt界面库(我们需要会Qt的人员加入一起开发) 支持多端登录 +多端登录合并用时 生成会话TOKEN分布式鉴权 支持OAuth验证 mysql支持 列表数据分割,用于大型服务器 -支持第三方用户密码验证 支持用户和硬件绑定同时验证 支持自定义序列号插入导入 统计用户所有在线时间 \ No newline at end of file diff --git a/XEngine_Apps/Authorize_APPClient.e b/XEngine_Apps/Authorize_APPClient.e index 747ee5e..e830e99 100644 Binary files a/XEngine_Apps/Authorize_APPClient.e and b/XEngine_Apps/Authorize_APPClient.e differ diff --git a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp index 1cc32d8..f51e403 100644 --- a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp +++ b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp @@ -109,7 +109,7 @@ int AuthClient_Register() st_JsonUserInfo["tszEMailAddr"] = lpszEmail; st_JsonUserInfo["nPhoneNumber"] = nPhoneNumber; st_JsonUserInfo["nIDNumber"] = nIDNumber; - st_JsonUserInfo["nIDNumber"] = nIDNumber; + st_JsonUserInfo["nUserLevel"] = 5; st_JsonUserTable["tszHardCode"] = "2FDWAD02JD2091"; st_JsonUserTable["st_UserInfo"] = st_JsonUserInfo; diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index 1400d33..8b7ff40 100644 Binary files a/XEngine_Docment/Docment_en.docx and b/XEngine_Docment/Docment_en.docx differ diff --git a/XEngine_Docment/Docment_zh.docx b/XEngine_Docment/Docment_zh.docx index 0cc83ae..acb9b9a 100644 Binary files a/XEngine_Docment/Docment_zh.docx and b/XEngine_Docment/Docment_zh.docx differ diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 25a09e4..f61fe54 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -20,6 +20,17 @@ "nTryTime":5, "nTryMode":1 }, + "XLogin":{ + "bMultiLogin":true, + "bHTTPAuth":false, + "bPassAuth":false, + "nHTTPAuthTime":10, + "st_PassUrl":{ + "tszPassLogin":"http://127.0.0.1:5303/auth/pass/login", + "tszPassLogout":"http://127.0.0.1:5303/auth/pass/logout", + "tszPassTimeout":"http://127.0.0.1:5303/auth/pass/timeout" + } + }, "XCrypto":{ "bEnable":false, "nPass":123123 @@ -34,6 +45,7 @@ "LogLeave":32 }, "XVer":[ + "V3.2.0.1001 Build20220923", "V3.1.0.1001 Build20220826", "V3.0.0.1001 Build20220816", "V2.8.0.1001 Build20220809", @@ -47,6 +59,20 @@ "V2.4.0.1001 Build20211105", "V2.3.0.1001 Build20211022", "V2.2.0.1001 Build20210806", - "V1.0.0.1001 Build20210501" + "V2.1.0.1001 Build20210801", + "V2.0.0.1001 Build20210723", + "V1.11.0.1001 Build20210618", + "V1.10.0.1001 Build20210524", + "V1.9.0.1001 Build20210503", + "V1.9.0.1001 Build20210423", + "V1.8.0.1001 Build20210209", + "V1.7.0.1001 Build20210116", + "V1.6.0.1001 Build20190601", + "V1.5.0.1001 Build20190522", + "V1.4.0.1001 Build20190308", + "V1.3.0.1001 Build20141030", + "V1.2.0.1001 Build20140907", + "V1.1.0.1001 Build20110320", + "V1.0.0.1001 Build20110306" ] } \ No newline at end of file diff --git a/XEngine_Release/XEngine_CryptKey/.gitignore b/XEngine_Release/XEngine_CryptKey/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h index c9d2c83..d4dd067 100644 --- a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h +++ b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h @@ -38,6 +38,19 @@ typedef struct int nTryTime; //验证时间 int nTryMode; //验证模式 }st_XVerification; + struct + { + BOOL bMultiLogin; //是否允许多端登录 + BOOL bHTTPAuth; //是否开启HTTP授权登录,支持HTTP授权验证 + BOOL bPassAuth; //是否启用三方认证 + int nHTTPAuthTime; //HTTP验证超时时间,单位秒 + struct + { + TCHAR tszPassLogin[MAX_PATH]; //三方认证登录验证 + TCHAR tszPassLogout[MAX_PATH]; //三方认证登出通知 + TCHAR tszPassTimeout[MAX_PATH]; //三方认证超时通知 + }st_PassUrl; + }st_XLogin; struct { BOOL bEnable; //是否启用加密传输 diff --git a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 1a286aa..bcaa799 100644 --- a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -114,6 +114,23 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE pSt_ServerConfig->st_XVerification.nVerMode = st_JsonXVerification["nVerMode"].asInt(); pSt_ServerConfig->st_XVerification.nTryTime = st_JsonXVerification["nTryTime"].asInt(); pSt_ServerConfig->st_XVerification.nTryMode = st_JsonXVerification["nTryMode"].asInt(); + //登录配置 + if (st_JsonRoot["XLogin"].empty() || (5 != st_JsonRoot["XLogin"].size())) + { + Config_IsErrorOccur = TRUE; + Config_dwErrorCode = ERROR_AUTHORIZE_MODULE_CONFIGURE_XVER; + return FALSE; + } + Json::Value st_JsonXLogin = st_JsonRoot["XLogin"]; + pSt_ServerConfig->st_XLogin.bMultiLogin = st_JsonXLogin["bMultiLogin"].asBool(); + pSt_ServerConfig->st_XLogin.bHTTPAuth = st_JsonXLogin["bHTTPAuth"].asBool(); + pSt_ServerConfig->st_XLogin.bPassAuth = st_JsonXLogin["bPassAuth"].asBool(); + pSt_ServerConfig->st_XLogin.nHTTPAuthTime = st_JsonXLogin["nHTTPAuthTime"].asInt(); + + Json::Value st_JsonXLoginUrl = st_JsonXLogin["st_PassUrl"]; + _tcscpy(pSt_ServerConfig->st_XLogin.st_PassUrl.tszPassLogin, st_JsonXLoginUrl["tszPassLogin"].asCString()); + _tcscpy(pSt_ServerConfig->st_XLogin.st_PassUrl.tszPassLogout, st_JsonXLoginUrl["tszPassLogout"].asCString()); + _tcscpy(pSt_ServerConfig->st_XLogin.st_PassUrl.tszPassTimeout, st_JsonXLoginUrl["tszPassTimeout"].asCString()); //加密配置 if (st_JsonRoot["XCrypto"].empty() || (2 != st_JsonRoot["XCrypto"].size())) { diff --git a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp index 7fa2874..15e2563 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp @@ -165,7 +165,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,5,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); + _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); if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) { SQLPacket_IsErrorOccur = TRUE; diff --git a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def index af5d280..4199611 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def +++ b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def @@ -21,4 +21,5 @@ EXPORTS Protocol_Parse_HttpParseTable Protocol_Parse_HttpParseSerial Protocol_Parse_HttpParseSerial2 - Protocol_Parse_HttpParseOnline \ No newline at end of file + Protocol_Parse_HttpParseOnline + Protocol_Parse_HttpParseTime \ 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 9a9a648..3dbe0ab 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h @@ -506,4 +506,28 @@ extern "C" BOOL Protocol_Parse_HttpParseSerial2(LPCTSTR lpszMsgBuffer, int nMsgL 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL Protocol_Parse_HttpParseOnline(LPCTSTR lpszMsgBuffer, int nMsgLen, BOOL* pbOnline); \ No newline at end of file +extern "C" BOOL Protocol_Parse_HttpParseOnline(LPCTSTR lpszMsgBuffer, int nMsgLen, BOOL* pbOnline); +/******************************************************************** +函数名称:Protocol_Parse_HttpParseTime +函数功能:解析时间信息结构 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的缓冲区 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入要解析的大小 + 参数.三:pSt_ProtocolTime + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:导出解析的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL Protocol_Parse_HttpParseTime(LPCTSTR lpszMsgBuffer, int nMsgLen, AUTHREG_PROTOCOL_TIME* pSt_ProtocolTime); \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp index 89c2986..948cd6e 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp @@ -227,6 +227,7 @@ BOOL CProtocol_Packet::Protocol_Packet_HttpUserTime(TCHAR* ptszMsgBuffer, int* p st_JsonObject["nTimeONLine"] = (Json::Value::Int64)pSt_ProtocolTime->nTimeONLine; st_JsonObject["enDeviceType"] = pSt_ProtocolTime->enDeviceType; st_JsonObject["enSerialType"] = pSt_ProtocolTime->enSerialType; + st_JsonObject["nNetType"] = pSt_ProtocolTime->nNetType; st_JsonRoot["st_UserTime"] = st_JsonObject; diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp index bf589bc..2ebaba6 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp @@ -679,4 +679,84 @@ BOOL CProtocol_Parse::Protocol_Parse_HttpParseOnline(LPCTSTR lpszMsgBuffer, int *pbOnline = st_JsonRoot["Online"].asBool(); return TRUE; +} +/******************************************************************** +函数名称:Protocol_Parse_HttpParseTime +函数功能:解析时间信息结构 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的缓冲区 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入要解析的大小 + 参数.三:pSt_ProtocolTime + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:导出解析的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CProtocol_Parse::Protocol_Parse_HttpParseTime(LPCTSTR lpszMsgBuffer, int nMsgLen, AUTHREG_PROTOCOL_TIME* pSt_ProtocolTime) +{ + Protocol_IsErrorOccur = FALSE; + + if ((NULL == lpszMsgBuffer) || (NULL == pSt_ProtocolTime)) + { + 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; + } + Json::Value st_JsonProtocol = st_JsonRoot["st_UserTime"]; + + if (!st_JsonProtocol["enSerialType"].isNull()) + { + pSt_ProtocolTime->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)st_JsonProtocol["enSerialType"].asInt(); + } + if (!st_JsonProtocol["enDeviceType"].isNull()) + { + pSt_ProtocolTime->enDeviceType = (ENUM_PROTOCOLDEVICE_TYPE)st_JsonProtocol["enDeviceType"].asInt(); + } + if (!st_JsonProtocol["nNetType"].isNull()) + { + pSt_ProtocolTime->nNetType = st_JsonProtocol["nNetType"].asInt(); + } + if (!st_JsonProtocol["nTimeLeft"].isNull()) + { + pSt_ProtocolTime->nTimeLeft = (ENUM_PROTOCOLCLIENT_TYPE)st_JsonProtocol["nTimeLeft"].asInt64(); + } + if (!st_JsonProtocol["nTimeONLine"].isNull()) + { + pSt_ProtocolTime->nTimeONLine = (ENUM_PROTOCOLCLIENT_TYPE)st_JsonProtocol["nTimeONLine"].asInt64(); + } + if (!st_JsonProtocol["tszLeftTime"].isNull()) + { + _tcscpy(pSt_ProtocolTime->tszLeftTime, st_JsonProtocol["tszLeftTime"].asCString()); + } + if (!st_JsonProtocol["tszUserAddr"].isNull()) + { + _tcscpy(pSt_ProtocolTime->tszUserAddr, st_JsonProtocol["tszUserAddr"].asCString()); + } + if (!st_JsonProtocol["tszUserName"].isNull()) + { + _tcscpy(pSt_ProtocolTime->tszUserName, st_JsonProtocol["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 f2071d9..d189f54 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.h +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.h @@ -28,6 +28,7 @@ class CProtocol_Parse BOOL Protocol_Parse_HttpParseSerial(LPCTSTR lpszMsgBuffer, int nMsgLen, AUTHREG_SERIALTABLE*** pppSt_SerialTable, int* pInt_ListCount); BOOL Protocol_Parse_HttpParseSerial2(LPCTSTR lpszMsgBuffer, int nMsgLen, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE* penSerialType, int* pInt_NumberCount, int* pInt_SerialCount, TCHAR* ptszHasTime); BOOL Protocol_Parse_HttpParseOnline(LPCTSTR lpszMsgBuffer, int nMsgLen, BOOL* pbOnline); + BOOL Protocol_Parse_HttpParseTime(LPCTSTR lpszMsgBuffer, int nMsgLen, AUTHREG_PROTOCOL_TIME* pSt_ProtocolTime); 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 47d30ad..09a4ae1 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/pch.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/pch.cpp @@ -105,4 +105,8 @@ extern "C" BOOL Protocol_Parse_HttpParseSerial2(LPCTSTR lpszMsgBuffer, int nMsgL extern "C" BOOL Protocol_Parse_HttpParseOnline(LPCTSTR lpszMsgBuffer, int nMsgLen, BOOL * pbOnline) { return m_ProtocolParse.Protocol_Parse_HttpParseOnline(lpszMsgBuffer, nMsgLen, pbOnline); +} +extern "C" BOOL Protocol_Parse_HttpParseTime(LPCTSTR lpszMsgBuffer, int nMsgLen, AUTHREG_PROTOCOL_TIME * pSt_ProtocolTime) +{ + return m_ProtocolParse.Protocol_Parse_HttpParseTime(lpszMsgBuffer, nMsgLen, pSt_ProtocolTime); } \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Session/AuthorizeModule_Session.def b/XEngine_Source/AuthorizeModule_Session/AuthorizeModule_Session.def index 2f345f8..620b350 100644 --- a/XEngine_Source/AuthorizeModule_Session/AuthorizeModule_Session.def +++ b/XEngine_Source/AuthorizeModule_Session/AuthorizeModule_Session.def @@ -5,7 +5,7 @@ EXPORTS Session_Authorize_Init Session_Authorize_GetClient - Session_Authorize_GetTimer + Session_Authorize_GetClientForUser Session_Authorize_GetAddrForUser Session_Authorize_GetUserForAddr Session_Authorize_CloseClient diff --git a/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp b/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp index d3c142e..877043e 100644 --- a/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp +++ b/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp @@ -135,28 +135,28 @@ BOOL CSession_Authorize::Session_Authorize_GetClient(AUTHSESSION_NETCLIENT*** pp return TRUE; } /******************************************************************** -函数名称:Session_Authorize_GetTimer -函数功能:获取客户端时间信息 +函数名称:Session_Authorize_GetClientForUser +函数功能:获取客户端信息 参数.一:lpszUserName In/Out:In 类型:常量字符指针 可空:N 意思:输入要查找用户名 - 参数.二:pSt_AuthTime + 参数.二:pSt_Client In/Out:Out 类型:数据结构指针 可空:N - 意思:用户时间信息结构体 + 意思:用户信息结构体 返回值 类型:逻辑型 意思:是否获取成功 备注:通过卡类型来判断导出的时间是分钟还是天 *********************************************************************/ -BOOL CSession_Authorize::Session_Authorize_GetTimer(LPCTSTR lpszUserName,AUTHREG_PROTOCOL_TIME *pSt_AuthTime) +BOOL CSession_Authorize::Session_Authorize_GetClientForUser(LPCTSTR lpszUserName, AUTHSESSION_NETCLIENT* pSt_Client) { Session_IsErrorOccur = FALSE; - if ((NULL == lpszUserName) || (NULL == pSt_AuthTime)) + if ((NULL == lpszUserName) || (NULL == pSt_Client)) { Session_IsErrorOccur = TRUE; Session_dwErrorCode = ERROR_AUTHORIZE_MODULE_SESSION_PARAMENT; @@ -171,13 +171,7 @@ BOOL CSession_Authorize::Session_Authorize_GetTimer(LPCTSTR lpszUserName,AUTHREG st_Locker.unlock_shared(); return FALSE; } - pSt_AuthTime->nTimeLeft = stl_MapIterator->second.nLeftTime; - pSt_AuthTime->nTimeONLine = stl_MapIterator->second.nOnlineTime; - pSt_AuthTime->enSerialType = stl_MapIterator->second.st_UserTable.enSerialType; - - _tcscpy(pSt_AuthTime->tszUserName, lpszUserName); - _tcscpy(pSt_AuthTime->tszLeftTime, stl_MapIterator->second.tszLeftTime); - _tcscpy(pSt_AuthTime->tszUserAddr, stl_MapIterator->second.tszClientAddr); + *pSt_Client = stl_MapIterator->second; st_Locker.unlock_shared(); return TRUE; @@ -339,12 +333,17 @@ BOOL CSession_Authorize::Session_Authorize_Destroy() 类型:数据结构指针 可空:N 意思:用户传递的协议数据 + 参数.三:nNetType + In/Out:In + 类型:整数型 + 可空:Y + 意思:用户连接的类型 返回值 类型:逻辑型 意思:是否允许登陆 备注:如果成功,服务器会自动进行计时 *********************************************************************/ -BOOL CSession_Authorize::Session_Authorize_Insert(LPCTSTR lpszClientAddr, AUTHREG_USERTABLE *pSt_UserTable) +BOOL CSession_Authorize::Session_Authorize_Insert(LPCTSTR lpszClientAddr, AUTHREG_USERTABLE *pSt_UserTable, int nNetType) { Session_IsErrorOccur = FALSE; @@ -369,6 +368,7 @@ BOOL CSession_Authorize::Session_Authorize_Insert(LPCTSTR lpszClientAddr, AUTHRE AUTHSESSION_NETCLIENT st_Client; memset(&st_Client,'\0',sizeof(AUTHSESSION_NETCLIENT)); + st_Client.nNetType = nNetType; BaseLib_OperatorTime_GetSysTime(&st_Client.st_LibTimer); _tcscpy(st_Client.tszClientAddr,lpszClientAddr); memcpy(&st_Client.st_UserTable, pSt_UserTable, sizeof(AUTHREG_USERTABLE)); @@ -463,6 +463,7 @@ XHTHREAD CSession_Authorize::Session_Authorize_ActiveThread(LPVOID lParam) stl_MapIterator->second.nOnlineTime = nOnlineSpan; //赋值给回调函数 st_ProtocolTimer.nTimeONLine = nOnlineSpan; + st_ProtocolTimer.nNetType = stl_MapIterator->second.nNetType; st_ProtocolTimer.nTimeLeft = stl_MapIterator->second.nLeftTime; st_ProtocolTimer.enSerialType = stl_MapIterator->second.st_UserTable.enSerialType; st_ProtocolTimer.enDeviceType = stl_MapIterator->second.st_UserTable.enDeviceType; @@ -480,6 +481,7 @@ XHTHREAD CSession_Authorize::Session_Authorize_ActiveThread(LPVOID lParam) _stprintf(stl_MapIterator->second.tszLeftTime, _T("%lld"), stl_MapIterator->second.nLeftTime); //次数处理不做任何时间操作 st_ProtocolTimer.nTimeONLine = nOnlineSpan; + st_ProtocolTimer.nNetType = stl_MapIterator->second.nNetType; st_ProtocolTimer.nTimeLeft = stl_MapIterator->second.nLeftTime; st_ProtocolTimer.enSerialType = stl_MapIterator->second.st_UserTable.enSerialType; st_ProtocolTimer.enDeviceType = stl_MapIterator->second.st_UserTable.enDeviceType; @@ -511,6 +513,7 @@ XHTHREAD CSession_Authorize::Session_Authorize_ActiveThread(LPVOID lParam) st_ProtocolTimer.nTimeONLine = nOnlineSpan; st_ProtocolTimer.nTimeLeft = nLeftTime; + st_ProtocolTimer.nNetType = stl_MapIterator->second.nNetType; st_ProtocolTimer.enSerialType = stl_MapIterator->second.st_UserTable.enSerialType; st_ProtocolTimer.enDeviceType = stl_MapIterator->second.st_UserTable.enDeviceType; _tcscpy(st_ProtocolTimer.tszLeftTime, stl_MapIterator->second.st_UserTable.tszLeftTime); @@ -527,7 +530,7 @@ XHTHREAD CSession_Authorize::Session_Authorize_ActiveThread(LPVOID lParam) list::iterator stl_ListIterator = stl_ListNotify.begin(); for (; stl_ListIterator != stl_ListNotify.end(); stl_ListIterator++) { - pClass_This->lpCall_AuthregEvents(stl_ListIterator->tszUserAddr, stl_ListIterator->tszUserName, stl_ListIterator->nTimeONLine, stl_ListIterator->nTimeLeft, stl_ListIterator->tszLeftTime, stl_ListIterator->enSerialType, stl_ListIterator->enDeviceType, pClass_This->m_lParam); + pClass_This->lpCall_AuthregEvents(stl_ListIterator->tszUserAddr, stl_ListIterator->tszUserName, stl_ListIterator->nTimeONLine, stl_ListIterator->nTimeLeft, stl_ListIterator->tszLeftTime, stl_ListIterator->enSerialType, stl_ListIterator->enDeviceType, stl_ListIterator->nNetType, pClass_This->m_lParam); } stl_ListNotify.clear(); //清理元素 } diff --git a/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.h b/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.h index 1eccb0c..8ec8228 100644 --- a/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.h +++ b/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.h @@ -19,13 +19,13 @@ class CSession_Authorize public: BOOL Session_Authorize_Init(CALLBACK_XENGIEN_AUTHORIZE_SESSION_CLIENT_EVENTS fpCall_AuthEvent,LPVOID lParam = NULL); BOOL Session_Authorize_GetClient(AUTHSESSION_NETCLIENT*** pppSt_ListClient, int* pInt_ListCount, LPCTSTR lpszClientAddr = NULL); - BOOL Session_Authorize_GetTimer(LPCTSTR lpszUserName, AUTHREG_PROTOCOL_TIME* pSt_AuthTime); + BOOL Session_Authorize_GetClientForUser(LPCTSTR lpszUserName, AUTHSESSION_NETCLIENT* pSt_Client); BOOL Session_Authorize_GetAddrForUser(LPCTSTR lpszClientUser,TCHAR *ptszClientAddr); BOOL Session_Authorize_GetUserForAddr(LPCTSTR lpszClientAddr, TCHAR *ptszClientUser); BOOL Session_Authorize_CloseClient(LPCTSTR lpszClientAddr); BOOL Session_Authorize_Destroy(); public: - BOOL Session_Authorize_Insert(LPCTSTR lpszClientAddr, AUTHREG_USERTABLE* pSt_UserTable); + BOOL Session_Authorize_Insert(LPCTSTR lpszClientAddr, AUTHREG_USERTABLE* pSt_UserTable, int nNetType = 0); BOOL Session_Authorize_SetUser(AUTHREG_USERTABLE* pSt_UserTable); protected: static XHTHREAD Session_Authorize_ActiveThread(LPVOID lParam); //计时器线程 diff --git a/XEngine_Source/AuthorizeModule_Session/Session_Define.h b/XEngine_Source/AuthorizeModule_Session/Session_Define.h index 8b88d16..adf0015 100644 --- a/XEngine_Source/AuthorizeModule_Session/Session_Define.h +++ b/XEngine_Source/AuthorizeModule_Session/Session_Define.h @@ -18,12 +18,13 @@ typedef struct TCHAR tszLeftTime[64]; //过期日期 __int64x nOnlineTime; //在线时间 __int64x nLeftTime; //剩余时间 + int nNetType; //连接类型 }AUTHSESSION_NETCLIENT, * LPAUTHSESSION_NETCLIENT; ////////////////////////////////////////////////////////////////////////// // 导出的回调函数 ////////////////////////////////////////////////////////////////////////// //用户在线时间事件回调处理函数,用户名 在线时间 剩余时间(分,天) 注册的卡类型 自定义参数 -typedef void(CALLBACK* CALLBACK_XENGIEN_AUTHORIZE_SESSION_CLIENT_EVENTS)(LPCSTR lpszUserAddr, LPCSTR lpszUserName, __int64x nOnlineTimer, __int64x nLeftTimer, LPCSTR lpszLeftDate, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType, ENUM_PROTOCOLDEVICE_TYPE enDeviceType, LPVOID lParam); +typedef void(CALLBACK* CALLBACK_XENGIEN_AUTHORIZE_SESSION_CLIENT_EVENTS)(LPCSTR lpszUserAddr, LPCSTR lpszUserName, __int64x nOnlineTimer, __int64x nLeftTimer, LPCSTR lpszLeftDate, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType, ENUM_PROTOCOLDEVICE_TYPE enDeviceType, int nNetType, LPVOID lParam); typedef void(CALLBACK* CALLBACK_XENGIEN_AUTHORIZE_SESSION_TOKEN_EVENTS)(XNETHANDLE xhToken, LPVOID lParam); ////////////////////////////////////////////////////////////////////////// // 导出的函数 @@ -76,24 +77,24 @@ extern "C" BOOL Session_Authorize_Init(CALLBACK_XENGIEN_AUTHORIZE_SESSION_CLIENT *********************************************************************/ extern "C" BOOL Session_Authorize_GetClient(AUTHSESSION_NETCLIENT * **pppSt_ListClient, int* pInt_ListCount, LPCSTR lpszClientAddr = NULL); /******************************************************************** -函数名称:Session_Authorize_GetTimer -函数功能:获取客户端时间信息 +函数名称:Session_Authorize_GetClientForUser +函数功能:获取客户端信息 参数.一:lpszUserName In/Out:In 类型:常量字符指针 可空:N 意思:输入要查找用户名 - 参数.二:pSt_AuthTime + 参数.二:pSt_Client In/Out:Out 类型:数据结构指针 可空:N - 意思:用户时间信息结构体 + 意思:用户信息结构体 返回值 类型:逻辑型 意思:是否获取成功 备注:通过卡类型来判断导出的时间是分钟还是天 *********************************************************************/ -extern "C" BOOL Session_Authorize_GetTimer(LPCSTR lpszUserName,AUTHREG_PROTOCOL_TIME *pSt_AuthTime); +extern "C" BOOL Session_Authorize_GetClientForUser(LPCTSTR lpszUserName, AUTHSESSION_NETCLIENT * pSt_Client); /******************************************************************** 函数名称:Session_Authorize_GetAddrForUser 函数功能:通过用户名获取对应地址 @@ -168,12 +169,17 @@ extern "C" BOOL Session_Authorize_Destroy(); 类型:数据结构指针 可空:N 意思:用户传递的协议数据 + 参数.三:nNetType + In/Out:In + 类型:整数型 + 可空:Y + 意思:用户连接的类型 返回值 类型:逻辑型 意思:是否允许登陆 备注:如果成功,服务器会自动进行计时 *********************************************************************/ -extern "C" BOOL Session_Authorize_Insert(LPCSTR lpszClientAddr, AUTHREG_USERTABLE * pSt_UserTable); +extern "C" BOOL Session_Authorize_Insert(LPCSTR lpszClientAddr, AUTHREG_USERTABLE * pSt_UserTable, int nNetType = 0); /******************************************************************** 函数名称:Session_Authorize_SetUser 函数功能:设置用户信息 @@ -237,12 +243,17 @@ extern "C" BOOL Session_Token_Destroy(); 类型:数据结构指针 可空:N 意思:用户信息表 + 参数.三:nTimeout + In/Out:In + 类型:整数型 + 可空:Y + 意思:大于0单独指定TOKEN超时时间 返回值 类型:逻辑型 意思:是否允许登陆 备注: *********************************************************************/ -extern "C" BOOL Session_Token_Insert(XNETHANDLE xhToken, AUTHREG_USERTABLE* pSt_UserTable); +extern "C" BOOL Session_Token_Insert(XNETHANDLE xhToken, AUTHREG_USERTABLE* pSt_UserTable, int nTimeout = 0); /******************************************************************** 函数名称:Session_Token_Delete 函数功能:移除一个客户端 @@ -303,9 +314,14 @@ extern "C" BOOL Session_Token_Get(XNETHANDLE xhToken, AUTHREG_USERTABLE* pSt_Use 类型:常量字符指针 可空:N 意思:密码 + 参数.三:pxhToken + In/Out:Out + 类型:句柄 + 可空:N + 意思:导出获取到的句柄 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL Session_Token_GetUser(LPCTSTR lpszUser, LPCTSTR lpszPass); \ No newline at end of file +extern "C" BOOL Session_Token_GetUser(LPCTSTR lpszUser, LPCTSTR lpszPass, XNETHANDLE * pxhToken); \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Session/Session_Token/Session_Token.cpp b/XEngine_Source/AuthorizeModule_Session/Session_Token/Session_Token.cpp index 2a67927..2e34e0a 100644 --- a/XEngine_Source/AuthorizeModule_Session/Session_Token/Session_Token.cpp +++ b/XEngine_Source/AuthorizeModule_Session/Session_Token/Session_Token.cpp @@ -107,12 +107,17 @@ BOOL CSession_Token::Session_Token_Destroy() 类型:数据结构指针 可空:N 意思:用户信息表 + 参数.三:nTimeout + In/Out:In + 类型:整数型 + 可空:Y + 意思:大于0单独指定TOKEN超时时间 返回值 类型:逻辑型 意思:是否允许登陆 备注: *********************************************************************/ -BOOL CSession_Token::Session_Token_Insert(XNETHANDLE xhToken, AUTHREG_USERTABLE* pSt_UserTable) +BOOL CSession_Token::Session_Token_Insert(XNETHANDLE xhToken, AUTHREG_USERTABLE* pSt_UserTable, int nTimeout /* = 0 */) { Session_IsErrorOccur = FALSE; @@ -125,6 +130,7 @@ BOOL CSession_Token::Session_Token_Insert(XNETHANDLE xhToken, AUTHREG_USERTABLE* AUTHSESSION_TOKENCLIENT st_TokenClient; memset(&st_TokenClient,'\0',sizeof(AUTHSESSION_TOKENCLIENT)); + st_TokenClient.nOnlineTime = nTimeout; BaseLib_OperatorTime_GetSysTime(&st_TokenClient.st_LibTimer); memcpy(&st_TokenClient.st_UserTable, pSt_UserTable, sizeof(AUTHREG_USERTABLE)); @@ -230,7 +236,7 @@ BOOL CSession_Token::Session_Token_Get(XNETHANDLE xhToken, AUTHREG_USERTABLE* pS } /******************************************************************** 函数名称:Session_Token_GetUser -函数功能:获取用户是否存在 +函数功能:获取用户的TOKEN 参数.一:lpszUser In/Out:In 类型:常量字符指针 @@ -241,12 +247,17 @@ BOOL CSession_Token::Session_Token_Get(XNETHANDLE xhToken, AUTHREG_USERTABLE* pS 类型:常量字符指针 可空:N 意思:密码 + 参数.三:pxhToken + In/Out:Out + 类型:句柄 + 可空:N + 意思:导出获取到的句柄 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -BOOL CSession_Token::Session_Token_GetUser(LPCTSTR lpszUser, LPCTSTR lpszPass) +BOOL CSession_Token::Session_Token_GetUser(LPCTSTR lpszUser, LPCTSTR lpszPass, XNETHANDLE* pxhToken) { Session_IsErrorOccur = FALSE; @@ -267,16 +278,17 @@ BOOL CSession_Token::Session_Token_GetUser(LPCTSTR lpszUser, LPCTSTR lpszPass) //密码,验证密码防治冲突 if (0 == _tcsncmp(lpszPass, stl_MapIterator->second.st_UserTable.st_UserInfo.tszUserPass, _tcslen(lpszPass))) { + *pxhToken = stl_MapIterator->first; bFound = TRUE; break; } } } st_Locker.unlock_shared(); - if (bFound) + if (!bFound) { Session_IsErrorOccur = TRUE; - Session_dwErrorCode = ERROR_AUTHORIZE_MODULE_SESSION_EXIST; + Session_dwErrorCode = ERROR_AUTHORIZE_MODULE_SESSION_NOTFOUND; return FALSE; } return TRUE; @@ -301,9 +313,19 @@ XHTHREAD CSession_Token::Session_Token_Thread(LPVOID lParam) __int64x nOnlineSpan = 0; //在线时间 //用户登录了多少秒 BaseLib_OperatorTimeSpan_GetForStu(&stl_MapIterator->second.st_LibTimer, &st_LibTimer, &nOnlineSpan, ENUM_XENGINE_BASELIB_TIME_SPAN_TYPE_SECOND); - if (nOnlineSpan > pClass_This->m_nTimeout) + if (stl_MapIterator->second.nTimeout > 0) + { + if (nOnlineSpan > stl_MapIterator->second.nTimeout) + { + stl_ListNotify.push_back(stl_MapIterator->first); + } + } + else { - stl_ListNotify.push_back(stl_MapIterator->first); + if (nOnlineSpan > pClass_This->m_nTimeout) + { + stl_ListNotify.push_back(stl_MapIterator->first); + } } } pClass_This->st_Locker.unlock_shared(); diff --git a/XEngine_Source/AuthorizeModule_Session/Session_Token/Session_Token.h b/XEngine_Source/AuthorizeModule_Session/Session_Token/Session_Token.h index 50c654b..44147d5 100644 --- a/XEngine_Source/AuthorizeModule_Session/Session_Token/Session_Token.h +++ b/XEngine_Source/AuthorizeModule_Session/Session_Token/Session_Token.h @@ -12,9 +12,10 @@ *********************************************************************/ typedef struct { - AUTHREG_USERTABLE st_UserTable; //用户表 + AUTHREG_USERTABLE st_UserTable; //用户表 XENGINE_LIBTIMER st_LibTimer; //登录时间结构 __int64x nOnlineTime; //在线时间 + int nTimeout; //单独指定超时 }AUTHSESSION_TOKENCLIENT, * LPAUTHSESSION_TOKENCLIENT; ////////////////////////////////////////////////////////////////////////// class CSession_Token @@ -25,11 +26,11 @@ class CSession_Token public: BOOL Session_Token_Init(int nTimeout, CALLBACK_XENGIEN_AUTHORIZE_SESSION_TOKEN_EVENTS fpCall_AuthEvent, LPVOID lParam = NULL); BOOL Session_Token_Destroy(); - BOOL Session_Token_Insert(XNETHANDLE xhToken, AUTHREG_USERTABLE* pSt_UserTable); + BOOL Session_Token_Insert(XNETHANDLE xhToken, AUTHREG_USERTABLE* pSt_UserTable, int nTimeout = 0); BOOL Session_Token_Delete(XNETHANDLE xhToken); BOOL Session_Token_UPDate(XNETHANDLE xhToken); BOOL Session_Token_Get(XNETHANDLE xhToken, AUTHREG_USERTABLE* pSt_UserTable = NULL); - BOOL Session_Token_GetUser(LPCTSTR lpszUser, LPCTSTR lpszPass); + BOOL Session_Token_GetUser(LPCTSTR lpszUser, LPCTSTR lpszPass, XNETHANDLE* pxhToken); protected: static XHTHREAD Session_Token_Thread(LPVOID lParam); private: diff --git a/XEngine_Source/AuthorizeModule_Session/pch.cpp b/XEngine_Source/AuthorizeModule_Session/pch.cpp index 0382e0c..6e0ac0e 100644 --- a/XEngine_Source/AuthorizeModule_Session/pch.cpp +++ b/XEngine_Source/AuthorizeModule_Session/pch.cpp @@ -39,9 +39,9 @@ extern "C" BOOL Session_Authorize_GetClient(AUTHSESSION_NETCLIENT * **pppSt_List { return m_SessionAuth.Session_Authorize_GetClient(pppSt_ListClient, pInt_ListCount, lpszClientAddr); } -extern "C" BOOL Session_Authorize_GetTimer(LPCTSTR lpszUserName, AUTHREG_PROTOCOL_TIME * pSt_AuthTime) +extern "C" BOOL Session_Authorize_GetClientForUser(LPCTSTR lpszUserName, AUTHSESSION_NETCLIENT * pSt_Client) { - return m_SessionAuth.Session_Authorize_GetTimer(lpszUserName, pSt_AuthTime); + return m_SessionAuth.Session_Authorize_GetClientForUser(lpszUserName, pSt_Client); } extern "C" BOOL Session_Authorize_GetAddrForUser(LPCTSTR lpszClientUser, TCHAR * ptszClientAddr) { @@ -59,9 +59,9 @@ extern "C" BOOL Session_Authorize_Destroy() { return m_SessionAuth.Session_Authorize_Destroy(); } -extern "C" BOOL Session_Authorize_Insert(LPCTSTR lpszClientAddr, AUTHREG_USERTABLE * pSt_UserTable) +extern "C" BOOL Session_Authorize_Insert(LPCTSTR lpszClientAddr, AUTHREG_USERTABLE * pSt_UserTable, int nNetType) { - return m_SessionAuth.Session_Authorize_Insert(lpszClientAddr, pSt_UserTable); + return m_SessionAuth.Session_Authorize_Insert(lpszClientAddr, pSt_UserTable, nNetType); } extern "C" BOOL Session_Authorize_SetUser(AUTHREG_USERTABLE * pSt_UserTable) { @@ -78,9 +78,9 @@ extern "C" BOOL Session_Token_Destroy() { return m_SessionToken.Session_Token_Destroy(); } -extern "C" BOOL Session_Token_Insert(XNETHANDLE xhToken, AUTHREG_USERTABLE * pSt_UserTable) +extern "C" BOOL Session_Token_Insert(XNETHANDLE xhToken, AUTHREG_USERTABLE * pSt_UserTable, int nTimeout) { - return m_SessionToken.Session_Token_Insert(xhToken, pSt_UserTable); + return m_SessionToken.Session_Token_Insert(xhToken, pSt_UserTable, nTimeout); } extern "C" BOOL Session_Token_Delete(XNETHANDLE xhToken) { @@ -94,7 +94,7 @@ extern "C" BOOL Session_Token_Get(XNETHANDLE xhToken, AUTHREG_USERTABLE * pSt_Us { return m_SessionToken.Session_Token_Get(xhToken, pSt_UserTable); } -extern "C" BOOL Session_Token_GetUser(LPCTSTR lpszUser, LPCTSTR lpszPass) +extern "C" BOOL Session_Token_GetUser(LPCTSTR lpszUser, LPCTSTR lpszPass, XNETHANDLE * pxhToken) { - return m_SessionToken.Session_Token_GetUser(lpszUser, lpszPass); + return m_SessionToken.Session_Token_GetUser(lpszUser, lpszPass, pxhToken); } \ No newline at end of file diff --git a/XEngine_Source/VSCopy_Debug.bat b/XEngine_Source/VSCopy_Debug.bat index 9aa792a..a828d99 100644 --- a/XEngine_Source/VSCopy_Debug.bat +++ b/XEngine_Source/VSCopy_Debug.bat @@ -9,6 +9,8 @@ copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_Packets.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_XLog.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_Authorize.dll" "./" -copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_SystemApi.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\RfcComponents_WSProtocol.dll" "./" -copy /y "D:\XEngine\XEngine_SourceCode\Debug\RfcComponents_HttpServer.dll" "./" \ No newline at end of file +copy /y "D:\XEngine\XEngine_SourceCode\Debug\RfcComponents_HttpServer.dll" "./" + +copy /y "D:\XEngine\XEngine_SourceCode\Debug\NetHelp_APIHelp.dll" "./" +copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_SystemApi.dll" "./" \ No newline at end of file diff --git a/XEngine_Source/XAuth_Protocol.h b/XEngine_Source/XAuth_Protocol.h index d268279..3403889 100644 --- a/XEngine_Source/XAuth_Protocol.h +++ b/XEngine_Source/XAuth_Protocol.h @@ -28,7 +28,6 @@ #define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPGETTIME 0x200C #define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQTRYVER 0x200D //临时验证协议请求 #define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPTRYVER 0x200E -#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_NOTIFYMSG 0x2FF0 //数据 #define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_TIMEDOUT 0x2FFF //通知客户端时间到期 ////////////////////////////////////////////////////////////////////////// // 导出的数据结构 @@ -47,8 +46,9 @@ typedef struct CHAR tszLeftTime[64]; //过期日期 __int64x nTimeLeft; //剩余时间 __int64x nTimeONLine; //在线时间 + int nNetType; //连接类型 ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType; - ENUM_PROTOCOLDEVICE_TYPE enDeviceType; + ENUM_PROTOCOLDEVICE_TYPE enDeviceType; }AUTHREG_PROTOCOL_TIME, * LPAUTHREG_PROTOCOL_TIME; //用户表 typedef struct tag_AuthReg_UserTable 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 2e1c0d3..ba71190 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 @@ -33,6 +33,10 @@ void CDialog_Config::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_BUTTON2, m_BtnLogout); DDX_Control(pDX, IDC_EDIT10, m_EditTimeout); DDX_Control(pDX, IDC_BUTTON5, m_BtnUpdate); + DDX_Control(pDX, IDC_RADIO1, m_CheckCodecEnable); + DDX_Control(pDX, IDC_RADIO2, m_CheckCodecDisable); + DDX_Control(pDX, IDC_COMBO2, m_ListEncrypto); + DDX_Control(pDX, IDC_EDIT6, m_EditPassword); } @@ -40,6 +44,8 @@ BEGIN_MESSAGE_MAP(CDialog_Config, CDialogEx) ON_BN_CLICKED(IDC_BUTTON1, &CDialog_Config::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, &CDialog_Config::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON5, &CDialog_Config::OnBnClickedButton5) + ON_BN_CLICKED(IDC_RADIO2, &CDialog_Config::OnBnClickedRadio2) + ON_BN_CLICKED(IDC_RADIO1, &CDialog_Config::OnBnClickedRadio1) END_MESSAGE_MAP() @@ -59,6 +65,16 @@ BOOL CDialog_Config::OnInitDialog() m_BtnLogout.EnableWindow(FALSE); m_BtnUpdate.EnableWindow(FALSE); + + m_CheckCodecEnable.SetCheck(BST_UNCHECKED); + m_CheckCodecDisable.SetCheck(BST_CHECKED); + m_ListEncrypto.AddString(_T("XCrypto(X加密)")); + m_ListEncrypto.SetCurSel(0); + m_ListEncrypto.EnableWindow(FALSE); + + m_EditPassword.SetWindowText("123123"); + m_EditPassword.EnableWindow(FALSE); + hConfigWnd = m_hWnd; return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE @@ -91,14 +107,31 @@ void CDialog_Config::OnBnClickedButton1() JSONCPP_STRING st_JsonError; Json::CharReaderBuilder st_ReaderBuilder; std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + if (BST_CHECKED == m_CheckCodecEnable.GetCheck()) { - AfxMessageBox(_T("登录失败,无法继续")); - return; + CString m_StrCodecPass; + TCHAR tszMsgBuffer[2048]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + m_EditPassword.GetWindowText(m_StrCodecPass); + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszMsgBuffer, m_StrCodecPass.GetBuffer()); + 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()) { - AfxMessageBox(_T("登录失败,无法继续")); + Authorize_Help_LogPrint(_T("登录失败,无法继续")); return; } m_StrToken.Format(_T("%lld"), st_JsonRoot["xhToken"].asUInt64()); @@ -106,11 +139,13 @@ void CDialog_Config::OnBnClickedButton1() m_EditTimeout.SetWindowText(st_JsonRoot["tszTimeEnd"].asCString()); BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - AfxMessageBox(_T("登录成功")); + Authorize_Help_LogPrint(_T("登录成功")); m_BtnLogin.EnableWindow(FALSE); m_BtnLogout.EnableWindow(TRUE); m_BtnUpdate.EnableWindow(TRUE); + + } @@ -137,14 +172,31 @@ void CDialog_Config::OnBnClickedButton2() JSONCPP_STRING st_JsonError; Json::CharReaderBuilder st_ReaderBuilder; std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + if (BST_CHECKED == m_CheckCodecEnable.GetCheck()) { - AfxMessageBox(_T("关闭失败,无法继续")); - return; + CString m_StrCodecPass; + TCHAR tszMsgBuffer[2048]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + m_EditPassword.GetWindowText(m_StrCodecPass); + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszMsgBuffer, m_StrCodecPass.GetBuffer()); + 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()) { - AfxMessageBox(_T("关闭失败,无法继续")); + Authorize_Help_LogPrint(_T("关闭失败,无法继续")); return; } BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); @@ -181,16 +233,51 @@ void CDialog_Config::OnBnClickedButton5() JSONCPP_STRING st_JsonError; Json::CharReaderBuilder st_ReaderBuilder; std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + if (BST_CHECKED == m_CheckCodecEnable.GetCheck()) { - AfxMessageBox(_T("续期失败,无法继续")); - return; + CString m_StrCodecPass; + TCHAR tszMsgBuffer[2048]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + m_EditPassword.GetWindowText(m_StrCodecPass); + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszMsgBuffer, m_StrCodecPass.GetBuffer()); + 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()) { - AfxMessageBox(_T("续期失败,无法继续")); + Authorize_Help_LogPrint(_T("续期失败,无法继续")); return; } m_EditTimeout.SetWindowText(st_JsonRoot["tszTimeEnd"].asCString()); BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); } + + +void CDialog_Config::OnBnClickedRadio2() +{ + // TODO: 在此添加控件通知处理程序代码 + m_ListEncrypto.EnableWindow(FALSE); + m_EditPassword.EnableWindow(FALSE); + bCrypto = FALSE; +} + + +void CDialog_Config::OnBnClickedRadio1() +{ + // TODO: 在此添加控件通知处理程序代码 + m_ListEncrypto.EnableWindow(TRUE); + m_EditPassword.EnableWindow(TRUE); + bCrypto = TRUE; +} diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Config.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Config.h index 27b08e1..05aa926 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Config.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Config.h @@ -35,4 +35,10 @@ class CDialog_Config : public CDialogEx CEdit m_EditTimeout; afx_msg void OnBnClickedButton5(); CButton m_BtnUpdate; + CButton m_CheckCodecEnable; + CButton m_CheckCodecDisable; + CComboBox m_ListEncrypto; + afx_msg void OnBnClickedRadio2(); + afx_msg void OnBnClickedRadio1(); + CEdit m_EditPassword; }; 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 f532968..c8bb37f 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 @@ -34,6 +34,7 @@ void CDialog_Modify::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_COMBO2, m_ComboLeave); DDX_Control(pDX, IDC_EDIT7, m_EditHardCode); DDX_Control(pDX, IDC_EDIT8, m_EditCreateTime); + DDX_Control(pDX, IDC_BUTTON2, m_BtnModify); } @@ -53,73 +54,111 @@ BOOL CDialog_Modify::OnInitDialog() CDialog_Config* pConfigWnd = (CDialog_Config*)CDialog_Config::FromHandle(hConfigWnd); CDialog_User* pUserWnd = (CDialog_User*)CDialog_User::FromHandle(hUserWnd); - POSITION pSt_Sition = pUserWnd->m_ListCtrlClient.GetFirstSelectedItemPosition(); - int nItemCount = pUserWnd->m_ListCtrlClient.GetNextSelectedItem(pSt_Sition); - CString m_StrUser = pUserWnd->m_ListCtrlClient.GetItemText(nItemCount, 1); - - CString m_StrIPAddr; - CString m_StrIPPort; - CString m_StrToken; - TCHAR tszUrlAddr[MAX_PATH]; - memset(tszUrlAddr, '\0', MAX_PATH); - //组合请求URL - pConfigWnd->m_EditIPAddr.GetWindowText(m_StrIPAddr); - pConfigWnd->m_EditIPPort.GetWindowText(m_StrIPPort); - pConfigWnd->m_EditToken.GetWindowText(m_StrToken); - - _stprintf(tszUrlAddr, _T("http://%s:%s/auth/client/get"), m_StrIPAddr.GetBuffer(), m_StrIPPort.GetBuffer()); - //请求用户信息 - int nMsgLen = 0; - CHAR* ptszMsgBuffer = NULL; - Json::Value st_JsonRoot; - Json::Value st_JsonObject; - - st_JsonObject["tszUserName"] = m_StrUser.GetBuffer(); - st_JsonRoot["st_UserInfo"] = st_JsonObject; - st_JsonRoot["xhToken"] = _ttoi64(m_StrToken.GetBuffer()); - - APIHelp_HttpRequest_Post(tszUrlAddr, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - - st_JsonObject.clear(); - st_JsonRoot.clear(); - JSONCPP_STRING st_JsonError; - Json::CharReaderBuilder st_ReaderBuilder; - std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) - { - AfxMessageBox(_T("解析客户接口数据错误,无法继续")); - return FALSE; - } - st_JsonObject = st_JsonRoot["st_UserTable"]; - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - - m_EditUser.SetWindowText(st_JsonObject["st_UserInfo"]["tszUserName"].asCString()); - m_EditPass.SetWindowText(st_JsonObject["st_UserInfo"]["tszUserPass"].asCString()); - m_EditEMail.SetWindowText(st_JsonObject["st_UserInfo"]["tszEMailAddr"].asCString()); - m_EditCreateTime.SetWindowText(st_JsonObject["st_UserInfo"]["tszCreateTime"].asCString()); - - CString m_StrNumber; - m_StrNumber.Format(_T("%lld"), st_JsonObject["st_UserInfo"]["nIDNumber"].asUInt64()); - m_EditCardID.SetWindowText(m_StrNumber); - - m_StrNumber.ReleaseBuffer(); - m_StrNumber.Format(_T("%lld"), st_JsonObject["st_UserInfo"]["nPhoneNumber"].asUInt64()); - m_EditPhone.SetWindowText(m_StrNumber); - - m_EditHardCode.SetWindowText(st_JsonObject["tszHardCode"].asCString()); - m_EditLeftTime.SetWindowText(st_JsonObject["tszLeftTime"].asCString()); - for (int i = 0; i < 5; i++) { m_ComboSerial.InsertString(i, lpszXSerialType[i]); } - m_ComboSerial.SetCurSel(st_JsonObject["enSerialType"].asInt()); - for (int i = 0; i < 7; i++) { m_ComboLeave.InsertString(i, lpszXLevelType[i]); } - m_ComboLeave.SetCurSel(st_JsonObject["st_UserInfo"]["nUserLevel"].asInt() + 1); + + POSITION pSt_Sition = pUserWnd->m_ListCtrlClient.GetFirstSelectedItemPosition(); + if (NULL == pSt_Sition) + { + //没有选择,表示添加 + m_BtnModify.SetWindowText(_T("添加")); + } + else + { + int nItemCount = pUserWnd->m_ListCtrlClient.GetNextSelectedItem(pSt_Sition); + CString m_StrUser = pUserWnd->m_ListCtrlClient.GetItemText(nItemCount, 1); + + CString m_StrIPAddr; + CString m_StrIPPort; + CString m_StrToken; + TCHAR tszUrlAddr[MAX_PATH]; + memset(tszUrlAddr, '\0', MAX_PATH); + //组合请求URL + pConfigWnd->m_EditIPAddr.GetWindowText(m_StrIPAddr); + pConfigWnd->m_EditIPPort.GetWindowText(m_StrIPPort); + pConfigWnd->m_EditToken.GetWindowText(m_StrToken); + + _stprintf(tszUrlAddr, _T("http://%s:%s/auth/client/get"), m_StrIPAddr.GetBuffer(), m_StrIPPort.GetBuffer()); + //请求用户信息 + int nMsgLen = 0; + CHAR* ptszMsgBuffer = NULL; + Json::Value st_JsonRoot; + Json::Value st_JsonObject; + + st_JsonObject["tszUserName"] = m_StrUser.GetBuffer(); + st_JsonRoot["st_UserInfo"] = st_JsonObject; + 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_Post(tszUrlAddr, tszMsgBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + } + else + { + APIHelp_HttpRequest_Post(tszUrlAddr, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + } + st_JsonObject.clear(); + 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(ptszMsgBuffer, tszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Authorize_Help_LogPrint(_T("解析客户接口数据错误,无法继续")); + return FALSE; + } + } + else + { + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Authorize_Help_LogPrint(_T("解析客户接口数据错误,无法继续")); + return FALSE; + } + } + + st_JsonObject = st_JsonRoot["st_UserTable"]; + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + + m_EditUser.SetWindowText(st_JsonObject["st_UserInfo"]["tszUserName"].asCString()); + m_EditPass.SetWindowText(st_JsonObject["st_UserInfo"]["tszUserPass"].asCString()); + m_EditEMail.SetWindowText(st_JsonObject["st_UserInfo"]["tszEMailAddr"].asCString()); + m_EditCreateTime.SetWindowText(st_JsonObject["st_UserInfo"]["tszCreateTime"].asCString()); + + CString m_StrNumber; + m_StrNumber.Format(_T("%lld"), st_JsonObject["st_UserInfo"]["nIDNumber"].asUInt64()); + m_EditCardID.SetWindowText(m_StrNumber); + + m_StrNumber.ReleaseBuffer(); + m_StrNumber.Format(_T("%lld"), st_JsonObject["st_UserInfo"]["nPhoneNumber"].asUInt64()); + m_EditPhone.SetWindowText(m_StrNumber); + + m_EditHardCode.SetWindowText(st_JsonObject["tszHardCode"].asCString()); + m_EditLeftTime.SetWindowText(st_JsonObject["tszLeftTime"].asCString()); + + m_ComboSerial.SetCurSel(st_JsonObject["enSerialType"].asInt()); + m_ComboLeave.SetCurSel(st_JsonObject["st_UserInfo"]["nUserLevel"].asInt() + 1); + } return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } @@ -154,14 +193,24 @@ void CDialog_Modify::OnBnClickedButton2() CString m_StrIPAddr; CString m_StrIPPort; CString m_StrToken; + CString m_StrBtnModify; + TCHAR tszUrlAddr[MAX_PATH]; memset(tszUrlAddr, '\0', MAX_PATH); + m_BtnModify.GetWindowText(m_StrBtnModify); //组合请求URL CDialog_Config* pConfigWnd = (CDialog_Config*)CDialog_Config::FromHandle(hConfigWnd); pConfigWnd->m_EditIPAddr.GetWindowText(m_StrIPAddr); pConfigWnd->m_EditIPPort.GetWindowText(m_StrIPPort); pConfigWnd->m_EditToken.GetWindowText(m_StrToken); - _stprintf(tszUrlAddr, _T("http://%s:%s/auth/client/modify"), m_StrIPAddr.GetBuffer(), m_StrIPPort.GetBuffer()); + if (0 == _tcscmp("添加", m_StrBtnModify.GetBuffer())) + { + _stprintf(tszUrlAddr, _T("http://%s:%s/auth/user/register"), m_StrIPAddr.GetBuffer(), m_StrIPPort.GetBuffer()); + } + else + { + _stprintf(tszUrlAddr, _T("http://%s:%s/auth/client/modify"), m_StrIPAddr.GetBuffer(), m_StrIPPort.GetBuffer()); + } st_JsonUser["tszUserName"] = st_UserTable.st_UserInfo.tszUserName; st_JsonUser["tszUserPass"] = st_UserTable.st_UserInfo.tszUserPass; @@ -177,26 +226,57 @@ void CDialog_Modify::OnBnClickedButton2() st_JsonRoot["st_UserTable"] = st_JsonTable; st_JsonRoot["xhToken"] = _ttoi64(m_StrToken.GetBuffer()); + //是否加密 int nMsgLen = 0; CHAR* ptszMsgBuffer = NULL; - APIHelp_HttpRequest_Post(tszUrlAddr, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - + 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_Post(tszUrlAddr, tszMsgBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + } + else + { + APIHelp_HttpRequest_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 (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + if (bCrypto) { - AfxMessageBox(_T("解析客户接口数据错误,无法继续")); - return; + TCHAR tszMsgBuffer[2048]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszMsgBuffer, tszPassBuffer); + if (!pSt_JsonReader->parse(ptszMsgBuffer, 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()) { - AfxMessageBox(_T("修改客户端成功")); + Authorize_Help_LogPrint(_T("修改客户端成功")); } else { - AfxMessageBox(_T("修改客户端失败")); + Authorize_Help_LogPrint(_T("修改客户端失败")); } BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); 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 d8c40e8..35088e7 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 @@ -34,4 +34,5 @@ class CDialog_Modify : public CDialogEx afx_msg void OnBnClickedButton2(); CEdit m_EditHardCode; CEdit m_EditCreateTime; + CButton m_BtnModify; }; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Serial.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Serial.cpp index 9717cac..d756e93 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Serial.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Serial.cpp @@ -95,19 +95,49 @@ void CDialog_Serial::OnBnClickedButton1() int nMsgLen = 0; CHAR* ptszMsgBuffer = NULL; Json::Value st_JsonRoot; - st_JsonRoot["xhToken"] = _ttoi64(m_StrToken.GetBuffer()); - APIHelp_HttpRequest_Post(tszUrlAddr, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + //是否加密 + 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_Post(tszUrlAddr, tszMsgBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + } + else + { + APIHelp_HttpRequest_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 (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + if (bCrypto) { - return; + 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["Array"].size(); i++) { TCHAR tszIndex[10]; @@ -169,24 +199,56 @@ void CDialog_Serial::OnBnClickedButton2() int nMsgLen = 0; CHAR* ptszMsgBuffer = NULL; _stprintf(tszUrlAddr, _T("http://%s:%s/auth/serial/insert"), m_StrIPAddr.GetBuffer(), m_StrIPPort.GetBuffer()); - APIHelp_HttpRequest_Post(tszUrlAddr, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + //是否加密 + 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_Post(tszUrlAddr, tszMsgBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + } + else + { + APIHelp_HttpRequest_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 (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + if (bCrypto) { - AfxMessageBox(_T("解析接口数据错误,无法继续")); - return; + 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()) { - AfxMessageBox(_T("插入序列号成功")); + Authorize_Help_LogPrint(_T("插入序列号成功")); } else { - AfxMessageBox(_T("插入序列号失败")); + Authorize_Help_LogPrint(_T("插入序列号失败")); } BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); //刷新 @@ -201,7 +263,7 @@ void CDialog_Serial::OnBnClickedButton4() int nSelect = m_ListSerial.GetNextSelectedItem(pSt_Sition); if (nSelect < 0) { - AfxMessageBox(_T("你没有选择任何客户!")); + Authorize_Help_LogPrint(_T("你没有选择任何客户!")); return; } CString m_StrSerial = m_ListSerial.GetItemText(nSelect, 1); @@ -236,24 +298,56 @@ void CDialog_Serial::OnBnClickedButton4() int nMsgLen = 0; CHAR* ptszMsgBuffer = NULL; _stprintf(tszUrlAddr, _T("http://%s:%s/auth/serial/delete"), m_StrIPAddr.GetBuffer(), m_StrIPPort.GetBuffer()); - APIHelp_HttpRequest_Post(tszUrlAddr, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + //是否加密 + 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_Post(tszUrlAddr, tszMsgBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + } + else + { + APIHelp_HttpRequest_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 (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + if (bCrypto) { - AfxMessageBox(_T("解析接口数据错误,无法继续")); - return; + 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()) { - AfxMessageBox(_T("删除序列号成功")); + Authorize_Help_LogPrint(_T("删除序列号成功")); } else { - AfxMessageBox(_T("删除序列号失败")); + Authorize_Help_LogPrint(_T("删除序列号失败")); } BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); //刷新 @@ -268,14 +362,14 @@ void CDialog_Serial::OnBnClickedButton3() int nSelect = m_ListSerial.GetNextSelectedItem(pSt_Sition); if (nSelect < 0) { - AfxMessageBox(_T("你没有选择序列号!")); + Authorize_Help_LogPrint(_T("你没有选择序列号!")); return; } CString m_Str = m_ListSerial.GetItemText(nSelect, 1); if (!AuthHelp_ClipBoard_Set(m_Str.GetBuffer(), m_Str.GetLength())) { - AfxMessageBox(_T("复制失败!")); + Authorize_Help_LogPrint(_T("复制失败!")); return; } - AfxMessageBox(_T("复制成功!")); + Authorize_Help_LogPrint(_T("复制成功!")); } diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_User.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_User.cpp index 7740099..ae3dc97 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_User.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_User.cpp @@ -38,6 +38,7 @@ BEGIN_MESSAGE_MAP(CDialog_User, CDialogEx) ON_BN_CLICKED(IDC_BUTTON3, &CDialog_User::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON4, &CDialog_User::OnBnClickedButton4) ON_BN_CLICKED(IDC_CHECK2, &CDialog_User::OnBnClickedCheck2) + ON_BN_CLICKED(IDC_BUTTON5, &CDialog_User::OnBnClickedButton5) END_MESSAGE_MAP() @@ -97,19 +98,49 @@ void CDialog_User::OnBnClickedButton1() { st_JsonRoot["Online"] = false; } + //是否加密 + TCHAR tszPassBuffer[64]; + memset(tszPassBuffer, '\0', sizeof(tszPassBuffer)); + ::GetDlgItemText(hConfigWnd, IDC_EDIT6, tszPassBuffer, sizeof(tszPassBuffer)); - APIHelp_HttpRequest_Post(tszUrlAddr, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + 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_Post(tszUrlAddr, tszMsgBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + } + else + { + APIHelp_HttpRequest_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 (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + if (bCrypto) { - AfxMessageBox(_T("解析客户列表接口数据错误,无法继续")); - return; + 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, j = 0; i < st_JsonRoot["Array"].size(); i++) { TCHAR tszIndex[10]; @@ -150,7 +181,7 @@ void CDialog_User::OnBnClickedButton2() int nSelect = m_ListCtrlClient.GetNextSelectedItem(pSt_Sition); if (nSelect < 0) { - AfxMessageBox(_T("你没有选择任何客户!")); + Authorize_Help_LogPrint(_T("你没有选择任何客户!")); return; } CString m_StrIPAddr; @@ -174,27 +205,59 @@ void CDialog_User::OnBnClickedButton2() st_JsonRoot["st_UserInfo"] = st_JsonObject; st_JsonRoot["xhToken"] = _ttoi64(m_StrToken.GetBuffer()); + //是否加密 int nMsgLen = 0; CHAR* ptszMsgBuffer = NULL; - APIHelp_HttpRequest_Post(tszUrlAddr, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + 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_Post(tszUrlAddr, tszMsgBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + } + else + { + APIHelp_HttpRequest_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 (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + if (bCrypto) { - AfxMessageBox(_T("解析客户接口数据错误,无法继续")); - return; + TCHAR tszMsgBuffer[2048]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszMsgBuffer, tszPassBuffer); + if (!pSt_JsonReader->parse(ptszMsgBuffer, 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()) { - AfxMessageBox(_T("关闭客户端成功")); + Authorize_Help_LogPrint(_T("关闭客户端成功")); } else { - AfxMessageBox(_T("关闭客户端失败")); + Authorize_Help_LogPrint(_T("关闭客户端失败")); } BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); //剔除客户需要刷新客户列表 @@ -209,7 +272,7 @@ void CDialog_User::OnBnClickedButton3() int nSelect = m_ListCtrlClient.GetNextSelectedItem(pSt_Sition); if (nSelect < 0) { - AfxMessageBox(_T("你没有选择任何客户!")); + Authorize_Help_LogPrint(_T("你没有选择任何客户!")); return; } CString m_StrIPAddr; @@ -231,28 +294,58 @@ void CDialog_User::OnBnClickedButton3() st_JsonObject["tszUserName"] = m_StrUser.GetBuffer(); st_JsonRoot["st_UserInfo"] = st_JsonObject; st_JsonRoot["xhToken"] = _ttoi64(m_StrToken.GetBuffer()); - + //是否加密 int nMsgLen = 0; CHAR* ptszMsgBuffer = NULL; - APIHelp_HttpRequest_Post(tszUrlAddr, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + 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_Post(tszUrlAddr, tszMsgBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + } + else + { + APIHelp_HttpRequest_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 (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + if (bCrypto) { - AfxMessageBox(_T("解析客户接口数据错误,无法继续")); - return; + TCHAR tszMsgBuffer[2048]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszMsgBuffer, tszPassBuffer); + if (!pSt_JsonReader->parse(ptszMsgBuffer, 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()) { - AfxMessageBox(_T("删除客户端成功")); + Authorize_Help_LogPrint(_T("删除客户端成功")); } else { - AfxMessageBox(_T("删除客户端失败")); + Authorize_Help_LogPrint(_T("删除客户端失败")); } BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); //需要刷新客户列表 @@ -267,7 +360,7 @@ void CDialog_User::OnBnClickedButton4() int nItemCount = m_ListCtrlClient.GetNextSelectedItem(pSt_Sition); if (nItemCount < 0) { - AfxMessageBox(_T("你没有选择任何用户!")); + Authorize_Help_LogPrint(_T("你没有选择任何用户!")); return; } CDialog_Modify m_DlgModify; @@ -315,4 +408,17 @@ DWORD CDialog_User::Dialog_User_Thread(LPVOID lParam) Sleep(100); } return 0; -} \ No newline at end of file +} + +void CDialog_User::OnBnClickedButton5() +{ + // TODO: 在此添加控件通知处理程序代码 + POSITION pSt_Sition = m_ListCtrlClient.GetFirstSelectedItemPosition(); + int nItemCount = m_ListCtrlClient.GetNextSelectedItem(pSt_Sition); + if (nItemCount >= 0) + { + m_ListCtrlClient.SetItemState(nItemCount, 0, -1); + } + CDialog_Modify m_DlgModify; + m_DlgModify.DoModal(); +} diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_User.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_User.h index b701b03..96f6440 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_User.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_User.h @@ -37,4 +37,5 @@ class CDialog_User : public CDialogEx afx_msg void OnBnClickedCheck2(); CButton m_CheckAuto; CButton m_BtnModifyClient; + afx_msg void OnBnClickedButton5(); }; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index d4455cb..e184801 100644 Binary files a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps and b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps differ diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc index e465c15..b9cd6b3 100644 Binary files a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc and b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc differ diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj index 40a101f..4fc5536 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj @@ -98,7 +98,7 @@ Use Level3 - true + false WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) pch.h @@ -144,7 +144,7 @@ Level3 true true - true + false WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) pch.h @@ -170,7 +170,7 @@ Level3 true true - true + false _WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) pch.h @@ -195,6 +195,7 @@ + @@ -207,6 +208,7 @@ + Create Create 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 47e2f8c..8dd51b5 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj.filters +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj.filters @@ -19,6 +19,12 @@ {2e171454-cfc6-43e4-8b9c-5374177f26b5} + + {86e90a47-78e1-4c71-9605-73691ce76652} + + + {09b85906-69e2-4631-bb95-415f2d30d72a} + @@ -51,6 +57,9 @@ 头文件\Authorize_Dialog + + 头文件\Authorize_Help + @@ -74,6 +83,9 @@ 源文件\Authorize_Dialog + + 源文件\Authorize_Help + diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp index c7d1969..d942618 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp @@ -27,12 +27,15 @@ void CXEngineAuthorizeAppDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_TAB1, m_TabWindows); + DDX_Control(pDX, IDC_EDIT1, m_EditLog); } BEGIN_MESSAGE_MAP(CXEngineAuthorizeAppDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CXEngineAuthorizeAppDlg::OnTcnSelchangeTab1) + ON_BN_CLICKED(IDC_BUTTON1, &CXEngineAuthorizeAppDlg::OnBnClickedButton1) + ON_BN_CLICKED(IDC_BUTTON2, &CXEngineAuthorizeAppDlg::OnBnClickedButton2) END_MESSAGE_MAP() @@ -85,6 +88,8 @@ BOOL CXEngineAuthorizeAppDlg::OnInitDialog() m_DlgUser.ShowWindow(FALSE); m_DlgSerial.ShowWindow(FALSE); m_TabWindows.SetCurSel(0); + + hMainWnd = m_hWnd; return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } @@ -152,3 +157,31 @@ void CXEngineAuthorizeAppDlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult *pResult = 0; } + + +void CXEngineAuthorizeAppDlg::OnBnClickedButton1() +{ + // TODO: 在此添加控件通知处理程序代码 + TCHAR tszFilter[] = _T("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||"); + // 构造保存文件对话框 + CFileDialog m_FileDlg(FALSE, _T("txt"), _T("log"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, tszFilter, this); + + // 显示保存文件对话框 + if (IDOK == m_FileDlg.DoModal()) + { + FILE* pSt_File = _tfopen(m_FileDlg.GetPathName(), _T("wb")); + + TCHAR tszLogBuffer[8196]; + memset(tszLogBuffer, '\0', sizeof(tszLogBuffer)); + int nSize = m_EditLog.GetWindowText(tszLogBuffer, sizeof(tszLogBuffer)); + fwrite(tszLogBuffer, 1, nSize, pSt_File); + fclose(pSt_File); + } +} + + +void CXEngineAuthorizeAppDlg::OnBnClickedButton2() +{ + // TODO: 在此添加控件通知处理程序代码 + m_EditLog.SetWindowText(""); +} diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h index e6c83e2..f44ce79 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h @@ -37,4 +37,7 @@ class CXEngineAuthorizeAppDlg : public CDialogEx public: CTabCtrl m_TabWindows; afx_msg void OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult); + CEdit m_EditLog; + afx_msg void OnBnClickedButton1(); + afx_msg void OnBnClickedButton2(); }; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.cpp index aaaa080..cfb3731 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.cpp @@ -3,11 +3,8 @@ #include "pch.h" // 当使用预编译的头时,需要使用此源文件,编译才能成功。 +HWND hMainWnd = NULL; HWND hUserWnd = NULL; HWND hConfigWnd = NULL; -LPCSTR lpszStuType[2] = { "离线","在线" }; -#if XENGINE_VERSION_BIT < 7390001001 -LPCSTR lpszXSerialType[5] = { "未知类型","分钟卡","天数卡","次数卡","自定义卡" }; -LPCSTR lpszXDevType[9] = { "未知","PC端","URFACE","安卓","IPAD","IOS","WEB","嵌入式","其他" }; -LPCSTR lpszXLevelType[7] = { "封禁","管理员","维护员","2","3","4","5" }; -#endif \ No newline at end of file +BOOL bCrypto = FALSE; +LPCSTR lpszStuType[2] = { "离线","在线" }; \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h index 0041ea5..25ea7bc 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h @@ -16,6 +16,8 @@ #include #include #include +#include +#include #include #include #include @@ -27,15 +29,13 @@ #include "Authorize_Dialog/Dialog_User.h" #include "Authorize_Dialog/Dialog_Serial.h" #include "Authorize_Dialog/Dialog_Modify.h" +#include "Authorize_Help/Authorize_Help.h" +extern HWND hMainWnd; extern HWND hUserWnd; extern HWND hConfigWnd; +extern BOOL bCrypto; extern LPCSTR lpszStuType[2]; -#if XENGINE_VERSION_BIT < 7390001001 -extern LPCSTR lpszXSerialType[5]; -extern LPCSTR lpszXDevType[9]; -extern LPCSTR lpszXLevelType[7]; -#endif #ifdef _DEBUG #ifdef _WIN64 @@ -56,4 +56,5 @@ extern LPCSTR lpszXLevelType[7]; #endif #pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib.lib") +#pragma comment(lib,"XEngine_Core/XEngine_OPenSsl.lib") #pragma comment(lib,"XEngine_NetHelp/NetHelp_APIHelp.lib") \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h index 535c039..433c305 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h @@ -29,6 +29,8 @@ #define IDC_CHECK1 1013 #define IDC_EDIT8 1014 #define IDC_CHECK2 1014 +#define IDC_RADIO1 1015 +#define IDC_RADIO2 1016 // Next default values for new objects // @@ -36,7 +38,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 138 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1015 +#define _APS_NEXT_CONTROL_VALUE 1017 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif 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 8c58eb3..9c5b9e1 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 @@ -20,6 +20,7 @@ BOOL XEngine_AuthorizeHTTP_Token(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, //http://app.xyry.org:5302/api?function=login&user=123123aa&pass=123123 TCHAR tszUserName[128]; TCHAR tszUserPass[128]; + XNETHANDLE xhToken = 0; AUTHREG_USERTABLE st_UserTable; memset(tszUserName, '\0', sizeof(tszUserName)); @@ -29,43 +30,117 @@ BOOL XEngine_AuthorizeHTTP_Token(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, BaseLib_OperatorString_GetKeyValue(pptszList[1], "=", tszURLKey, tszUserName); BaseLib_OperatorString_GetKeyValue(pptszList[2], "=", tszURLKey, tszUserPass); - //禁止重复登录 - if (!Session_Token_GetUser(tszUserName, tszUserPass)) + //是否使用了第三方验证 + if (st_AuthConfig.st_XLogin.bPassAuth) { - Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "user locked"); - 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, tszUserName); - return FALSE; - } + //启用三方验证 + int nHTTPCode = 0; + int nHTTPLen = 0; + TCHAR* ptszMsgBuffer = NULL; + XENGINE_PROTOCOL_USERAUTH st_AuthProtocol; + memset(&st_AuthProtocol, '\0', sizeof(XENGINE_PROTOCOL_USERAUTH)); + + _tcscpy(st_AuthProtocol.tszUserName, tszUserName); + _tcscpy(st_AuthProtocol.tszUserPass, tszUserPass); + st_AuthProtocol.enDeviceType = ENUM_PROTOCOL_FOR_DEVICE_TYPE_WEB; - if (!Database_SQLite_UserQuery(tszUserName, &st_UserTable)) + Protocol_Packet_HttpUserPass(tszSDBuffer, &nSDLen, &st_AuthProtocol); + APIHelp_HttpRequest_Post(st_AuthConfig.st_XLogin.st_PassUrl.tszPassLogin, tszSDBuffer, &nHTTPCode, &ptszMsgBuffer, &nHTTPLen); + if (200 != nHTTPCode) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user not found"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,用户名:%s,登录失败,三方验证失败,错误码:%d"), lpszClientAddr, st_AuthProtocol.tszUserName, nHTTPCode); + return FALSE; + } + Protocol_Parse_HttpParseTable(ptszMsgBuffer, nHTTPLen, &st_UserTable); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } + else { - Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user not found"); - XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,登录失败,用户名不存在"), lpszClientAddr); - return FALSE; + if (!Database_SQLite_UserQuery(tszUserName, &st_UserTable)) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user not found"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,登录失败,用户名不存在"), lpszClientAddr); + return FALSE; + } + if ((_tcslen(tszUserPass) != _tcslen(st_UserTable.st_UserInfo.tszUserPass)) || (0 != _tcsncmp(tszUserPass, st_UserTable.st_UserInfo.tszUserPass, _tcslen(tszUserPass)))) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "password is incorrent"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,登录失败,密码错误"), lpszClientAddr); + return FALSE; + } } - if ((_tcslen(tszUserPass) != _tcslen(st_UserTable.st_UserInfo.tszUserPass)) || (0 != _tcsncmp(tszUserPass, st_UserTable.st_UserInfo.tszUserPass, _tcslen(tszUserPass)))) + //用户是否存在会话,存在就返回 + if (Session_Token_GetUser(tszUserName, tszUserPass, &xhToken)) { - Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "password is incorrent"); - XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,登录失败,密码错误"), lpszClientAddr); - return FALSE; + if (st_AuthConfig.st_XLogin.bMultiLogin) + { + Protocol_Packet_HttpToken(tszSDBuffer, &nSDLen, xhToken, st_AuthConfig.st_XVerification.nTokenTimeout); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,请求登录发现会话已经存在,直接返回TOKEN:%lld 成功"), lpszClientAddr, xhToken); + return TRUE; + } + else + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "user was login"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,请求登录发现会话已经存在,服务器不允许重读登录"), lpszClientAddr); + return FALSE; + } } - //权限必须足够 - if (0 != st_UserTable.st_UserInfo.nUserLevel) + //是否被封禁 + if (-1 == st_UserTable.st_UserInfo.nUserLevel) { - Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "User permission error"); + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "User was banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,登录失败,客户端权限不足"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,用户名:%s,登录失败,客户端已被封禁"), lpszClientAddr, tszUserName); return FALSE; } - XNETHANDLE xhToken = 0; + //处理权限 + if (st_UserTable.st_UserInfo.nUserLevel > 0) + { + //普通用户 + if (!st_AuthConfig.st_XLogin.bHTTPAuth) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "User permission error"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,登录失败,客户端权限不足"), lpszClientAddr); + return FALSE; + } + //是否已经登录 + TCHAR tszClientAddr[128]; + if (Session_Authorize_GetAddrForUser(tszUserName, tszClientAddr)) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "User was login"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,用户名:%s,登录失败,用户名已经登录"), lpszClientAddr, tszUserName); + return FALSE; + } + //分析充值类型 + if ((ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW == st_UserTable.enSerialType) || ('0' == st_UserTable.tszLeftTime[0])) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "User not time"); + 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, tszUserName); + return FALSE; + } + st_UserTable.enDeviceType = ENUM_PROTOCOL_FOR_DEVICE_TYPE_WEB; + if (!Session_Authorize_Insert(lpszClientAddr, &st_UserTable, XENGINE_AUTH_APP_NETTYPE_HTTP)) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 500, "server is error"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,用户名:%s,登录失败,插入会话管理失败,错误:%lX"), lpszClientAddr, tszUserName); + return FALSE; + } + } BaseLib_OperatorHandle_Create(&xhToken); - Session_Token_Insert(xhToken, &st_UserTable); + Session_Token_Insert(xhToken, &st_UserTable, st_UserTable.st_UserInfo.nUserLevel > 0 ? st_AuthConfig.st_XLogin.nHTTPAuthTime : 0); Protocol_Packet_HttpToken(tszSDBuffer, &nSDLen, xhToken, st_AuthConfig.st_XVerification.nTokenTimeout); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,请求登录获得TOKEN:%lld 成功"), lpszClientAddr, xhToken); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,请求登录获得TOKEN:%lld 成功,用户级别:%d"), lpszClientAddr, xhToken, st_UserTable.st_UserInfo.nUserLevel); } else if (0 == _tcsnicmp(lpszAPIUPDate, tszURLValue, _tcslen(lpszAPIUPDate))) { @@ -84,19 +159,58 @@ BOOL XEngine_AuthorizeHTTP_Token(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, } Protocol_Packet_HttpToken(tszSDBuffer, &nSDLen, _ttoi64(tszUserToken), st_AuthConfig.st_XVerification.nTokenTimeout); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,请求更新TOKEN:%s 成功"), lpszClientAddr, tszUserToken); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,请求更新TOKEN:%s 成功"), lpszClientAddr, tszUserToken); } else if (0 == _tcsnicmp(lpszAPIClose, tszURLValue, _tcslen(lpszAPIClose))) { //http://app.xyry.org:5302/api?function=close&token=1000112345 TCHAR tszUserToken[128]; + AUTHREG_USERTABLE st_UserTable; + memset(tszUserToken, '\0', sizeof(tszUserToken)); + memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE)); BaseLib_OperatorString_GetKeyValue(pptszList[1], "=", tszURLKey, tszUserToken); + //主动关闭,更新用户时间 + Session_Token_Get(_ttoi64(tszUserToken), &st_UserTable); + if (st_UserTable.st_UserInfo.nUserLevel > 1) + { + //如果权限是普通用户 + AUTHREG_PROTOCOL_TIME st_AuthTime; + AUTHSESSION_NETCLIENT st_NETClient; + memset(&st_AuthTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); + memset(&st_NETClient, '\0', sizeof(AUTHSESSION_NETCLIENT)); + //需要设置时间并且关闭会话 + if (Session_Authorize_GetClientForUser(st_UserTable.st_UserInfo.tszUserName, &st_NETClient)) + { + st_AuthTime.nTimeLeft = st_NETClient.nLeftTime; + st_AuthTime.nTimeONLine = st_NETClient.nOnlineTime; + st_AuthTime.enSerialType = st_NETClient.st_UserTable.enSerialType; + _tcscpy(st_AuthTime.tszUserName, st_UserTable.st_UserInfo.tszUserName); + _tcscpy(st_AuthTime.tszLeftTime, st_NETClient.tszLeftTime); + _tcscpy(st_AuthTime.tszUserAddr, st_NETClient.tszClientAddr); + //是否需要通知 + if (st_AuthConfig.st_XLogin.bHTTPAuth) + { + int nSDLen = 0; + TCHAR tszSDBuffer[MAX_PATH]; + memset(tszSDBuffer, '\0', MAX_PATH); + + Protocol_Packet_HttpUserTime(tszSDBuffer, &nSDLen, &st_AuthTime); + APIHelp_HttpRequest_Post(st_AuthConfig.st_XLogin.st_PassUrl.tszPassLogout, tszSDBuffer); + } + Database_SQLite_UserLeave(&st_AuthTime); + } + Session_Authorize_CloseClient(st_UserTable.st_UserInfo.tszUserName); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Token:%s,用户名:%s,主动关闭,在线时长:%d"), tszUserToken, st_UserTable.st_UserInfo.tszUserName, st_AuthTime.nTimeONLine); + } + else + { + 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,请求关闭TOKEN:%s 成功"), lpszClientAddr, tszUserToken); + } Session_Token_Delete(_ttoi64(tszUserToken)); - Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); - XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,请求关闭TOKEN:%s 成功"), lpszClientAddr, tszUserToken); } return TRUE; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp new file mode 100644 index 0000000..e826c8b --- /dev/null +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp @@ -0,0 +1,64 @@ +#include "../Authorize_Hdr.h" + +BOOL XEngine_AuthorizeHTTP_Pass(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, LPCTSTR lpszMsgBuffer, int nMsgLen) +{ + int nSDLen = 4096; + TCHAR tszSDBuffer[4096]; + LPCTSTR lpszAPILogin = _T("login"); + LPCTSTR lpszAPILogout = _T("logout"); + LPCTSTR lpszAPITimeout = _T("timeout"); + + memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); + + if (0 == _tcsnicmp(lpszAPIName, lpszAPILogin, _tcslen(lpszAPIName))) + { + XENGINE_PROTOCOL_USERAUTH st_UserAuth; + AUTHREG_USERTABLE st_UserTable; + + memset(&st_UserAuth, '\0', sizeof(XENGINE_PROTOCOL_USERAUTH)); + memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE)); + + Protocol_Parse_HttpParseAuth(lpszMsgBuffer, nMsgLen, &st_UserAuth); + if (!Database_SQLite_UserQuery(st_UserAuth.tszUserName, &st_UserTable)) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user notfound"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("PASS客户端:%s,用户名:%s,登录失败,用户名不存在"), lpszClientAddr, st_UserAuth.tszUserName); + return FALSE; + } + if ((_tcslen(st_UserAuth.tszUserPass) != _tcslen(st_UserTable.st_UserInfo.tszUserPass)) || (0 != _tcsncmp(st_UserAuth.tszUserPass, st_UserTable.st_UserInfo.tszUserPass, _tcslen(st_UserTable.st_UserInfo.tszUserPass)))) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "password is incorrent"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("PASS客户端:%s,用户名:%s,登录失败,密码错误"), lpszClientAddr, st_UserAuth.tszUserName); + return FALSE; + } + Protocol_Packet_HttpClientInfo(tszSDBuffer, &nSDLen, &st_UserTable); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("PASS客户端:%s,请求登录用户:%s 成功"), lpszClientAddr, st_UserAuth.tszUserName); + } + else if (0 == _tcsnicmp(lpszAPIName, lpszAPILogout, _tcslen(lpszAPIName))) + { + AUTHREG_PROTOCOL_TIME st_ProtocolTime; + memset(&st_ProtocolTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); + + Protocol_Parse_HttpParseTime(lpszMsgBuffer, nMsgLen, &st_ProtocolTime); + Database_SQLite_UserLeave(&st_ProtocolTime); + + 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("PASS客户端:%s,用户名:%s,请求离开服务成功"), lpszClientAddr, st_ProtocolTime.tszUserName); + } + else if (0 == _tcsnicmp(lpszAPIName, lpszAPITimeout, _tcslen(lpszAPIName))) + { + AUTHREG_PROTOCOL_TIME st_ProtocolTime; + memset(&st_ProtocolTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); + + Protocol_Parse_HttpParseTime(lpszMsgBuffer, nMsgLen, &st_ProtocolTime); + Database_SQLite_UserLeave(&st_ProtocolTime); + 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("PASS客户端:%s,用户名:%s,超时通知成功"), lpszClientAddr, st_ProtocolTime.tszUserName); + } + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.h new file mode 100644 index 0000000..07f9119 --- /dev/null +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.h @@ -0,0 +1,3 @@ +#pragma once + +BOOL XEngine_AuthorizeHTTP_Pass(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, LPCTSTR lpszMsgBuffer, int nMsgLen); \ No newline at end of file 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 c49f809..a2a878c 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 @@ -40,17 +40,29 @@ BOOL XEngine_AuthorizeHTTP_User(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, LPC //填充写入数据 _stprintf(st_UserTable.tszLeftTime, _T("%d"), st_AuthConfig.st_XVerification.nTryTime); st_UserTable.enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)st_AuthConfig.st_XVerification.nTryMode; + //禁止权限0和1注册 + if (st_UserTable.st_UserInfo.nUserLevel <= 1) + { + st_UserTable.st_UserInfo.nUserLevel = 5; + } + if (_tcslen(st_UserTable.st_UserInfo.tszUserName) <= 0 || _tcslen(st_UserTable.st_UserInfo.tszUserPass) <= 0) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "user and pass does not set"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,注册失败,没有设置用户和密码"), lpszClientAddr); + return FALSE; + } if (!Database_SQLite_UserRegister(&st_UserTable)) { DWORD dwRet = DBModule_GetLastError(); Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, dwRet, "user register is failed"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,用户名:%s,注册失败,无法继续,错误:%X"), lpszClientAddr, st_UserTable.st_UserInfo.tszUserName, dwRet); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,用户名:%s,注册失败,无法继续,错误:%X"), lpszClientAddr, st_UserTable.st_UserInfo.tszUserName, dwRet); return FALSE; } 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("客户端:%s,用户名:%s,注册成功"), lpszClientAddr, st_UserTable.st_UserInfo.tszUserName); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,用户名:%s,注册成功"), lpszClientAddr, st_UserTable.st_UserInfo.tszUserName); } else if (0 == _tcsnicmp(lpszAPIName, lpszAPIPay, _tcslen(lpszAPIName))) { @@ -65,14 +77,14 @@ BOOL XEngine_AuthorizeHTTP_User(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, LPC { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "Serial number not available"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,用户名:%s,充值失败,无法继续,错误:%X"), lpszClientAddr, st_UserPay.tszUserName, DBModule_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,用户名:%s,充值失败,无法继续,错误:%X"), lpszClientAddr, st_UserPay.tszUserName, DBModule_GetLastError()); return FALSE; } Database_SQLite_UserQuery(st_UserPay.tszUserName, &st_UserInfo); Session_Authorize_SetUser(&st_UserInfo); 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("客户端:%s,用户名:%s,充值成功,序列号:%s"), lpszClientAddr, st_UserPay.tszUserName, st_UserPay.tszSerialNumber); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,用户名:%s,充值成功,序列号:%s"), lpszClientAddr, st_UserPay.tszUserName, st_UserPay.tszSerialNumber); } else if (0 == _tcsnicmp(lpszAPIName, lpszAPIPass, _tcslen(lpszAPIName))) { @@ -89,7 +101,7 @@ BOOL XEngine_AuthorizeHTTP_User(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, LPC { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user not found"); 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_UserInfo.tszUserName); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,用户名:%s,找回密码失败,用户不存在"), lpszClientAddr, st_UserInfo.tszUserName); return FALSE; } //安全验证判断 @@ -97,7 +109,7 @@ BOOL XEngine_AuthorizeHTTP_User(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, LPC { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "user information is incorrent"); 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_UserInfo.tszUserName); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,用户名:%s,找回密码失败,验证信息失败"), lpszClientAddr, st_UserInfo.tszUserName); return FALSE; } _tcscpy(st_AuthProtocol.tszUserName, st_UserTable.st_UserInfo.tszUserName); @@ -105,28 +117,36 @@ BOOL XEngine_AuthorizeHTTP_User(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, LPC Protocol_Packet_HttpUserPass(tszSDBuffer, &nSDLen, &st_AuthProtocol); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("客户端:%s,用户名:%s,找回密码成功"), lpszClientAddr, st_UserInfo.tszUserName); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,用户名:%s,找回密码成功"), lpszClientAddr, st_UserInfo.tszUserName); } else if (0 == _tcsnicmp(lpszAPIName, lpszAPITime, _tcslen(lpszAPIName))) { AUTHREG_PROTOCOL_TIME st_AuthTime; + AUTHSESSION_NETCLIENT st_NETClient; XENGINE_PROTOCOL_USERAUTH st_UserAuth; memset(&st_AuthTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); + memset(&st_NETClient, '\0', sizeof(AUTHSESSION_NETCLIENT)); memset(&st_UserAuth, '\0', sizeof(XENGINE_PROTOCOL_USERAUTH)); Protocol_Parse_HttpParseAuth(lpszMsgBuffer, nMsgLen, &st_UserAuth); - _tcscpy(st_AuthTime.tszUserName, st_UserAuth.tszUserName); - if (!Session_Authorize_GetTimer(st_AuthTime.tszUserName, &st_AuthTime)) + if (!Session_Authorize_GetClientForUser(st_UserAuth.tszUserName, &st_NETClient)) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user not found"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,用户名:%s,获取时间失败,无法继续,错误:%X"), lpszClientAddr, st_AuthTime.tszUserName, Session_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,用户名:%s,获取时间失败,无法继续,错误:%X"), lpszClientAddr, st_AuthTime.tszUserName, Session_GetLastError()); return FALSE; } + st_AuthTime.nTimeLeft = st_NETClient.nLeftTime; + st_AuthTime.nTimeONLine = st_NETClient.nOnlineTime; + st_AuthTime.enSerialType = st_NETClient.st_UserTable.enSerialType; + _tcscpy(st_AuthTime.tszUserName, st_UserAuth.tszUserName); + _tcscpy(st_AuthTime.tszLeftTime, st_NETClient.tszLeftTime); + _tcscpy(st_AuthTime.tszUserAddr, st_NETClient.tszClientAddr); + Protocol_Packet_HttpUserTime(tszSDBuffer, &nSDLen, &st_AuthTime); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("客户端:%s,用户名:%s,获取时间成功,类型:%d,在线时间:%lld,剩余时间:%lld"), lpszClientAddr, st_AuthTime.tszUserName, st_AuthTime.enSerialType, st_AuthTime.nTimeONLine, st_AuthTime.nTimeLeft); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,用户名:%s,获取时间成功,类型:%d,在线时间:%lld,剩余时间:%lld"), lpszClientAddr, st_AuthTime.tszUserName, st_AuthTime.enSerialType, st_AuthTime.nTimeONLine, st_AuthTime.nTimeLeft); } else if (0 == _tcsnicmp(lpszAPIName, lpszAPITry, _tcslen(lpszAPIName))) { @@ -155,7 +175,7 @@ BOOL XEngine_AuthorizeHTTP_User(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, LPC { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "timeout"); 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_AuthVer.tszVerSerial); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,序列号:%s,临时验证失败,此序列号已经试用到期"), lpszClientAddr, st_AuthVer.tszVerSerial); } else { @@ -167,7 +187,7 @@ BOOL XEngine_AuthorizeHTTP_User(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, LPC } Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "timeout"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("客户端:%s,序列号:%s,临时验证成功,已用时间:%lld"), lpszClientAddr, st_AuthVer.tszVerSerial, nTimeSpan); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,序列号:%s,临时验证成功,已用时间:%lld"), lpszClientAddr, st_AuthVer.tszVerSerial, nTimeSpan); } } else @@ -180,18 +200,18 @@ BOOL XEngine_AuthorizeHTTP_User(LPCTSTR lpszClientAddr, LPCTSTR lpszAPIName, LPC { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 501, "the function server unavailable"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("客户端:%s,序列号:%s,临时验证插入失败,因为服务器关闭了此功能"), lpszClientAddr, st_AuthVer.tszVerSerial); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("HTTP客户端:%s,序列号:%s,临时验证插入失败,因为服务器关闭了此功能"), lpszClientAddr, st_AuthVer.tszVerSerial); return FALSE; } if (!Database_SQLite_TryInsert(&st_AuthVer)) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 500, "Internal Server Error"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,序列号:%s,临时验证插入失败,无法继续,错误:%X"), lpszClientAddr, st_AuthVer.tszVerSerial, DBModule_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,序列号:%s,临时验证插入失败,无法继续,错误:%X"), lpszClientAddr, st_AuthVer.tszVerSerial, DBModule_GetLastError()); } 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("客户端:%s,序列号:%s,临时验证插入成功"), lpszClientAddr, st_AuthVer.tszVerSerial); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,序列号:%s,临时验证插入成功"), lpszClientAddr, st_AuthVer.tszVerSerial); } } return TRUE; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h index 73b320a..df05aa2 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h @@ -38,6 +38,8 @@ using namespace std; #include #include #include +#include +#include #include "../../XAuth_Protocol.h" #include "../../AuthorizeModule_Database/Database_Define.h" #include "../../AuthorizeModule_Database/Database_Error.h" @@ -56,6 +58,7 @@ extern XHANDLE xhHttpSocket; extern XHANDLE xhTCPPacket; extern XHANDLE xhWSPacket; extern XHANDLE xhHttpPacket; +extern XHANDLE xhMemPool; extern XNETHANDLE xhTCPPool; extern XNETHANDLE xhWSPool; extern XNETHANDLE xhHttpPool; @@ -75,7 +78,8 @@ extern XENGINE_SERVICECONFIG st_AuthConfig; #include "AuthorizeHTTP_Post/AuthorizeHTTP_User.h" #include "AuthorizeHTTP_Post/AuthorizeHTTP_Client.h" #include "AuthorizeHTTP_Post/AuthorizeHTTP_Serial.h" -#include "AuthorizeHTTP_GET/AuthorizeHTTP_Token.h" +#include "AuthorizeHTTP_Post/AuthorizeHTTP_Pass.h" +#include "AuthorizeHTTP_Get/AuthorizeHTTP_Token.h" #ifdef _WINDOWS #ifdef _DEBUG @@ -113,4 +117,5 @@ extern XENGINE_SERVICECONFIG st_AuthConfig; #pragma comment(lib,"XEngine_HelpComponents/HelpComponents_Authorize.lib") #pragma comment(lib,"XEngine_RfcComponents/RfcComponents_WSProtocol.lib") #pragma comment(lib,"XEngine_RfcComponents/RfcComponents_HttpServer.lib") +#pragma comment(lib,"XEngine_NetHelp/NetHelp_APIHelp.lib") #endif \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp index 45b2a90..f67a427 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp @@ -24,7 +24,22 @@ XHTHREAD CALLBACK XEngine_AuthService_HttpThread(LPVOID lParam) if (RfcComponents_HttpServer_GetMemoryEx(xhHttpPacket, ppSt_ListClient[i]->tszClientAddr, &ptszMsgBuffer, &nMsgLen, &st_HTTPParament)) { - XEngine_Client_HttpTask(ppSt_ListClient[i]->tszClientAddr, ptszMsgBuffer, nMsgLen, &st_HTTPParament); + if (st_AuthConfig.st_XCrypto.bEnable) + { + TCHAR tszPassword[64]; + TCHAR tszDeBuffer[2048]; + + memset(tszPassword, '\0', sizeof(tszPassword)); + memset(tszDeBuffer, '\0', sizeof(tszDeBuffer)); + + _stprintf(tszPassword, _T("%d"), st_AuthConfig.st_XCrypto.nPassword); + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDeBuffer, tszPassword); + XEngine_Client_HttpTask(ppSt_ListClient[i]->tszClientAddr, tszDeBuffer, nMsgLen, &st_HTTPParament); + } + else + { + XEngine_Client_HttpTask(ppSt_ListClient[i]->tszClientAddr, ptszMsgBuffer, nMsgLen, &st_HTTPParament); + } } BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); } @@ -52,6 +67,7 @@ BOOL XEngine_Client_HttpTask(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int LPCTSTR lpszAPIVerClient = _T("client"); LPCTSTR lpszAPIVerSerial = _T("serial"); LPCTSTR lpszAPIVerUser = _T("user"); + LPCTSTR lpszAPIVerPass = _T("pass"); memset(tszAPIType, '\0', sizeof(tszAPIType)); memset(tszAPIVer, '\0', sizeof(tszAPIVer)); @@ -68,34 +84,56 @@ BOOL XEngine_Client_HttpTask(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int if (0 == _tcsnicmp(lpszAPIVerClient, tszAPIVer, _tcslen(lpszAPIVerClient))) { + AUTHREG_USERTABLE st_UserTable; + memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE)); //验证权限 Protocol_Parse_HttpParseToken(lpszMsgBuffer, nMsgLen, &xhToken); - if (!Session_Token_Get(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_Client(lpszClientAddr, tszAPIName, lpszMsgBuffer, nMsgLen); } else if (0 == _tcsnicmp(lpszAPIVerSerial, tszAPIVer, _tcslen(lpszAPIVerSerial))) { + AUTHREG_USERTABLE st_UserTable; + memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE)); //验证权限 Protocol_Parse_HttpParseToken(lpszMsgBuffer, nMsgLen, &xhToken); - if (!Session_Token_Get(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_Serial(lpszClientAddr, tszAPIName, lpszMsgBuffer, nMsgLen); } else if (0 == _tcsnicmp(lpszAPIVerUser, tszAPIVer, _tcslen(lpszAPIVerUser))) { XEngine_AuthorizeHTTP_User(lpszClientAddr, tszAPIName, lpszMsgBuffer, nMsgLen); } + else if (0 == _tcsnicmp(lpszAPIVerPass, tszAPIVer, _tcslen(lpszAPIVerPass))) + { + XEngine_AuthorizeHTTP_Pass(lpszClientAddr, tszAPIName, lpszMsgBuffer, nMsgLen); + } } else if (0 == _tcsnicmp(lpszMethodGet, pSt_HTTPParament->tszHttpMethod, _tcslen(lpszMethodGet))) { diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp index 7b84410..b14d79e 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp @@ -81,19 +81,40 @@ BOOL XEngine_CloseClient(LPCTSTR lpszClientAddr) NetCore_TCPXCore_CloseForClientEx(xhHttpSocket, lpszClientAddr); TCHAR tszClientUser[64]; - AUTHREG_PROTOCOL_TIME st_TimeProtocol; + AUTHREG_PROTOCOL_TIME st_AuthTime; + AUTHSESSION_NETCLIENT st_NETClient; - memset(&st_TimeProtocol, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); memset(tszClientUser, '\0', sizeof(tszClientUser)); + memset(&st_AuthTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); + memset(&st_NETClient, '\0', sizeof(AUTHSESSION_NETCLIENT)); if (Session_Authorize_GetUserForAddr(lpszClientAddr, tszClientUser)) { - if (Session_Authorize_GetTimer(tszClientUser, &st_TimeProtocol)) + if (Session_Authorize_GetClientForUser(tszClientUser, &st_NETClient)) { - Database_SQLite_UserLeave(&st_TimeProtocol); + st_AuthTime.nTimeLeft = st_NETClient.nLeftTime; + st_AuthTime.nTimeONLine = st_NETClient.nOnlineTime; + st_AuthTime.enSerialType = st_NETClient.st_UserTable.enSerialType; + _tcscpy(st_AuthTime.tszUserName, tszClientUser); + _tcscpy(st_AuthTime.tszLeftTime, st_NETClient.tszLeftTime); + _tcscpy(st_AuthTime.tszUserAddr, st_NETClient.tszClientAddr); + } + //只有登录的用户才通知 + if (st_AuthConfig.st_XLogin.bPassAuth) + { + int nSDLen = 0; + TCHAR tszSDBuffer[MAX_PATH]; + memset(tszSDBuffer, '\0', MAX_PATH); + + Protocol_Packet_HttpUserTime(tszSDBuffer, &nSDLen, &st_AuthTime); + APIHelp_HttpRequest_Post(st_AuthConfig.st_XLogin.st_PassUrl.tszPassLogout, tszSDBuffer); + } + else + { + Database_SQLite_UserLeave(&st_AuthTime); } Session_Authorize_CloseClient(tszClientUser); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("客户端:%s,用户名:%s,离开服务器,在线时长:%d"), lpszClientAddr, tszClientUser, st_TimeProtocol.nTimeONLine); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("客户端:%s,用户名:%s,离开服务器,在线时长:%d"), lpszClientAddr, tszClientUser, st_AuthTime.nTimeONLine); } else { @@ -120,17 +141,32 @@ BOOL XEngine_Client_TaskSend(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int } BOOL XEngine_SendMsg(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, int nNetType, LPCTSTR lpszPass) { - TCHAR* ptszMsgBuffer = (TCHAR*)malloc(XENGINE_AUTH_MAX_BUFFER); + TCHAR* ptszMsgBuffer = (TCHAR*)ManagePool_Memory_Alloc(xhMemPool, XENGINE_AUTH_MAX_BUFFER); if (NULL == ptszMsgBuffer) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,网络类型:%d 发送数据失败,内存申请失败,错误码:%d"), lpszClientAddr, nNetType, errno); return FALSE; } - memset(ptszMsgBuffer, '\0', XENGINE_AUTH_MAX_BUFFER); if (XENGINE_AUTH_APP_NETTYPE_WS == nNetType) { - RfcComponents_WSCodec_EncodeMsg(lpszMsgBuffer, ptszMsgBuffer, &nMsgLen, ENUM_XENGINE_RFCOMPONENTS_WEBSOCKET_OPCODE_TEXT); + if (NULL == lpszPass) + { + RfcComponents_WSCodec_EncodeMsg(lpszMsgBuffer, ptszMsgBuffer, &nMsgLen, ENUM_XENGINE_RFCOMPONENTS_WEBSOCKET_OPCODE_TEXT); + } + else + { + TCHAR* ptszCodecBuffer = (TCHAR*)malloc(XENGINE_AUTH_MAX_BUFFER); + if (NULL == ptszCodecBuffer) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,网络类型:%d 发送数据失败,内存申请失败,错误码:%d"), lpszClientAddr, nNetType, errno); + return FALSE; + } + OPenSsl_XCrypto_Encoder(lpszMsgBuffer, &nMsgLen, (UCHAR*)ptszCodecBuffer, lpszPass); + RfcComponents_WSCodec_EncodeMsg(ptszCodecBuffer, ptszMsgBuffer, &nMsgLen, ENUM_XENGINE_RFCOMPONENTS_WEBSOCKET_OPCODE_TEXT); + ManagePool_Memory_Free(xhMemPool, ptszCodecBuffer); + ptszCodecBuffer = NULL; + } NetCore_TCPXCore_SendEx(xhWSSocket, lpszClientAddr, ptszMsgBuffer, nMsgLen); } else if (XENGINE_AUTH_APP_NETTYPE_TCP == nNetType) @@ -152,10 +188,25 @@ BOOL XEngine_SendMsg(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, st_HDRParam.nHttpCode = 200; st_HDRParam.bIsClose = TRUE; - RfcComponents_HttpServer_SendMsgEx(xhHttpPacket, ptszMsgBuffer, &nMsgLen, &st_HDRParam, lpszMsgBuffer, nMsgLen); + if (NULL == lpszPass) + { + RfcComponents_HttpServer_SendMsgEx(xhHttpPacket, ptszMsgBuffer, &nMsgLen, &st_HDRParam, lpszMsgBuffer, nMsgLen); + } + else + { + TCHAR* ptszCodecBuffer = (TCHAR*)ManagePool_Memory_Alloc(xhMemPool, XENGINE_AUTH_MAX_BUFFER); + if (NULL == ptszCodecBuffer) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,网络类型:%d 发送数据失败,内存申请失败,错误码:%d"), lpszClientAddr, nNetType, errno); + return FALSE; + } + + OPenSsl_XCrypto_Encoder(lpszMsgBuffer, &nMsgLen, (UCHAR*)ptszCodecBuffer, lpszPass); + RfcComponents_HttpServer_SendMsgEx(xhHttpPacket, ptszMsgBuffer, &nMsgLen, &st_HDRParam, ptszCodecBuffer, nMsgLen); + ManagePool_Memory_Free(xhMemPool, ptszCodecBuffer); + } NetCore_TCPXCore_SendEx(xhHttpSocket, lpszClientAddr, ptszMsgBuffer, nMsgLen); } - free(ptszMsgBuffer); - ptszMsgBuffer = NULL; + ManagePool_Memory_Free(xhMemPool, ptszMsgBuffer); return TRUE; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp index 3545829..b11ca08 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp @@ -75,21 +75,44 @@ BOOL XEngine_Client_TCPTask(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int n XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,用户名:%s,登录失败,没有填写设备类型,无法继续"), lpszClientAddr, st_AuthProtocol.tszUserName); return FALSE; } - if (!Database_SQLite_UserQuery(st_AuthProtocol.tszUserName, &st_UserTable)) + //是否使用了第三方验证 + if (st_AuthConfig.st_XLogin.bPassAuth) { - pSt_ProtocolHdr->wReserve = 251; - 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_AuthProtocol.tszUserName); - return FALSE; + //启用三方验证 + int nHTTPCode = 0; + int nHTTPLen = 0; + TCHAR* ptszMsgBuffer = NULL; + Protocol_Packet_HttpUserPass(tszSDBuffer, &nSDLen, &st_AuthProtocol); + APIHelp_HttpRequest_Post(st_AuthConfig.st_XLogin.st_PassUrl.tszPassLogin, tszSDBuffer, &nHTTPCode, &ptszMsgBuffer, &nHTTPLen); + if (200 != nHTTPCode) + { + pSt_ProtocolHdr->wReserve = 251; + 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,登录失败,三方验证失败,错误码:%d"), lpszClientAddr, st_AuthProtocol.tszUserName, nHTTPCode); + return FALSE; + } + Protocol_Parse_HttpParseTable(ptszMsgBuffer, nHTTPLen, &st_UserTable); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); } - if ((_tcslen(st_AuthProtocol.tszUserPass) != _tcslen(st_UserTable.st_UserInfo.tszUserPass)) || (0 != _tcsncmp(st_AuthProtocol.tszUserPass, st_UserTable.st_UserInfo.tszUserPass, _tcslen(st_AuthProtocol.tszUserPass)))) + else { - pSt_ProtocolHdr->wReserve = 252; - 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_AuthProtocol.tszUserName); - return FALSE; + if (!Database_SQLite_UserQuery(st_AuthProtocol.tszUserName, &st_UserTable)) + { + pSt_ProtocolHdr->wReserve = 251; + 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_AuthProtocol.tszUserName); + return FALSE; + } + if ((_tcslen(st_AuthProtocol.tszUserPass) != _tcslen(st_UserTable.st_UserInfo.tszUserPass)) || (0 != _tcsncmp(st_AuthProtocol.tszUserPass, st_UserTable.st_UserInfo.tszUserPass, _tcslen(st_AuthProtocol.tszUserPass)))) + { + pSt_ProtocolHdr->wReserve = 252; + 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_AuthProtocol.tszUserName); + return FALSE; + } } //是否已经登录 TCHAR tszClientAddr[128]; @@ -98,7 +121,7 @@ BOOL XEngine_Client_TCPTask(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int n pSt_ProtocolHdr->wReserve = 253; 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_AuthProtocol.tszUserName); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,用户名:%s,登录失败,用户名已经登录"), lpszClientAddr, st_AuthProtocol.tszUserName); return FALSE; } //是否被封禁 @@ -120,7 +143,7 @@ BOOL XEngine_Client_TCPTask(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int n return FALSE; } st_UserTable.enDeviceType = st_AuthProtocol.enDeviceType; - if (!Session_Authorize_Insert(lpszClientAddr, &st_UserTable)) + if (!Session_Authorize_Insert(lpszClientAddr, &st_UserTable, nNetType)) { pSt_ProtocolHdr->wReserve = 256; Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType); @@ -131,7 +154,7 @@ BOOL XEngine_Client_TCPTask(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int n pSt_ProtocolHdr->wReserve = 0; 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,登录成功,注册类型:%s,剩余时间:%s"), lpszClientAddr, st_AuthProtocol.tszUserName, lpszXSerialType[st_UserTable.enSerialType], st_UserTable.tszLeftTime); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("客户端:%s,用户名:%s,登录成功,注册类型:%s,剩余时间:%s"), lpszClientAddr, st_AuthProtocol.tszUserName, lpszXSerialType[st_UserTable.enSerialType], st_UserTable.tszLeftTime); } return TRUE; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp index 07adc59..2176705 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp @@ -1,6 +1,6 @@ #include "Authorize_Hdr.h" -void __stdcall XEngine_TaskEvent_Client(LPCSTR lpszUserAddr, LPCSTR lpszUserName, __int64x nOnlineTimer, __int64x nLeftTimer, LPCSTR lpszLeftDate, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType, ENUM_PROTOCOLDEVICE_TYPE enDeviceType, LPVOID lParam) +void __stdcall XEngine_TaskEvent_Client(LPCSTR lpszUserAddr, LPCSTR lpszUserName, __int64x nOnlineTimer, __int64x nLeftTimer, LPCSTR lpszLeftDate, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType, ENUM_PROTOCOLDEVICE_TYPE enDeviceType, int nNetType, LPVOID lParam) { if (nLeftTimer <= 0) { @@ -16,19 +16,76 @@ void __stdcall XEngine_TaskEvent_Client(LPCSTR lpszUserAddr, LPCSTR lpszUserName st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_TIMEDOUT; st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL; - int nNetType = enDeviceType == ENUM_PROTOCOL_FOR_DEVICE_TYPE_WEB ? XENGINE_AUTH_APP_NETTYPE_WS : XENGINE_AUTH_APP_NETTYPE_TCP; - Protocol_Packet_HDRComm(tszMsgBuffer, &nMsgLen, &st_ProtocolHdr, nNetType); - XEngine_Client_TaskSend(lpszUserAddr, tszMsgBuffer, nMsgLen, nNetType); + if (st_AuthConfig.st_XLogin.bPassAuth) + { + AUTHREG_PROTOCOL_TIME st_AuthTime; + memset(&st_AuthTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); + + st_AuthTime.nNetType = nNetType; + st_AuthTime.nTimeLeft = nLeftTimer; + st_AuthTime.nTimeONLine = nOnlineTimer; + st_AuthTime.enSerialType = enSerialType; + _tcscpy(st_AuthTime.tszUserName, lpszUserName); + _tcscpy(st_AuthTime.tszLeftTime, lpszLeftDate); + _tcscpy(st_AuthTime.tszUserAddr, lpszUserAddr); + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + Protocol_Packet_HttpUserTime(tszMsgBuffer, &nMsgLen, &st_AuthTime); + APIHelp_HttpRequest_Post(st_AuthConfig.st_XLogin.st_PassUrl.tszPassTimeout, tszMsgBuffer); + } + if (XENGINE_AUTH_APP_NETTYPE_HTTP != nNetType) + { + //HTTP不能通知 + Protocol_Packet_HDRComm(tszMsgBuffer, &nMsgLen, &st_ProtocolHdr, nNetType); + XEngine_Client_TaskSend(lpszUserAddr, tszMsgBuffer, nMsgLen, nNetType); + } if (!st_AuthConfig.bTimeNotify) { XEngine_CloseClient(lpszUserAddr); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("地址:%s,用户:%s,没有剩余时间,已经通知客户单超时"), lpszUserName, lpszUserAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("地址:%s,用户:%s,网络类型:%d,没有剩余时间,已经通知客户单超时,三方通知设置:%d"), lpszUserName, lpszUserAddr, nNetType, st_AuthConfig.st_XLogin.bPassAuth); } } void __stdcall XEngine_TaskEvent_Token(XNETHANDLE xhToken, LPVOID lParam) { + AUTHREG_USERTABLE st_UserTable; + memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE)); + + Session_Token_Get(xhToken, &st_UserTable); + if (st_UserTable.st_UserInfo.nUserLevel > 1) + { + //如果权限是普通用户 + AUTHREG_PROTOCOL_TIME st_AuthTime; + AUTHSESSION_NETCLIENT st_NETClient; + memset(&st_AuthTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); + memset(&st_NETClient, '\0', sizeof(AUTHSESSION_NETCLIENT)); + //需要设置时间并且关闭会话 + if (Session_Authorize_GetClientForUser(st_UserTable.st_UserInfo.tszUserName, &st_NETClient)) + { + st_AuthTime.nTimeLeft = st_NETClient.nLeftTime; + st_AuthTime.nTimeONLine = st_NETClient.nOnlineTime; + st_AuthTime.enSerialType = st_NETClient.st_UserTable.enSerialType; + _tcscpy(st_AuthTime.tszUserName, st_UserTable.st_UserInfo.tszUserName); + _tcscpy(st_AuthTime.tszLeftTime, st_NETClient.tszLeftTime); + _tcscpy(st_AuthTime.tszUserAddr, st_NETClient.tszClientAddr); + + if (st_AuthConfig.st_XLogin.bHTTPAuth) + { + int nSDLen = 0; + TCHAR tszSDBuffer[MAX_PATH]; + memset(tszSDBuffer, '\0', MAX_PATH); + + Protocol_Packet_HttpUserTime(tszSDBuffer, &nSDLen, &st_AuthTime); + APIHelp_HttpRequest_Post(st_AuthConfig.st_XLogin.st_PassUrl.tszPassLogout, tszSDBuffer); + } + Database_SQLite_UserLeave(&st_AuthTime); + } + Session_Authorize_CloseClient(st_UserTable.st_UserInfo.tszUserName); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Token:%lld,用户名:%s,离开服务器,在线时长:%d"), xhToken, st_UserTable.st_UserInfo.tszUserName, st_AuthTime.nTimeONLine); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Token:%lld,已经超时,被移除服务器"), xhToken); + } Session_Token_Delete(xhToken); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Token:%lld,已经超时,被移除服务器"), xhToken); } \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.h index fda92cd..26ffb45 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.h @@ -1,4 +1,4 @@ #pragma once -void __stdcall XEngine_TaskEvent_Client(LPCSTR lpszUserAddr, LPCSTR lpszUserName, __int64x nOnlineTimer, __int64x nLeftTimer, LPCSTR lpszLeftDate, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType, ENUM_PROTOCOLDEVICE_TYPE enDeviceType, LPVOID lParam); +void __stdcall XEngine_TaskEvent_Client(LPCSTR lpszUserAddr, LPCSTR lpszUserName, __int64x nOnlineTimer, __int64x nLeftTimer, LPCSTR lpszLeftDate, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType, ENUM_PROTOCOLDEVICE_TYPE enDeviceType, int nNetType, LPVOID lParam); void __stdcall XEngine_TaskEvent_Token(XNETHANDLE xhToken, LPVOID lParam); \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile index 62f2921..034ac6b 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile @@ -3,14 +3,14 @@ SHAREFLAG = -shared SHAREDLL = so RELEASE = 0 UNICODE = 0 -LOADBIN = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Core -L /usr/local/lib/XEngine_Release/XEngine_HelpComponents -L /usr/local/lib/XEngine_Release/XEngine_RfcComponents -L /usr/local/lib/XEngine_Release/XEngine_SystemSdk \ +LOADBIN = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Core -L /usr/local/lib/XEngine_Release/XEngine_HelpComponents -L /usr/local/lib/XEngine_Release/XEngine_RfcComponents -L /usr/local/lib/XEngine_Release/XEngine_NetHelp -L /usr/local/lib/XEngine_Release/XEngine_SystemSdk \ -L ../../AuthorizeModule_Session -L ../../AuthorizeModule_Database -L ../../AuthorizeModule_Protocol -L ../../AuthorizeModule_Configure -L ../../XEngine_ThirdPart/jsoncpp -LIB = -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool -lXEngine_OPenSsl -lHelpComponents_Packets -lHelpComponents_DataBase -lHelpComponents_XLog -lHelpComponents_Authorize -lRfcComponents_WSProtocol -lRfcComponents_HttpServer -lXEngine_ProcFile -lXEngine_SystemApi \ +LIB = -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool -lXEngine_OPenSsl -lHelpComponents_Packets -lHelpComponents_DataBase -lHelpComponents_XLog -lHelpComponents_Authorize -lRfcComponents_WSProtocol -lRfcComponents_HttpServer -lNetHelp_APIHelp -lXEngine_ProcFile -lXEngine_SystemApi \ -lAuthorizeModule_Session -lAuthorizeModule_Database -lAuthorizeModule_Protocol -lAuthorizeModule_Configure -ljsoncpp 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_Client.o AuthorizeHTTP_Serial.o AuthorizeHTTP_User.o AuthorizeHTTP_Pass.o \ AuthorizeHTTP_Token.o ifeq ($(OS),Windows_NT) @@ -61,6 +61,8 @@ AuthorizeHTTP_Serial.o:./AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp AuthorizeHTTP_User.o:./AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp +AuthorizeHTTP_Pass.o:./AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp AuthorizeHTTP_Token.o:./AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp index b9cf4ea..3c4e706 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp @@ -8,6 +8,7 @@ XHANDLE xhHttpSocket = NULL; XHANDLE xhTCPPacket = NULL; XHANDLE xhWSPacket = NULL; XHANDLE xhHttpPacket = NULL; +XHANDLE xhMemPool = NULL; XNETHANDLE xhTCPPool = 0; XNETHANDLE xhWSPool = 0; XNETHANDLE xhHttpPool = 0; @@ -25,12 +26,22 @@ void ServiceApp_Stop(int signo) Session_Authorize_GetClient(&ppSt_ListClient, &nListCount); for (int i = 0; i < nListCount; i++) { - AUTHREG_PROTOCOL_TIME st_TimeProtocol; - memset(&st_TimeProtocol, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); + AUTHREG_PROTOCOL_TIME st_AuthTime; + AUTHSESSION_NETCLIENT st_NETClient; - if (Session_Authorize_GetTimer(ppSt_ListClient[i]->st_UserTable.st_UserInfo.tszUserName, &st_TimeProtocol)) + memset(&st_AuthTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); + memset(&st_NETClient, '\0', sizeof(AUTHSESSION_NETCLIENT)); + + if (Session_Authorize_GetClientForUser(ppSt_ListClient[i]->st_UserTable.st_UserInfo.tszUserName, &st_NETClient)) { - Database_SQLite_UserLeave(&st_TimeProtocol); + st_AuthTime.nTimeLeft = st_NETClient.nLeftTime; + st_AuthTime.nTimeONLine = st_NETClient.nOnlineTime; + st_AuthTime.enSerialType = st_NETClient.st_UserTable.enSerialType; + _tcscpy(st_AuthTime.tszUserName, ppSt_ListClient[i]->st_UserTable.st_UserInfo.tszUserName); + _tcscpy(st_AuthTime.tszLeftTime, st_NETClient.tszLeftTime); + _tcscpy(st_AuthTime.tszUserAddr, st_NETClient.tszClientAddr); + + Database_SQLite_UserLeave(&st_AuthTime); } Session_Authorize_CloseClient(ppSt_ListClient[i]->st_UserTable.st_UserInfo.tszUserName); } @@ -45,6 +56,7 @@ void ServiceApp_Stop(int signo) ManagePool_Thread_NQDestroy(xhTCPPool); ManagePool_Thread_NQDestroy(xhWSPool); ManagePool_Thread_NQDestroy(xhHttpPool); + ManagePool_Memory_Destory(xhMemPool); HelpComponents_XLog_Destroy(xhLog); Session_Authorize_Destroy(); @@ -129,6 +141,14 @@ int main(int argc, char** argv) signal(SIGABRT, ServiceApp_Stop); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化服务器信号管理成功")); + xhMemPool = ManagePool_Memory_Create(); + if (NULL == xhMemPool) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,初始化内存池失败,错误:%lX"), ManagePool_GetLastError()); + goto XENGINE_EXITAPP; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化内存池成功")); + if (!Database_SQLite_Init(st_AuthConfig.st_XSql.tszSQLite)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,初始化数据库服务失败,错误:%lX"), DBModule_GetLastError()); @@ -259,6 +279,7 @@ int main(int argc, char** argv) ManagePool_Thread_NQDestroy(xhTCPPool); ManagePool_Thread_NQDestroy(xhWSPool); ManagePool_Thread_NQDestroy(xhHttpPool); + ManagePool_Memory_Destory(xhMemPool); HelpComponents_XLog_Destroy(xhLog); Session_Authorize_Destroy(); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj index a37fa17..cc09c72 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj @@ -93,7 +93,7 @@ Level3 - true + false WIN32;_DEBUG;_CONSOLE;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true 4819 @@ -108,7 +108,7 @@ Level3 true true - true + false WIN32;NDEBUG;_CONSOLE;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true 4819 @@ -137,7 +137,7 @@ Level3 true true - true + false NDEBUG;_CONSOLE;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true MultiThreaded @@ -152,6 +152,7 @@ + @@ -165,6 +166,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 2b8c327..2795b43 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj.filters +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj.filters @@ -60,6 +60,9 @@ 源文件\AuthorizeHTTP_Get + + 源文件\AuthorizeHTTP_Post + @@ -95,5 +98,8 @@ 头文件\AuthorizeHTTP_Get + + 头文件\AuthorizeHTTP_Post + \ No newline at end of file