diff --git a/CHANGELOG b/CHANGELOG index c2b92b7f..4fcd5eef 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,25 @@ +XEngine_Authorize V3.24.0.1001 + +增加:创建客户端ID和KEY支持 +增加:oauth 支持插入会话管理器 +增加:撤销,创建和更新auth2.0协议 +更新:依赖库 +修改:http 的token验证不需要需要传递设备类型 +修复:mqtt连接失败没有响应的问题 +修复:创建顺序问题 +修复:ql扫描问题 +删除:客户端用户表的token + +added:create client id and key support for token +added:insert session management for oauth token +added:revoke create fresh for auth 2.0 +update:depend library +modify:does not need device type for token with http +fixed:does not reply when mqtt connect failure +fixed:generator order incorrect +fixed:ql scan problem +delete:client user token +================================================================ XEngine_Authorize V3.23.0.1001 ci:add agentic workflows for issue triage and auto fix diff --git a/README.en.md b/README.en.md index 2b7e94ef..2b718525 100644 --- a/README.en.md +++ b/README.en.md @@ -50,6 +50,7 @@ feature list: 18. support dynamic verifaction code 19. support mulit login and merge time 20. user bind hardware code +21. OAuth2.0 Verification Support ## install @@ -119,7 +120,7 @@ port :tcp port 5300,websocket port 5301,http management port 5302,Transmission v #### app packet service If you don't have software development capabilities, don't want to implement it yourself, or want to add authorization verification to other software, we also provide an authorization packaging service, which allows your program to directly package our verification. Program Packaging Service is a paid service, and you can package and add verification to any program. You can integrate our verification service without requiring source code or modifying your program. After packaging is complete, when it is run next time, our verification client will run first, and then your provided program will run after verification is successful, which is very convenient to use. -This service is paid, priced at 200 per package. It supports both x86 and x64 programs, and only requires you to provide your server address, port, and verification mode. The process is as follows: +This service is paid, priced at $20 per package. It supports both x86 and x64 programs, and only requires you to provide your server address, port, and verification mode. The process is as follows: Payment → Send the program to us → We package it → Verification testing → Send the packaged program to you → Completed After packaging, when the program is launched, the following window will open first. Only after a successful login will your program start. As shown below, once launched, the main interface will be displayed. After login, the main interface will close and your program will then start. ![Main Interface](./XEngine_Picture/packet_1.png "Main Interface") @@ -132,9 +133,10 @@ After packaging, when the program is launched, the following window will open fi The verification timer will automatically stop. Supported features include login, local CDKEY verification, registration, recharge, password recovery, and remaining time query. Note: This feature is only a packaging replacement. If you require full encryption, shell protection, and higher security, you must implement it yourself through code development. #### Packager -We can also provide the original packager if you have more packaging needs. The packager is currently in a promotional campaign, 500 yuan. +We can also provide the original packager if you have more packaging needs. The packager is currently in a promotional campaign, $50 . You can choose our verification program, then select the program you want to package. Then select the configuration file, and that's it. It supports automatically updating the program icon to your software icon. Configuration file supports configuring encryption and decryption communication and authentication mode +The packer can provide source code. It is written in C++. Please contact us if you need it ![Main Interface](./XEngine_Picture/packer_1.png "Main Interface") ## Participate in contribution diff --git a/README.md b/README.md index 3183dbc1..8a73f18d 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,7 @@ c c++network Authorize service 18. 支持动态验证码登录 19. 支持多端登录和合并用时 20. 用户绑定硬件码登录 +21. OAuth2.0 验证支持 ## 架构预览 XEngine_Authorize @@ -130,7 +131,7 @@ Linux or macos:直接运行即可 #### 程序打包服务 如果你没有开发软件能力或者不想自己实现或者想给其他软件添加授权验证,我们也提供了授权打包服务,这个服务可以直接让你的程序打包我们的验证. 程序打包服务是一个付费服务,你可以为任意程序打包加验证.不需要源代码不修改你的程序就可以集成我们的验证服务,当打包完成后,当下次运行,就会先运行我们的验证客户端,验证通过后再运行你提供的程序,非常方便使用. -此服务需要付费,200元3次,不限制x86或者x64位程序,你只需要告诉我们你的服务器地址端口验证模式即可.流程如下: +此服务需要付费,100元3次,不限制x86或者x64位程序,你只需要告诉我们你的服务器地址端口验证模式即可.流程如下: 付费->发送程序给我们->我们打包->测试验证->发送打包程序给你->完成 当打包后,运行程序会优先打开下面的窗口,登录成功后才会启动你的程序,如下图,开启后会显示主界面,登录后主界面会关闭,然后启动你的程序 ![主界面](./XEngine_Picture/packet_1.png "主界面") @@ -143,9 +144,10 @@ Linux or macos:直接运行即可 会自动结束验证计时.支持登录,本地CDKEY验证,注册,充值,找回密码,获取剩余时间. 注意:此功能只是替代打包,如果你想要完全的加密加壳安全性高的,必须自己使用代码开发. #### 打包器 -我们也可以提供原始打包器,如果你有更多打包需求.打包器目前优惠活动中,500元. +我们也可以提供原始打包器,如果你有更多打包需求.打包器目前优惠活动中,200元. 可以选择我们的验证程序,然后选择你要打包的程序.在选择配置文件即可,支持自动更新程序图标为你的软件图标. 配置文件支持配置加解密通信和验证模式 +打包器可以提供源码,打包器使用C++ 编写,如果你需要可以联系我们 ![主界面](./XEngine_Picture/packer_1.png "主界面") ## 参与贡献 diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index 9a988725..3e5c7b18 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 420c88cc..a9dd2243 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 ceaff53d..b69e72ca 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -30,7 +30,7 @@ "nTryMode": 1, "st_XCDKey": { "tszKeyFile": "./APPVer.key", - "tszKeyPass": "123123qa" + "tszKeyPass": "123123aa" }, "st_XToken": { "bAutoRenewal": false, @@ -54,7 +54,7 @@ } }, "XCrypto": { - "bEnable": true, + "bEnable": false, "nCryptionType": 1, "tszPassKey": "123123aa" }, diff --git a/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json b/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json index cd701240..0306d3b2 100644 --- a/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json +++ b/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json @@ -1,5 +1,7 @@ { "XVer":[ + "V3.24.0.1001 Build20260820", + "V3.23.0.1001 Build20260630", "V3.22.0.1001 Build20260316", "V3.21.0.1001 Build20251223", "V3.20.0.1001 Build20251104", diff --git a/XEngine_SQL/mysql.sql b/XEngine_SQL/mysql.sql index d0c64199..194eb215 100644 --- a/XEngine_SQL/mysql.sql +++ b/XEngine_SQL/mysql.sql @@ -3,15 +3,15 @@ Source Server : QQCloud Source Server Type : MySQL - Source Server Version : 80046 (8.0.46-0ubuntu0.24.04.2) + Source Server Version : 80046 (8.0.46-0ubuntu0.24.04.3) Source Host : 118.25.14.242:3306 Source Schema : authorize Target Server Type : MySQL - Target Server Version : 80046 (8.0.46-0ubuntu0.24.04.2) + Target Server Version : 80046 (8.0.46-0ubuntu0.24.04.3) File Encoding : 65001 - Date: 30/06/2026 10:05:45 + Date: 20/08/2026 10:18:42 */ SET NAMES utf8mb4; @@ -80,6 +80,24 @@ CREATE TABLE `Authorize_Login` ( -- Records of Authorize_Login -- ---------------------------- +-- ---------------------------- +-- Table structure for Authorize_OAuth +-- ---------------------------- +DROP TABLE IF EXISTS `Authorize_OAuth`; +CREATE TABLE `Authorize_OAuth` ( + `tszUserName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `tszTokenStr` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, + `tszUPToken` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, + `tszClientID` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `tszClientKey` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `nExpirationTime` int NOT NULL, + `tszCreateTime` datetime NOT NULL +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of Authorize_OAuth +-- ---------------------------- + -- ---------------------------- -- Table structure for Authorize_Serial -- ---------------------------- @@ -127,7 +145,6 @@ CREATE TABLE `Authorize_User` ( `ID` int NOT NULL AUTO_INCREMENT, `UserName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名', `Password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码', - `Token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Token', `LeftTime` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '剩余时间', `EmailAddr` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '电子邮件', `HardCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '设备SN', @@ -139,11 +156,11 @@ CREATE TABLE `Authorize_User` ( `UPTime` datetime NULL DEFAULT NULL COMMENT '登录时间', `CreateTime` datetime NOT NULL COMMENT '注册时间', PRIMARY KEY (`ID`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of Authorize_User -- ---------------------------- -INSERT INTO `Authorize_User` VALUES (1, 'admin', '123123aa', '0', '0', '486179@qq.com', 'DAFD2A2DAD', 1, 13699430000, 511025198881118888, 0, 0, '2022-09-21 15:06:45', '2022-09-21 15:06:45'); +INSERT INTO `Authorize_User` VALUES (1, 'admin', '123123aa', '0', '486179@qq.com', 'DAFD2A2DAD', 1, 13699430000, 511025198881118888, 0, 0, '2022-09-21 15:06:45', '2022-09-21 15:06:45'); SET FOREIGN_KEY_CHECKS = 1; diff --git a/XEngine_SQL/sqlite.sql b/XEngine_SQL/sqlite.sql index 7d868a4f..47ab23bc 100644 --- a/XEngine_SQL/sqlite.sql +++ b/XEngine_SQL/sqlite.sql @@ -1,7 +1,7 @@ /* Navicat Premium Dump SQL - Source Server : auth + Source Server : SQL_User Source Server Type : SQLite Source Server Version : 3045000 (3.45.0) Source Schema : main @@ -10,7 +10,7 @@ Target Server Version : 3045000 (3.45.0) File Encoding : 65001 - Date: 30/06/2026 10:05:03 + Date: 20/08/2026 10:18:57 */ PRAGMA foreign_keys = false; @@ -76,6 +76,24 @@ CREATE TABLE "Authorize_Login" ( -- Records of Authorize_Login -- ---------------------------- +-- ---------------------------- +-- Table structure for Authorize_OAuth +-- ---------------------------- +DROP TABLE IF EXISTS "Authorize_OAuth"; +CREATE TABLE "Authorize_OAuth" ( + "tszUserName" TEXT NOT NULL, + "tszTokenStr" TEXT, + "tszUPToken" TEXT, + "tszClientID" text, + "tszClientKey" TEXT, + "nExpirationTime" integer, + "tszCreateTime" DATE NOT NULL +); + +-- ---------------------------- +-- Records of Authorize_OAuth +-- ---------------------------- + -- ---------------------------- -- Table structure for Authorize_Serial -- ---------------------------- @@ -121,7 +139,6 @@ CREATE TABLE "Authorize_User" ( "ID" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "UserName" TEXT NOT NULL, "Password" TEXT NOT NULL, - "Token" TEXT NOT NULL, "LeftTime" TEXT NOT NULL, "EmailAddr" TEXT NOT NULL, "HardCode" TEXT, @@ -137,7 +154,7 @@ CREATE TABLE "Authorize_User" ( -- ---------------------------- -- Records of Authorize_User -- ---------------------------- -INSERT INTO "Authorize_User" VALUES (1, 'admin', '123123aa', '0', '5', '486179@qq.com', 'DAFD2A2DAD', 1, 13699430000, 511025198881118888, 0, 0, '2022-09-21 15:06:45', '2022-09-21 15:06:45'); +INSERT INTO "Authorize_User" VALUES (1, 'admin', '123123aa', '5', '486179@qq.com', 'DAFD2A2DAD', 1, 13699430000, 511025198881118888, 0, 0, '2022-09-21 15:06:45', '2022-09-21 15:06:45'); -- ---------------------------- -- Table structure for sqlite_sequence @@ -175,7 +192,7 @@ UPDATE "sqlite_sequence" SET seq = 1 WHERE name = 'Authorize_Serial'; -- ---------------------------- -- Auto increment value for Authorize_TempVer -- ---------------------------- -UPDATE "sqlite_sequence" SET seq = 41 WHERE name = 'Authorize_TempVer'; +UPDATE "sqlite_sequence" SET seq = 1 WHERE name = 'Authorize_TempVer'; -- ---------------------------- -- Auto increment value for Authorize_User diff --git a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h index 59dbbb1e..545c4557 100644 --- a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h +++ b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h @@ -161,6 +161,7 @@ typedef struct bool bSwitchBanned; //黑名单 bool bSwitchTokenLogin; //TOKEN开关 bool bSwitchHCLogin; //硬件码登录 + bool bSwitchOAuth; //是否启用OAuth bool bSwitchHWBind; //硬件码绑定 }XENGINE_FUNCTIONSWITCH; ////////////////////////////////////////////////////////////////////////// diff --git a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 3039b57f..47d6953f 100644 --- a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -376,6 +376,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_Switch(LPCXSTR lpszConfigFile, pSt_ServerConfig->bSwitchBanned = st_JsonRoot["bSwitchBanned"].asBool(); pSt_ServerConfig->bSwitchTokenLogin = st_JsonRoot["bSwitchTokenLogin"].asBool(); pSt_ServerConfig->bSwitchHCLogin = st_JsonRoot["bSwitchHCLogin"].asBool(); + pSt_ServerConfig->bSwitchOAuth = st_JsonRoot["bSwitchOAuth"].asBool(); pSt_ServerConfig->bSwitchHWBind = st_JsonRoot["bSwitchHWBind"].asBool(); return true; } \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def index e6c50ca0..df08160c 100644 --- a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def +++ b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def @@ -39,6 +39,12 @@ EXPORTS DBModule_SQLite_AnnouncementDelete DBModule_SQLite_AnnouncementList + DBModule_SQLite_OAuthInsert + DBModule_SQLite_OAuthDelete + DBModule_SQLite_OAuthList + DBModule_SQLite_OAuthUPDate + DBModule_SQLite_OAuthQuery + DBModule_MySQL_Init DBModule_MySQL_Destroy @@ -73,4 +79,10 @@ EXPORTS DBModule_MySQL_AnnouncementInsert DBModule_MySQL_AnnouncementDelete - DBModule_MySQL_AnnouncementList \ No newline at end of file + DBModule_MySQL_AnnouncementList + + DBModule_MySQL_OAuthInsert + DBModule_MySQL_OAuthDelete + DBModule_MySQL_OAuthList + DBModule_MySQL_OAuthUPDate + DBModule_MySQL_OAuthQuery \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp index 27fe7003..a845c49e 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp @@ -123,7 +123,7 @@ bool CDBModule_MySQL::DBModule_MySQL_UserRegister(AUTHREG_USERTABLE* pSt_UserInf SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; return false; } - _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_User`(UserName, Password, Token, LeftTime, EmailAddr, HardCode, CardSerialType, PhoneNumber, IDCard, nUserLevel, CountTime, CreateTime) values('%s','%s','0','%s','%s','%s','%d',%lld,%lld,%d,0,NOW())"), 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); + _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_User`(UserName, Password, LeftTime, EmailAddr, HardCode, CardSerialType, PhoneNumber, IDCard, nUserLevel, CountTime, CreateTime) values('%s','%s','%s','%s','%s','%d',%lld,%lld,%d,0,NOW())"), 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_MySQL_Execute(xhData, tszSQLStatement)) { SQLPacket_IsErrorOccur = true; @@ -187,7 +187,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USE return false; } XCHAR** pptszResult = DataBase_MySQL_GetResult(xhData, xhTable); - //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); if (NULL != pSt_UserInfo) { @@ -208,12 +207,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USE { _tcsxcpy(pSt_UserInfo->st_UserInfo.tszUserPass, pptszResult[nFliedValue]); } - //TOKEN - nFliedValue++; - if (NULL != pptszResult[nFliedValue]) - { - pSt_UserInfo->st_UserInfo.xhToken = _ttxoll(pptszResult[nFliedValue]); - } //过期时间 nFliedValue++; if (NULL != pptszResult[nFliedValue]) @@ -477,7 +470,7 @@ bool CDBModule_MySQL::DBModule_MySQL_UserSet(AUTHREG_USERTABLE* pSt_UserTable) XCHAR tszSQLStatement[1024]; //SQL语句 memset(tszSQLStatement, '\0', 1024); - _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET Password = '%s',Token = '%lld',LeftTime = '%s',EmailAddr = '%s',HardCode = '%s',CardSerialType = '%d',PhoneNumber = '%lld',IDCard = '%lld',nUserLevel = '%d',CountTime = '%lld',CreateTime = '%s' WHERE UserName = '%s'"), pSt_UserTable->st_UserInfo.tszUserPass, pSt_UserTable->st_UserInfo.xhToken, pSt_UserTable->tszLeftTime, pSt_UserTable->st_UserInfo.tszEMailAddr, pSt_UserTable->tszHardCode, pSt_UserTable->enSerialType, pSt_UserTable->st_UserInfo.nPhoneNumber, pSt_UserTable->st_UserInfo.nIDNumber, pSt_UserTable->st_UserInfo.nUserLevel, pSt_UserTable->nTimeCount, pSt_UserTable->st_UserInfo.tszCreateTime, pSt_UserTable->st_UserInfo.tszUserName); + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET Password = '%s',LeftTime = '%s',EmailAddr = '%s',HardCode = '%s',CardSerialType = '%d',PhoneNumber = '%lld',IDCard = '%lld',nUserLevel = '%d',CountTime = '%lld',CreateTime = '%s' WHERE UserName = '%s'"), pSt_UserTable->st_UserInfo.tszUserPass, pSt_UserTable->tszLeftTime, pSt_UserTable->st_UserInfo.tszEMailAddr, pSt_UserTable->tszHardCode, pSt_UserTable->enSerialType, pSt_UserTable->st_UserInfo.nPhoneNumber, pSt_UserTable->st_UserInfo.nIDNumber, pSt_UserTable->st_UserInfo.nUserLevel, pSt_UserTable->nTimeCount, pSt_UserTable->st_UserInfo.tszCreateTime, pSt_UserTable->st_UserInfo.tszUserName); //更新用户剩余时间 if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) @@ -547,8 +540,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInf for (__int64u i = 0; i < nRow; i++) { ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); - //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); - //ID int nFliedValue = 0; nFliedValue++; @@ -557,9 +548,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInf //密码 nFliedValue++; _tcsxcpy((*pppSt_UserInfo)[i]->st_UserInfo.tszUserPass, ppszResult[nFliedValue]); - //TOKEN - nFliedValue++; - (*pppSt_UserInfo)[i]->st_UserInfo.xhToken = _ttxoll(ppszResult[nFliedValue]); //过期时间 nFliedValue++; _tcsxcpy((*pppSt_UserInfo)[i]->tszLeftTime, ppszResult[nFliedValue]); @@ -821,7 +809,6 @@ bool CDBModule_MySQL::DBModule_MySQL_SerialQuery(LPCXSTR lpszSerialNumber, LPAUT return false; } ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); - //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); if (NULL != pSt_SerialTable) { @@ -921,8 +908,6 @@ bool CDBModule_MySQL::DBModule_MySQL_SerialQueryAll(AUTHREG_SERIALTABLE*** pppSt { // 获取数据库结果 ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); - //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); - int nFliedValue = 0; //ID nFliedValue++; @@ -1051,8 +1036,6 @@ bool CDBModule_MySQL::DBModule_MySQL_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer) return false; } ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); - //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); - //ID int nFliedValue = 0; nFliedValue++; @@ -1168,8 +1151,7 @@ bool CDBModule_MySQL::DBModule_MySQL_TryClear(int nThanValue, ENUM_VERIFICATION_ for (__int64u i = 0; i < nRow; i++) { ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); - //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); - + int nFliedValue = 0; AUTHREG_TEMPVER st_AuthVer; memset(&st_AuthVer, '\0', sizeof(AUTHREG_TEMPVER)); @@ -1315,8 +1297,7 @@ bool CDBModule_MySQL::DBModule_MySQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, i for (__int64u i = 0; i < nRow; i++) { ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); - //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); - + int nFliedValue = 0; //ID (*pppSt_AuthVer)[i]->nID = _ttxoi(ppszResult[nFliedValue]); @@ -1496,7 +1477,7 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedList(AUTHREG_BANNED*** pppSt_BannedUs for (__int64u i = 0; i < nRow; i++) { ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); - //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + int nFliedValue = 0; AUTHREG_BANNED st_Banned; @@ -1543,7 +1524,7 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedList(AUTHREG_BANNED*** pppSt_BannedUs memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); - //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + int nFliedValue = 0; //ID @@ -1927,7 +1908,7 @@ bool CDBModule_MySQL::DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** pp for (__int64u i = 0; i < nRow; i++) { ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); - //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + int nFliedValue = 0; (*ppppSt_Announcement)[i]->nID = _ttxoll(ppszResult[nFliedValue]); nFliedValue++; @@ -1940,6 +1921,248 @@ bool CDBModule_MySQL::DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** pp DataBase_MySQL_FreeResult(xhData, xhTable); return true; } +/******************************************************************** +函数名称:DBModule_MySQL_OAuthInsert +函数功能:OAuth插入 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要插入的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_OAuthInsert(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_OAuthInfo) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStr[8192] = {}; + + _xstprintf(tszSQLStr, _X("INSERT INTO `Authorize_OAuth`(tszUserName,tszTokenStr,tszUPToken,tszClientID,tszClientKey,nExpirationTime,tszCreateTime) VALUES('%s','%s','%s','%s','%s','%d','%s')"), pSt_OAuthInfo->tszUserName, pSt_OAuthInfo->tszTokenStr, pSt_OAuthInfo->tszUPToken, pSt_OAuthInfo->tszClientID, pSt_OAuthInfo->tszClientKey, pSt_OAuthInfo->nExpirationTime, pSt_OAuthInfo->tszCreateTime); + //插入数据库 + if (!DataBase_MySQL_Execute(xhData, tszSQLStr)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_SQLite_OAuthDelete +函数功能:OAuth删除 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要删除的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_OAuthDelete(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_OAuthInfo) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStr[8192] = {}; + + if (_tcsxlen(pSt_OAuthInfo->tszTokenStr) > 0) + { + _xstprintf(tszSQLStr, _X("DELETE FROM `Authorize_OAuth` WHERE tszTokenStr = '%s'"), pSt_OAuthInfo->tszTokenStr); + } + else + { + _xstprintf(tszSQLStr, _X("DELETE FROM `Authorize_OAuth` WHERE tszClientID = '%s'"), pSt_OAuthInfo->tszClientID); + } + //插入数据库 + if (!DataBase_MySQL_Execute(xhData, tszSQLStr)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_OAuthList +函数功能:OAuth列举 + 参数.一:ppppSt_OAuthInfo + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出列举数据 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:导出数据个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_OAuthList(AUTHREG_OAUTHINFO*** pppSt_OAuthInfo, int* pInt_ListCount) +{ + SQLPacket_IsErrorOccur = false; + + __int64u nRow = 0; + __int64u nColumn = 0; + XNETHANDLE xhTable = 0; + XCHAR** ppszResult = NULL; + XCHAR tszSQLStr[1024] = {}; + _xstprintf(tszSQLStr, _X("SELECT * FROM Authorize_OAuth")); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStr, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + *pInt_ListCount = (int)nRow; + BaseLib_Memory_Malloc((XPPPMEM)pppSt_OAuthInfo, (int)nRow, sizeof(AUTHREG_OAUTHINFO)); + //轮训所有内容 + for (__int64u i = 0; i < nRow; i++) + { + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + + int nFliedValue = 0; + _tcsxcpy((*pppSt_OAuthInfo)[i]->tszUserName, ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*pppSt_OAuthInfo)[i]->tszTokenStr, ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*pppSt_OAuthInfo)[i]->tszUPToken, ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*pppSt_OAuthInfo)[i]->tszClientID, ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*pppSt_OAuthInfo)[i]->tszClientKey, ppszResult[nFliedValue]); + nFliedValue++; + (*pppSt_OAuthInfo)[i]->nExpirationTime = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*pppSt_OAuthInfo)[i]->tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + } + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_OAuthUPDate +函数功能:更新OAuth信息 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_OAuthUPDate(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_OAuthInfo) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024] = {}; + //处理的类型 + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_OAuth SET tszTokenStr = '%s',tszUPToken = '%s' WHERE tszClientID = '%s' AND tszClientKey = '%s'"), pSt_OAuthInfo->tszTokenStr, pSt_OAuthInfo->tszUPToken, pSt_OAuthInfo->tszClientID, pSt_OAuthInfo->tszClientKey); + //插入数据库 + if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_OAuthQuery +函数功能:查询OAuth信息 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_OAuthQuery(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + SQLPacket_IsErrorOccur = false; + if (NULL == pSt_OAuthInfo) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024] = {}; + XNETHANDLE xhTable = 0; + __int64u nColumn = 0; + __int64u nRow = 0; + XCHAR** ppszResult = NULL; + + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_OAuth WHERE tszClientID = '%s' AND tszClientKey = '%s'"), pSt_OAuthInfo->tszClientID, pSt_OAuthInfo->tszClientKey); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NONE; + return false; + } + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + + int nFliedValue = 0; + _tcsxcpy(pSt_OAuthInfo->tszUserName, ppszResult[nFliedValue]); + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + _tcsxcpy(pSt_OAuthInfo->tszTokenStr, ppszResult[nFliedValue]); + } + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + _tcsxcpy(pSt_OAuthInfo->tszUPToken, ppszResult[nFliedValue]); + } + nFliedValue++; + _tcsxcpy(pSt_OAuthInfo->tszClientID, ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy(pSt_OAuthInfo->tszClientKey, ppszResult[nFliedValue]); + nFliedValue++; + pSt_OAuthInfo->nExpirationTime = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy(pSt_OAuthInfo->tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} ////////////////////////////////////////////////////////////////////////// // 保护函数 ////////////////////////////////////////////////////////////////////////// diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h index 9945666c..0f2319d3 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h @@ -55,6 +55,12 @@ class CDBModule_MySQL bool DBModule_MySQL_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement); //公告插入 bool DBModule_MySQL_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement); //公告删除 bool DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); //列举所有公告 +public: + bool DBModule_MySQL_OAuthInsert(AUTHREG_OAUTHINFO* pSt_OAuthInfo); //插入授权信息 + bool DBModule_MySQL_OAuthDelete(AUTHREG_OAUTHINFO* pSt_OAuthInfo); //删除授权信息 + bool DBModule_MySQL_OAuthList(AUTHREG_OAUTHINFO*** pppSt_OAuthInfo, int* pInt_ListCount); + bool DBModule_MySQL_OAuthUPDate(AUTHREG_OAUTHINFO* pSt_OAuthInfo); + bool DBModule_MySQL_OAuthQuery(AUTHREG_OAUTHINFO* pSt_OAuthInfo); protected: bool DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_VERIFICATION_MODULE_SERIAL_TYPE en_AuthSerialType, ENUM_VERIFICATION_MODULE_SERIAL_TYPE en_AuthUserType); //日期方式充值方式 private: diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp index 30c43e64..65afa180 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp @@ -126,7 +126,7 @@ bool CDBModule_SQLite::DBModule_SQLite_UserRegister(AUTHREG_USERTABLE* pSt_UserI SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; return false; } - _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_User(UserName, Password, Token, LeftTime, EmailAddr, HardCode, CardSerialType, PhoneNumber, IDCard, nUserLevel, CountTime, CreateTime) values('%s','%s','0','%s','%s','%s','%d',%lld,%lld,%d,0,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); + _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_User(UserName, Password, LeftTime, EmailAddr, HardCode, CardSerialType, PhoneNumber, IDCard, nUserLevel, CountTime, CreateTime) values('%s','%s','%s','%s','%s','%d',%lld,%lld,%d,0,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; @@ -201,9 +201,6 @@ bool CDBModule_SQLite::DBModule_SQLite_UserQuery(LPCXSTR lpszUserName, AUTHREG_U //密码 nFliedValue++; _tcsxcpy(pSt_UserInfo->st_UserInfo.tszUserPass, ppszResult[nFliedValue]); - //TOKEN - nFliedValue++; - pSt_UserInfo->st_UserInfo.xhToken = _ttxoll(ppszResult[nFliedValue]); //过期时间 nFliedValue++; _tcsxcpy(pSt_UserInfo->tszLeftTime, ppszResult[nFliedValue]); @@ -433,7 +430,7 @@ bool CDBModule_SQLite::DBModule_SQLite_UserSet(AUTHREG_USERTABLE* pSt_UserTable) XCHAR tszSQLStatement[1024]; //SQL语句 memset(tszSQLStatement, '\0', 1024); - _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET Password = '%s',Token = '%lld',LeftTime = '%s',EmailAddr = '%s',HardCode = '%s',CardSerialType = '%d',PhoneNumber = '%lld',IDCard = '%lld',nUserLevel = '%d',CountTime = '%lld',CreateTime = '%s' WHERE UserName = '%s'"), pSt_UserTable->st_UserInfo.tszUserPass, pSt_UserTable->st_UserInfo.xhToken, pSt_UserTable->tszLeftTime, pSt_UserTable->st_UserInfo.tszEMailAddr, pSt_UserTable->tszHardCode, pSt_UserTable->enSerialType, pSt_UserTable->st_UserInfo.nPhoneNumber, pSt_UserTable->st_UserInfo.nIDNumber, pSt_UserTable->st_UserInfo.nUserLevel, pSt_UserTable->nTimeCount, pSt_UserTable->st_UserInfo.tszCreateTime, pSt_UserTable->st_UserInfo.tszUserName); + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET Password = '%s',LeftTime = '%s',EmailAddr = '%s',HardCode = '%s',CardSerialType = '%d',PhoneNumber = '%lld',IDCard = '%lld',nUserLevel = '%d',CountTime = '%lld',CreateTime = '%s' WHERE UserName = '%s'"), pSt_UserTable->st_UserInfo.tszUserPass, pSt_UserTable->tszLeftTime, pSt_UserTable->st_UserInfo.tszEMailAddr, pSt_UserTable->tszHardCode, pSt_UserTable->enSerialType, pSt_UserTable->st_UserInfo.nPhoneNumber, pSt_UserTable->st_UserInfo.nIDNumber, pSt_UserTable->st_UserInfo.nUserLevel, pSt_UserTable->nTimeCount, pSt_UserTable->st_UserInfo.tszCreateTime, pSt_UserTable->st_UserInfo.tszUserName); //更新用户剩余时间 if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) { @@ -506,9 +503,6 @@ bool CDBModule_SQLite::DBModule_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserI //密码 nFliedValue++; _tcsxcpy((*pppSt_UserInfo)[i]->st_UserInfo.tszUserPass, ppszResult[nFliedValue]); - //TOKEN - nFliedValue++; - (*pppSt_UserInfo)[i]->st_UserInfo.xhToken = _ttxoll(ppszResult[nFliedValue]); //过期时间 nFliedValue++; _tcsxcpy((*pppSt_UserInfo)[i]->tszLeftTime, ppszResult[nFliedValue]); @@ -580,6 +574,7 @@ bool CDBModule_SQLite::DBModule_SQLite_UserLogin(LPCXSTR lpszUserName, LPCXSTR l SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_INSERT; return false; } + return true; } /******************************************************************** @@ -1797,6 +1792,242 @@ bool CDBModule_SQLite::DBModule_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** DataBase_SQLite_FreeTable(ppszResult); return true; } +/******************************************************************** +函数名称:DBModule_SQLite_OAuthInsert +函数功能:OAuth插入 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要插入的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_SQLite::DBModule_SQLite_OAuthInsert(AUTHREG_OAUTHINFO *pSt_OAuthInfo) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_OAuthInfo) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStr[8192] = {}; + + _xstprintf(tszSQLStr, _X("INSERT INTO Authorize_OAuth(tszUserName,tszTokenStr,tszUPToken,tszClientID,tszClientKey,nExpirationTime,tszCreateTime) VALUES('%s','%s','%s','%s','%s','%d','%s')"), pSt_OAuthInfo->tszUserName, pSt_OAuthInfo->tszTokenStr, pSt_OAuthInfo->tszUPToken, pSt_OAuthInfo->tszClientID, pSt_OAuthInfo->tszClientKey, pSt_OAuthInfo->nExpirationTime, pSt_OAuthInfo->tszCreateTime); + //插入数据库 + if (!DataBase_SQLite_Exec(xhData, tszSQLStr)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_SQLite_OAuthDelete +函数功能:OAuth删除 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要删除的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_SQLite::DBModule_SQLite_OAuthDelete(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_OAuthInfo) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStr[8192] = {}; + if (_tcsxlen(pSt_OAuthInfo->tszTokenStr) > 0) + { + _xstprintf(tszSQLStr, _X("DELETE FROM `Authorize_OAuth` WHERE tszTokenStr = '%s'"), pSt_OAuthInfo->tszTokenStr); + } + else + { + _xstprintf(tszSQLStr, _X("DELETE FROM `Authorize_OAuth` WHERE tszClientID = '%s'"), pSt_OAuthInfo->tszClientID); + } + //插入数据库 + if (!DataBase_SQLite_Exec(xhData, tszSQLStr)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_SQLite_OAuthList +函数功能:OAuth列举 + 参数.一:ppppSt_OAuthInfo + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出列举数据 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:导出数据个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_SQLite::DBModule_SQLite_OAuthList(AUTHREG_OAUTHINFO*** ppppSt_OAuthInfo, int* pInt_ListCount) +{ + SQLPacket_IsErrorOccur = false; + + int nRow = 0; + int nColumn = 0; + XCHAR** ppszResult = NULL; + XCHAR tszSQLStr[1024] = {}; + + _xstprintf(tszSQLStr, _X("SELECT * FROM Authorize_OAuth")); + if (!DataBase_SQLite_GetTable(xhData, tszSQLStr, &ppszResult, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + *pInt_ListCount = nRow; + + BaseLib_Memory_Malloc((XPPPMEM)ppppSt_OAuthInfo, nRow, sizeof(AUTHREG_OAUTHINFO)); + int nFliedValue = nColumn; + //轮训所有内容 + for (int i = 0; i < nRow; i++) + { + _tcsxcpy((*ppppSt_OAuthInfo)[i]->tszUserName, ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*ppppSt_OAuthInfo)[i]->tszTokenStr, ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*ppppSt_OAuthInfo)[i]->tszUPToken, ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*ppppSt_OAuthInfo)[i]->tszClientID, ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*ppppSt_OAuthInfo)[i]->tszClientKey, ppszResult[nFliedValue]); + nFliedValue++; + (*ppppSt_OAuthInfo)[i]->nExpirationTime = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*ppppSt_OAuthInfo)[i]->tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + } + DataBase_SQLite_FreeTable(ppszResult); + return true; +} +/******************************************************************** +函数名称:DBModule_SQLite_OAuthUPDate +函数功能:更新OAuth信息 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_SQLite::DBModule_SQLite_OAuthUPDate(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_OAuthInfo) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024] = {}; + //处理的类型 + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_OAuth SET tszTokenStr = '%s',tszUPToken = '%s' WHERE tszClientID = '%s' AND tszClientKey = '%s'"), pSt_OAuthInfo->tszTokenStr, pSt_OAuthInfo->tszUPToken, pSt_OAuthInfo->tszClientID, pSt_OAuthInfo->tszClientKey); + //插入数据库 + if (!DataBase_SQLite_Exec(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_SQLite_OAuthQuery +函数功能:查询OAuth信息 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_SQLite::DBModule_SQLite_OAuthQuery(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_OAuthInfo) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024] = {}; + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_OAuth WHERE tszClientID = '%s' AND tszClientKey = '%s'"), pSt_OAuthInfo->tszClientID, pSt_OAuthInfo->tszClientKey); + int nRow = 0; + int nColumn = 0; + XCHAR** ppszResult = NULL; + if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTFOUND; + return false; + } + int nFliedValue = nColumn; + _tcsxcpy(pSt_OAuthInfo->tszUserName, ppszResult[nFliedValue]); + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + _tcsxcpy(pSt_OAuthInfo->tszTokenStr, ppszResult[nFliedValue]); + } + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + _tcsxcpy(pSt_OAuthInfo->tszUPToken, ppszResult[nFliedValue]); + } + nFliedValue++; + _tcsxcpy(pSt_OAuthInfo->tszClientID, ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy(pSt_OAuthInfo->tszClientKey, ppszResult[nFliedValue]); + nFliedValue++; + pSt_OAuthInfo->nExpirationTime = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy(pSt_OAuthInfo->tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + + DataBase_SQLite_FreeTable(ppszResult); + return true; +} ////////////////////////////////////////////////////////////////////////// // 保护函数 ////////////////////////////////////////////////////////////////////////// diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h index 065d0979..6887a1cb 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h @@ -55,6 +55,12 @@ class CDBModule_SQLite bool DBModule_SQLite_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement); bool DBModule_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement); bool DBModule_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); +public: + bool DBModule_SQLite_OAuthInsert(AUTHREG_OAUTHINFO* pSt_OAuthInfo); + bool DBModule_SQLite_OAuthDelete(AUTHREG_OAUTHINFO* pSt_OAuthInfo); + bool DBModule_SQLite_OAuthList(AUTHREG_OAUTHINFO*** pppSt_OAuthInfo, int* pInt_ListCount); + bool DBModule_SQLite_OAuthUPDate(AUTHREG_OAUTHINFO* pSt_OAuthInfo); + bool DBModule_SQLite_OAuthQuery(AUTHREG_OAUTHINFO* pSt_OAuthInfo); protected: bool DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_VERIFICATION_MODULE_SERIAL_TYPE en_AuthSerialType, ENUM_VERIFICATION_MODULE_SERIAL_TYPE en_AuthUserType); private: diff --git a/XEngine_Source/AuthorizeModule_Database/Database_Define.h b/XEngine_Source/AuthorizeModule_Database/Database_Define.h index e024ac4b..dbf52472 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_Define.h +++ b/XEngine_Source/AuthorizeModule_Database/Database_Define.h @@ -552,6 +552,81 @@ extern "C" bool DBModule_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Ann 备注: *********************************************************************/ extern "C" bool DBModule_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); +/******************************************************************** +函数名称:DBModule_SQLite_OAuthInsert +函数功能:OAuth插入 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要插入的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_SQLite_OAuthInsert(AUTHREG_OAUTHINFO* pSt_OAuthInfo); +/******************************************************************** +函数名称:DBModule_SQLite_OAuthDelete +函数功能:OAuth删除 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要删除的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_SQLite_OAuthDelete(AUTHREG_OAUTHINFO* pSt_OAuthInfo); +/******************************************************************** +函数名称:DBModule_SQLite_OAuthList +函数功能:OAuth列举 + 参数.一:ppppSt_OAuthInfo + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出列举数据 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:导出数据个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_SQLite_OAuthList(AUTHREG_OAUTHINFO*** pppSt_OAuthInfo, int* pInt_ListCount); +/******************************************************************** +函数名称:DBModule_SQLite_OAuthUPDate +函数功能:更新OAuth信息 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_SQLite_OAuthUPDate(AUTHREG_OAUTHINFO* pSt_OAuthInfo); +/******************************************************************** +函数名称:DBModule_SQLite_OAuthQuery +函数功能:查询OAuth信息 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_SQLite_OAuthQuery(AUTHREG_OAUTHINFO* pSt_OAuthInfo); /************************************************************************/ /* MYSQL数据库服务导出函数 */ /************************************************************************/ @@ -1087,4 +1162,79 @@ extern "C" bool DBModule_MySQL_UserTime(LPCXSTR lpszUserName, __int64x nTime); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool DBModule_MySQL_QueryLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr); \ No newline at end of file +extern "C" bool DBModule_MySQL_QueryLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr); +/******************************************************************** +函数名称:DBModule_MySQL_OAuthInsert +函数功能:OAuth插入 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要插入的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_OAuthInsert(AUTHREG_OAUTHINFO* pSt_OAuthInfo); +/******************************************************************** +函数名称:DBModule_SQLite_OAuthDelete +函数功能:OAuth删除 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要删除的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_OAuthDelete(AUTHREG_OAUTHINFO* pSt_OAuthInfo); +/******************************************************************** +函数名称:DBModule_MySQL_OAuthList +函数功能:OAuth列举 + 参数.一:ppppSt_OAuthInfo + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出列举数据 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:导出数据个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_OAuthList(AUTHREG_OAUTHINFO*** pppSt_OAuthInfo, int* pInt_ListCount); +/******************************************************************** +函数名称:DBModule_MySQL_OAuthUPDate +函数功能:更新OAuth信息 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_OAuthUPDate(AUTHREG_OAUTHINFO* pSt_OAuthInfo); +/******************************************************************** +函数名称:DBModule_MySQL_OAuthQuery +函数功能:查询OAuth信息 + 参数.一:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_OAuthQuery(AUTHREG_OAUTHINFO* pSt_OAuthInfo); \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Database/Database_Error.h b/XEngine_Source/AuthorizeModule_Database/Database_Error.h index aa6e198e..893a8330 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_Error.h +++ b/XEngine_Source/AuthorizeModule_Database/Database_Error.h @@ -36,4 +36,5 @@ #define ERROR_AUTHORIZE_MODULE_DATABASE_NONE 0x0030018 //获取失败,没有任何记录 #define ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE 0x0030019 //没有启用.不禁用 #define ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT 0x0030020 //超过禁用时间 -#define ERROR_AUTHORIZE_MODULE_DATABASE_BANNED 0x0030021 //被禁用 \ No newline at end of file +#define ERROR_AUTHORIZE_MODULE_DATABASE_BANNED 0x0030021 //被禁用 +#define ERROR_AUTHORIZE_MODULE_DATABASE_NOTFOUND 0x0030022 //没有找到 \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Database/pch.cpp b/XEngine_Source/AuthorizeModule_Database/pch.cpp index fab208bb..b0769cfd 100644 --- a/XEngine_Source/AuthorizeModule_Database/pch.cpp +++ b/XEngine_Source/AuthorizeModule_Database/pch.cpp @@ -151,6 +151,26 @@ extern "C" bool DBModule_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT * **ppppSt { return m_DBSQLite.DBModule_SQLite_AnnouncementList(ppppSt_Announcement, pInt_ListCount); } +extern "C" bool DBModule_SQLite_OAuthInsert(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + return m_DBSQLite.DBModule_SQLite_OAuthInsert(pSt_OAuthInfo); +} +extern "C" bool DBModule_SQLite_OAuthDelete(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + return m_DBSQLite.DBModule_SQLite_OAuthDelete(pSt_OAuthInfo); +} +extern "C" bool DBModule_SQLite_OAuthList(AUTHREG_OAUTHINFO*** pppSt_OAuthInfo, int* pInt_ListCount) +{ + return m_DBSQLite.DBModule_SQLite_OAuthList(pppSt_OAuthInfo, pInt_ListCount); +} +extern "C" bool DBModule_SQLite_OAuthUPDate(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + return m_DBSQLite.DBModule_SQLite_OAuthUPDate(pSt_OAuthInfo); +} +extern "C" bool DBModule_SQLite_OAuthQuery(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + return m_DBSQLite.DBModule_SQLite_OAuthQuery(pSt_OAuthInfo); +} /************************************************************************/ /* MYSQL数据库服务导出函数 */ /************************************************************************/ @@ -273,4 +293,24 @@ extern "C" bool DBModule_MySQL_UserTime(LPCXSTR lpszUserName, __int64x nTime) extern "C" bool DBModule_MySQL_QueryLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr) { return m_DBMySQL.DBModule_MySQL_QueryLogin(lpszUserName, lpszUserAddr); +} +extern "C" bool DBModule_MySQL_OAuthInsert(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + return m_DBMySQL.DBModule_MySQL_OAuthInsert(pSt_OAuthInfo); +} +extern "C" bool DBModule_MySQL_OAuthDelete(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + return m_DBMySQL.DBModule_MySQL_OAuthDelete(pSt_OAuthInfo); +} +extern "C" bool DBModule_MySQL_OAuthList(AUTHREG_OAUTHINFO*** pppSt_OAuthInfo, int* pInt_ListCount) +{ + return m_DBMySQL.DBModule_MySQL_OAuthList(pppSt_OAuthInfo, pInt_ListCount); +} +extern "C" bool DBModule_MySQL_OAuthUPDate(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + return m_DBMySQL.DBModule_MySQL_OAuthUPDate(pSt_OAuthInfo); +} +extern "C" bool DBModule_MySQL_OAuthQuery(AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + return m_DBMySQL.DBModule_MySQL_OAuthQuery(pSt_OAuthInfo); } \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def index 3cfecc67..d579d066 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def +++ b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def @@ -16,6 +16,8 @@ EXPORTS Protocol_Packet_HttpBanned Protocol_Packet_HttpAnnouncement Protocol_Packet_HttpTryList + Protocol_Packet_HttpOAuth + Protocol_Packet_HttpOAuth2 Protocol_Parse_WSHdr Protocol_Parse_HttpParseToken diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h index 91209425..ebae8adc 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h @@ -399,6 +399,54 @@ extern "C" bool Protocol_Packet_HttpAnnouncement(XCHAR* ptszMsgBuffer, int* pInt 备注: *********************************************************************/ extern "C" bool Protocol_Packet_HttpTryList(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_TEMPVER*** pppSt_TryList, int nListCount); +/******************************************************************** +函数名称:Protocol_Packet_HttpOAuth +函数功能:打包创建的OAuth信息 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:导出包装好的缓冲区 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出包装大小 + 参数.三:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要打包的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Protocol_Packet_HttpOAuth(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_OAUTHINFO* pSt_OAuthInfo); +/******************************************************************** +函数名称:Protocol_Packet_HttpOAuth2 +函数功能:打包标准的OAuth信息 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:导出包装好的缓冲区 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出包装大小 + 参数.三:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要打包的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Protocol_Packet_HttpOAuth2(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_OAUTHINFO* pSt_OAuthInfo); /************************************************************************/ /* 解析类协议 */ /************************************************************************/ diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp index b41367b1..0af0654e 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp @@ -75,9 +75,7 @@ bool CProtocol_Packet::Protocol_Packet_HDRComm(XCHAR* ptszMsgBuffer, int* pInt_M { if (0 == pSt_ProtocolHdr->wReserve) { - int nRVLen = 0; int nListCount = 6; - XCHAR tszRVBuffer[1024]; MQTTPROTOCOL_HDRPROPERTY** ppSt_HDRProperty; BaseLib_Memory_Malloc((XPPPMEM)&ppSt_HDRProperty, nListCount, sizeof(MQTTPROTOCOL_HDRPROPERTY)); @@ -959,6 +957,115 @@ bool CProtocol_Packet::Protocol_Packet_HttpTryList(XCHAR* ptszMsgBuffer, int* pI st_JsonRoot["Count"] = st_JsonArray.size(); st_JsonRoot["Array"] = st_JsonArray; + *pInt_MsgLen = st_JsonRoot.toStyledString().length(); + memcpy(ptszMsgBuffer, st_JsonRoot.toStyledString().c_str(), *pInt_MsgLen); + return true; +} +/******************************************************************** +函数名称:Protocol_Packet_HttpOAuth +函数功能:打包创建的OAuth信息 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:导出包装好的缓冲区 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出包装大小 + 参数.三:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要打包的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CProtocol_Packet::Protocol_Packet_HttpOAuth(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + Protocol_IsErrorOccur = false; + + if ((NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen)) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_AUTHORIZE_MODULE_PROTOCOL_PARAMENT; + return false; + } + Protocol_IsErrorOccur = false; + + if ((NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen)) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_AUTHORIZE_MODULE_PROTOCOL_PARAMENT; + return false; + } + Json::Value st_JsonRoot; + Json::Value st_JsonOAuth; + + st_JsonOAuth["tszClientID"] = pSt_OAuthInfo->tszClientID; + st_JsonOAuth["tszClientKey"] = pSt_OAuthInfo->tszClientKey; + st_JsonOAuth["tszUserName"] = pSt_OAuthInfo->tszUserName; + st_JsonOAuth["nExpirationTime"] = pSt_OAuthInfo->nExpirationTime; + + st_JsonRoot["msg"] = "success"; + st_JsonRoot["code"] = 0; + st_JsonRoot["st_OAuthInfo"] = st_JsonOAuth; + + *pInt_MsgLen = st_JsonRoot.toStyledString().length(); + memcpy(ptszMsgBuffer, st_JsonRoot.toStyledString().c_str(), *pInt_MsgLen); + return true; +} +/******************************************************************** +函数名称:Protocol_Packet_HttpOAuth2 +函数功能:打包标准的OAuth信息 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:导出包装好的缓冲区 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出包装大小 + 参数.三:pSt_OAuthInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要打包的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CProtocol_Packet::Protocol_Packet_HttpOAuth2(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + Protocol_IsErrorOccur = false; + + if ((NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen)) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_AUTHORIZE_MODULE_PROTOCOL_PARAMENT; + return false; + } + Protocol_IsErrorOccur = false; + + if ((NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen)) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_AUTHORIZE_MODULE_PROTOCOL_PARAMENT; + return false; + } + Json::Value st_JsonRoot; + + st_JsonRoot["access_token"] = pSt_OAuthInfo->tszTokenStr; + st_JsonRoot["refresh_token"] = pSt_OAuthInfo->tszUPToken; + st_JsonRoot["token_type"] = "Bearer"; + st_JsonRoot["expires_in"] = pSt_OAuthInfo->nExpirationTime; + *pInt_MsgLen = st_JsonRoot.toStyledString().length(); memcpy(ptszMsgBuffer, st_JsonRoot.toStyledString().c_str(), *pInt_MsgLen); return true; diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.h b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.h index ce4e0e9a..99b81f43 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.h +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.h @@ -31,6 +31,8 @@ class CProtocol_Packet bool Protocol_Packet_HttpBanned(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_BANNED*** pppSt_BannedUser, int nUserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int nAddrCount); bool Protocol_Packet_HttpAnnouncement(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_ANNOUNCEMENT*** pppSt_Announcement, int nListCount); bool Protocol_Packet_HttpTryList(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_TEMPVER*** pppSt_TryList, int nListCount); + bool Protocol_Packet_HttpOAuth(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_OAUTHINFO* pSt_OAuthInfo); + bool Protocol_Packet_HttpOAuth2(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_OAUTHINFO* pSt_OAuthInfo); protected: private: }; \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp index 40a5ed70..ec6a236b 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp @@ -1134,5 +1134,40 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseAnnouncement(LPCXSTR lpszMsgBuffer { pSt_Announcement->nID = st_JsonObject["nID"].asInt64(); } + return true; +} + +bool CProtocol_Parse::Protocol_Parse_HttpParseOAuth(LPCXSTR lpszMsgBuffer, int nMsgLen, AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + Protocol_IsErrorOccur = false; + + if ((NULL == lpszMsgBuffer) || (NULL == pSt_OAuthInfo)) + { + 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_JsonObject = st_JsonRoot["st_OAuth"]; + + if (!st_JsonObject["tszClientID"].isNull()) + { + _tcsxcpy(pSt_OAuthInfo->tszClientID, st_JsonObject["tszClientID"].asCString()); + } + if (!st_JsonObject["tszClientKey"].isNull()) + { + _tcsxcpy(pSt_OAuthInfo->tszClientKey, st_JsonObject["tszClientKey"].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 2260153b..b41941dc 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.h +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.h @@ -34,6 +34,7 @@ class CProtocol_Parse bool Protocol_Parse_HttpParseBanned(LPCXSTR lpszMsgBuffer, int nMsgLen, AUTHREG_BANNED* pSt_AuthBanned); bool Protocol_Parse_HttpParseBanned2(LPCXSTR lpszMsgBuffer, int nMsgLen, int* pInt_POSStart, int* pInt_POSEnd); bool Protocol_Parse_HttpParseAnnouncement(LPCXSTR lpszMsgBuffer, int nMsgLen, AUTHREG_ANNOUNCEMENT* pSt_Announcement); + bool Protocol_Parse_HttpParseOAuth(LPCXSTR lpszMsgBuffer, int nMsgLen, AUTHREG_OAUTHINFO* pSt_UserAuth); 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 af329aa0..981604ff 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/pch.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/pch.cpp @@ -83,6 +83,14 @@ extern "C" bool Protocol_Packet_HttpTryList(XCHAR * ptszMsgBuffer, int* pInt_Msg { return m_ProtocolPacket.Protocol_Packet_HttpTryList(ptszMsgBuffer, pInt_MsgLen, pppSt_TryList, nListCount); } +extern "C" bool Protocol_Packet_HttpOAuth(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + return m_ProtocolPacket.Protocol_Packet_HttpOAuth(ptszMsgBuffer, pInt_MsgLen, pSt_OAuthInfo); +} +extern "C" bool Protocol_Packet_HttpOAuth2(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_OAUTHINFO* pSt_OAuthInfo) +{ + return m_ProtocolPacket.Protocol_Packet_HttpOAuth2(ptszMsgBuffer, pInt_MsgLen, pSt_OAuthInfo); +} /************************************************************************/ /* 解析类协议 */ /************************************************************************/ diff --git a/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp b/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp index 9815f1b8..592b9d53 100644 --- a/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp +++ b/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp @@ -477,9 +477,6 @@ XHTHREAD CSession_Authorize::Session_Authorize_ActiveThread(XPVOID lParam) stl_ListIterator->nOnlineTime = nOnlineSpan; _tcsxcpy(stl_ListIterator->tszLeftTime, stl_ListIterator->st_UserTable.tszLeftTime); //计算时间是否超过! - AUTHREG_PROTOCOL_TIME st_ProtocolTimer; - memset(&st_ProtocolTimer, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); - st_ProtocolTimer.nTimeONLine = nOnlineSpan; st_ProtocolTimer.nTimeLeft = nLeftTime; st_ProtocolTimer.nNetType = stl_ListIterator->nNetType; diff --git a/XEngine_Source/XAuth_Protocol.h b/XEngine_Source/XAuth_Protocol.h index f72e3109..ab83e2ff 100644 --- a/XEngine_Source/XAuth_Protocol.h +++ b/XEngine_Source/XAuth_Protocol.h @@ -123,4 +123,15 @@ typedef struct XCHAR tszContext[4096]; //信息 XCHAR tszCreateTime[64]; //创建时间 __int64x nID; //ID -}AUTHREG_ANNOUNCEMENT, * LPAUTHREG_ANNOUNCEMENT; \ No newline at end of file +}AUTHREG_ANNOUNCEMENT, * LPAUTHREG_ANNOUNCEMENT; +//OAuth信息 +typedef struct +{ + XCHAR tszUserName[128]; //用户名 + XCHAR tszTokenStr[128]; //Token + XCHAR tszUPToken[128]; //Token + XCHAR tszClientID[128]; //ID + XCHAR tszClientKey[128]; //秘钥 + XCHAR tszCreateTime[64]; //创建时间 + int nExpirationTime; //过期时间 +}AUTHREG_OAUTHINFO; \ No newline at end of file diff --git a/XEngine_Source/XEngine.sln b/XEngine_Source/XEngine.sln index 396adf12..ff8a8c71 100644 --- a/XEngine_Source/XEngine.sln +++ b/XEngine_Source/XEngine.sln @@ -76,6 +76,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_Verification", "XEn EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_MSGNotify", "XEngine_DependLibrary\XEngine_Module\XEngine_MSGNotify\XEngine_MSGNotify.vcxproj", "{E1087BA3-1074-4C6A-B770-A53B7BA1F4EA}" + ProjectSection(ProjectDependencies) = postProject + {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} = {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_Token", "XEngine_DependLibrary\XEngine_Module\XEngine_Token\XEngine_Token.vcxproj", "{E17E889F-D826-413F-854E-DBA6000B4DA7}" EndProject 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 9110928e..0af111f6 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 @@ -141,7 +141,6 @@ BOOL CDialog_Modify::OnInitDialog() m_EditUser.SetWindowText(A2W(st_JsonObject["st_UserInfo"]["tszUserName"].asCString())); m_EditPass.SetWindowText(A2W(st_JsonObject["st_UserInfo"]["tszUserPass"].asCString())); m_EditEMail.SetWindowText(A2W(st_JsonObject["st_UserInfo"]["tszEMailAddr"].asCString())); - m_EditUserToken.SetWindowText(std::to_wstring(st_JsonObject["st_UserInfo"]["xhToken"].asInt64()).c_str()); m_EditCountTime.SetWindowText(std::to_wstring(st_JsonObject["st_UserInfo"]["nTimeCount"].asInt64()).c_str()); COleDateTime m_OleDTime; if (m_OleDTime.ParseDateTime(A2W(st_JsonObject["st_UserInfo"]["tszCreateTime"].asCString()))) @@ -187,9 +186,6 @@ void CDialog_Modify::OnBnClickedButton2() m_EditPass.GetWindowText(m_StrUserInfo); strcpy(st_UserTable.st_UserInfo.tszUserPass, W2A(m_StrUserInfo.GetBuffer())); m_StrUserInfo.ReleaseBuffer(); - m_EditUserToken.GetWindowText(m_StrUserInfo); - st_UserTable.st_UserInfo.xhToken = _ttxoll(W2A(m_StrUserInfo.GetBuffer())); - m_StrUserInfo.ReleaseBuffer(); m_EditCountTime.GetWindowText(m_StrUserInfo); st_UserTable.nTimeCount = _ttxoll(W2A(m_StrUserInfo.GetBuffer())); m_StrUserInfo.ReleaseBuffer(); @@ -244,7 +240,6 @@ void CDialog_Modify::OnBnClickedButton2() st_JsonUser["tszUserName"] = st_UserTable.st_UserInfo.tszUserName; st_JsonUser["tszUserPass"] = st_UserTable.st_UserInfo.tszUserPass; - st_JsonUser["xhToken"] = st_UserTable.st_UserInfo.xhToken; st_JsonUser["tszEMailAddr"] = st_UserTable.st_UserInfo.tszEMailAddr; st_JsonUser["tszCreateTime"] = st_UserTable.st_UserInfo.tszCreateTime; st_JsonUser["nPhoneNumber"] = st_UserTable.st_UserInfo.nPhoneNumber; 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 fa596672..7f4b564b 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 @@ -55,15 +55,14 @@ BOOL CDialog_User::OnInitDialog() // TODO: 在此添加额外的初始化 m_ListCtrlClient.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 40); m_ListCtrlClient.InsertColumn(1, _T("用户名"), LVCFMT_LEFT, 120); - m_ListCtrlClient.InsertColumn(2, _T("TOKEN"), LVCFMT_LEFT, 60); - m_ListCtrlClient.InsertColumn(3, _T("IP地址"), LVCFMT_LEFT, 100); - m_ListCtrlClient.InsertColumn(4, _T("级别"), LVCFMT_LEFT, 80); - m_ListCtrlClient.InsertColumn(5, _T("在线时间(秒钟)"), LVCFMT_LEFT, 150); - m_ListCtrlClient.InsertColumn(6, _T("剩余时间/过期时间"), LVCFMT_LEFT, 150); - m_ListCtrlClient.InsertColumn(7, _T("充值类型"), LVCFMT_LEFT, 80); - m_ListCtrlClient.InsertColumn(8, _T("设备类型"), LVCFMT_LEFT, 80); - m_ListCtrlClient.InsertColumn(9, _T("是否在线"), LVCFMT_LEFT, 80); - m_ListCtrlClient.InsertColumn(10, _T("总在线时长"), LVCFMT_LEFT, 80); + m_ListCtrlClient.InsertColumn(2, _T("IP地址"), LVCFMT_LEFT, 100); + m_ListCtrlClient.InsertColumn(3, _T("级别"), LVCFMT_LEFT, 80); + m_ListCtrlClient.InsertColumn(4, _T("在线时间(秒钟)"), LVCFMT_LEFT, 150); + m_ListCtrlClient.InsertColumn(5, _T("剩余时间/过期时间"), LVCFMT_LEFT, 150); + m_ListCtrlClient.InsertColumn(6, _T("充值类型"), LVCFMT_LEFT, 80); + m_ListCtrlClient.InsertColumn(7, _T("设备类型"), LVCFMT_LEFT, 80); + m_ListCtrlClient.InsertColumn(8, _T("是否在线"), LVCFMT_LEFT, 80); + m_ListCtrlClient.InsertColumn(9, _T("总在线时长"), LVCFMT_LEFT, 80); m_ListCtrlClient.SetExtendedStyle(LVS_EX_FULLROWSELECT); m_EditFlushTime.SetWindowText(_T("10")); @@ -157,12 +156,11 @@ void CDialog_User::OnBnClickedButton1() m_ListCtrlClient.InsertItem(i, _T("")); m_ListCtrlClient.SetItemText(i, 0, tszIndex); m_ListCtrlClient.SetItemText(i, 1, A2W(st_JsonObject["tszUserName"].asCString())); - m_ListCtrlClient.SetItemText(i, 2, std::to_wstring(st_JsonObject["xhToken"].asInt64()).c_str()); if (!st_JsonArray["tszClientAddr"].isNull()) { - m_ListCtrlClient.SetItemText(i, 3, A2W(st_JsonArray["tszClientAddr"].asCString())); + m_ListCtrlClient.SetItemText(i, 2, A2W(st_JsonArray["tszClientAddr"].asCString())); } - m_ListCtrlClient.SetItemText(i, 4, A2W(lpszXLevelType[st_JsonObject["nUserLevel"].asInt() + 1])); + m_ListCtrlClient.SetItemText(i, 3, A2W(lpszXLevelType[st_JsonObject["nUserLevel"].asInt() + 1])); if (1 == st_JsonObject["nUserState"].asInt()) { @@ -171,13 +169,13 @@ void CDialog_User::OnBnClickedButton1() __int64x nTime = st_JsonArray["nOnlineTime"].asUInt64(); _stprintf(tszTimeStr, _T("%lld"), nTime); - m_ListCtrlClient.SetItemText(i, 5, tszTimeStr); + m_ListCtrlClient.SetItemText(i, 4, tszTimeStr); } - m_ListCtrlClient.SetItemText(i, 6, A2W(st_JsonArray["tszLeftTime"].asCString())); - m_ListCtrlClient.SetItemText(i, 7, A2W(lpszXSerialType[st_JsonArray["enSerialType"].asInt()])); - m_ListCtrlClient.SetItemText(i, 8, A2W(lpszXDevType[st_JsonArray["enDeviceType"].asInt()])); - m_ListCtrlClient.SetItemText(i, 9, lpszStuType[st_JsonObject["nUserState"].asInt()]); - m_ListCtrlClient.SetItemText(i, 10, std::to_wstring(st_JsonObject["nTimeCount"].asInt64()).c_str()); + m_ListCtrlClient.SetItemText(i, 5, A2W(st_JsonArray["tszLeftTime"].asCString())); + m_ListCtrlClient.SetItemText(i, 6, A2W(lpszXSerialType[st_JsonArray["enSerialType"].asInt()])); + m_ListCtrlClient.SetItemText(i, 7, A2W(lpszXDevType[st_JsonArray["enDeviceType"].asInt()])); + m_ListCtrlClient.SetItemText(i, 8, lpszStuType[st_JsonObject["nUserState"].asInt()]); + m_ListCtrlClient.SetItemText(i, 9, std::to_wstring(st_JsonObject["nTimeCount"].asInt64()).c_str()); } BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBuffer); UpdateWindow(); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_GetTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_GetTask.cpp index 1a8c843e..dc8bf0d8 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_GetTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_GetTask.cpp @@ -8,7 +8,6 @@ bool XEngine_AuthorizeHTTP_GetTask(LPCXSTR lpszClientAddr, XCHAR** pptszList, in XCHAR tszURLValue[128] = {}; LPCXSTR lpszAPITime = _X("time"); LPCXSTR lpszAPIDCode = _X("dcode"); - LPCXSTR lpszAPINotice = _X("notice"); memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); BaseLib_String_GetKeyValue(pptszList[0], "=", tszURLKey, tszURLValue); @@ -27,19 +26,19 @@ bool XEngine_AuthorizeHTTP_GetTask(LPCXSTR lpszClientAddr, XCHAR** pptszList, in XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,获取时间失败,无法继续,错误:%X"), lpszClientAddr, Session_GetLastError()); return false; } - int nListCount = 0; + int nClientCount = 0; AUTHSESSION_NETCLIENT** ppSt_ListClient; - if (!Session_Authorize_GetClient(&ppSt_ListClient, &nListCount, st_UserInfo.tszUserName)) + if (!Session_Authorize_GetClient(&ppSt_ListClient, &nClientCount, st_UserInfo.tszUserName)) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, ERROR_AUTHORIZE_PROTOCOL_NOTFOUND, "user not found"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户名:%s,获取时间失败,无法继续,错误:%X"), lpszClientAddr, st_UserInfo.tszUserName, Session_GetLastError()); return false; } - Protocol_Packet_UserTime(tszSDBuffer, &nSDLen, &ppSt_ListClient, nListCount); - BaseLib_Memory_Free((XPPPMEM)&ppSt_ListClient, nListCount); + Protocol_Packet_UserTime(tszSDBuffer, &nSDLen, &ppSt_ListClient, nClientCount); + BaseLib_Memory_Free((XPPPMEM)&ppSt_ListClient, nClientCount); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,用户名:%s,获取时间成功,用户同时在线数:%d"), lpszClientAddr, st_UserInfo.tszUserName, nListCount); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,用户名:%s,获取时间成功,用户同时在线数:%d"), lpszClientAddr, st_UserInfo.tszUserName, nClientCount); } else if (0 == _tcsxncmp(lpszAPIDCode, tszURLValue, _tcsxlen(lpszAPIDCode))) { 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 eb5e9def..b4445a4b 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 @@ -3,28 +3,25 @@ bool XEngine_AuthorizeHTTP_Token(LPCXSTR lpszClientAddr, XCHAR** pptszList, int nListCount) { int nSDLen = 4096; - XCHAR tszSDBuffer[4096]; - XCHAR tszURLKey[128]; - XCHAR tszURLValue[128]; + XCHAR tszSDBuffer[4096] = {}; + XCHAR tszURLKey[128] = {}; + XCHAR tszURLValue[128] = {}; LPCXSTR lpszAPILogin = _X("login"); LPCXSTR lpszAPIUPDate = _X("update"); LPCXSTR lpszAPIClose = _X("close"); + LPCXSTR lpszAPICreate = _X("create"); - memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); - memset(tszURLKey, '\0', sizeof(tszURLKey)); - memset(tszURLValue, '\0', sizeof(tszURLValue)); BaseLib_String_GetKeyValue(pptszList[0], "=", tszURLKey, tszURLValue); if (0 == _tcsxncmp(lpszAPILogin, tszURLValue, _tcsxlen(lpszAPILogin))) { - //http://app.xyry.org:5302/api?function=login&user=123123aa&pass=123123&device=1 + //http://app.xyry.org:5302/api?function=login&user=123123aa&pass=123123 XCHAR tszUserName[128] = {}; XCHAR tszUserPass[128] = {}; - XCHAR tszDeviceType[128] = {}; XNETHANDLE xhToken = 0; AUTHREG_USERTABLE st_UserTable = {}; - if (nListCount < 4) + if (nListCount < 3) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, ERROR_AUTHORIZE_PROTOCOL_REQUEST, "request parament is incorrent"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -33,7 +30,6 @@ bool XEngine_AuthorizeHTTP_Token(LPCXSTR lpszClientAddr, XCHAR** pptszList, int } BaseLib_String_GetKeyValue(pptszList[1], "=", tszURLKey, tszUserName); BaseLib_String_GetKeyValue(pptszList[2], "=", tszURLKey, tszUserPass); - BaseLib_String_GetKeyValue(pptszList[3], "=", tszURLKey, tszDeviceType); //是否启用了动态码 if (st_FunSwitch.bSwitchDCode) { @@ -143,5 +139,42 @@ bool XEngine_AuthorizeHTTP_Token(LPCXSTR lpszClientAddr, XCHAR** pptszList, int XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求关闭TOKEN:%s 成功"), lpszClientAddr, tszUserToken); } + else if (0 == _tcsxncmp(lpszAPICreate, tszURLValue, _tcsxlen(lpszAPICreate))) + { + //http://127.0.0.1:5302/api?function=create&token=1000112345&timeout=3600 + XCHAR tszTokenStr[128] = {}; + XCHAR tszTimeout[128] = {}; + + BaseLib_String_GetKeyValue(pptszList[1], "=", tszURLKey, tszTokenStr); + BaseLib_String_GetKeyValue(pptszList[2], "=", tszURLKey, tszTimeout); + + XENGINE_PROTOCOL_USERINFO st_UserInfo = {}; + if (!Session_Token_GetStr(tszTokenStr, &st_UserInfo)) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, ERROR_AUTHORIZE_PROTOCOL_NOTFOUND, "user not found"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,获取TOKEN失败,不存在的Token:%s"), lpszClientAddr, tszTokenStr); + return false; + } + AUTHREG_OAUTHINFO st_OAuthInfo = {}; + _tcsxcpy(st_OAuthInfo.tszUserName, st_UserInfo.tszUserName); + + st_OAuthInfo.nExpirationTime = _ttxoi(tszTimeout); + BaseLib_Handle_CreateStr(st_OAuthInfo.tszClientID, 16, 1); + BaseLib_Handle_CreateStr(st_OAuthInfo.tszClientKey); + BaseLib_Time_TimeToStr(st_OAuthInfo.tszCreateTime); + + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_OAuthInsert(&st_OAuthInfo); + } + else + { + DBModule_MySQL_OAuthInsert(&st_OAuthInfo); + } + Protocol_Packet_HttpOAuth(tszSDBuffer, &nSDLen, &st_OAuthInfo); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求创建OAuth的TOKEN:%s 成功"), lpszClientAddr, tszTokenStr); + } return true; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_OAuth.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_OAuth.cpp new file mode 100644 index 00000000..060e1f3f --- /dev/null +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_OAuth.cpp @@ -0,0 +1,117 @@ +#include "../Authorize_Hdr.h" + +bool XEngine_AuthorizeHTTP_OAuth(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPCXSTR lpszMSGBuffer, int nMSGLen) +{ + int nSDLen = 4096; + XCHAR tszSDBuffer[4096] = {}; + LPCXSTR lpszAPIToken = _X("token"); //更新,创建 + LPCXSTR lpszAPIRevoke = _X("revoke"); //撤销 + LPCXSTR lpszAPIIntrospect = _X("introspect"); //检查 + + if (0 == _tcsxncmp(lpszAPIToken, lpszAPIName, _tcsxlen(lpszAPIToken))) + { + //http://127.0.0.1:5302/api/oauth/token + VERIFICATION_OAUTHINFO st_VerificationInfo = {}; + AUTHREG_OAUTHINFO st_OAuthInfo = {}; + XCHAR tszFreshToken[XPATH_MIN] = {}; + + Verification_OAuth_Parse(&st_VerificationInfo, NULL, lpszMSGBuffer); + _tcsxcpy(st_OAuthInfo.tszClientID, st_VerificationInfo.tszClientID); + _tcsxcpy(st_OAuthInfo.tszClientKey, st_VerificationInfo.tszClientSecert); + + _tcsxcpy(tszFreshToken, st_VerificationInfo.tszClientRefresh); + + bool bRet = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bRet = DBModule_SQLite_OAuthQuery(&st_OAuthInfo); + } + else + { + bRet = DBModule_MySQL_OAuthQuery(&st_OAuthInfo); + } + if (!bRet) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, ERROR_AUTHORIZE_PROTOCOL_REQUEST, "request info is correct,maybe client id or key is incorrect"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求创建OAuth的TOKEN失败,查询用户信息id:%s key:%s失败:%lX"), lpszClientAddr, st_OAuthInfo.tszClientID, st_OAuthInfo.tszClientKey, DBModule_GetLastError()); + return false; + } + //是否为刷新TOKEN + if (_tcsxlen(tszFreshToken) > 0) + { + //如果是 + if (0 == _tcsxnicmp(tszFreshToken, st_VerificationInfo.tszClientRefresh, _tcsxlen(st_VerificationInfo.tszClientRefresh))) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, ERROR_AUTHORIZE_PROTOCOL_UNAUTHORIZE, "token verification failure"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求刷新OAuth的TOKEN失败,查询用户fresh:%s token:%s 不匹配"), lpszClientAddr, tszFreshToken, st_VerificationInfo.tszClientRefresh); + return false; + } + } + BaseLib_Handle_CreateStr(st_OAuthInfo.tszTokenStr, 32); + BaseLib_Handle_CreateStr(st_OAuthInfo.tszUPToken, 32); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bRet = DBModule_SQLite_OAuthUPDate(&st_OAuthInfo); + } + else + { + bRet = DBModule_MySQL_OAuthUPDate(&st_OAuthInfo); + } + if (!bRet) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, ERROR_AUTHORIZE_PROTOCOL_SERVER, "internal server failure"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求创建OAuth的TOKEN失败,内部错误:%lX"), lpszClientAddr, DBModule_GetLastError()); + return false; + } + + AUTHREG_USERTABLE st_UserTable = {}; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_UserQuery(st_OAuthInfo.tszUserName, &st_UserTable); + } + else + { + DBModule_SQLite_UserQuery(st_OAuthInfo.tszUserName, &st_UserTable); + } + st_UserTable.st_UserInfo.xhToken = 1; + Session_Token_InsertStr(st_OAuthInfo.tszTokenStr, &st_UserTable.st_UserInfo, st_OAuthInfo.nExpirationTime); + + Protocol_Packet_HttpOAuth2(tszSDBuffer, &nSDLen, &st_OAuthInfo); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求创建OAuth Token:%s 成功"), lpszClientAddr, st_OAuthInfo.tszTokenStr); + } + else if (0 == _tcsxncmp(lpszAPIRevoke, lpszAPIName, _tcsxlen(lpszAPIRevoke))) + { + //http://127.0.0.1:5302/api/oauth/revoke + VERIFICATION_OAUTHINFO st_VerificationInfo = {}; + AUTHREG_OAUTHINFO st_OAuthInfo = {}; + + Verification_OAuth_Parse(&st_VerificationInfo, NULL, lpszMSGBuffer); + _tcsxcpy(st_OAuthInfo.tszTokenStr, st_VerificationInfo.tszTokenStr); + + bool bRet = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bRet = DBModule_SQLite_OAuthDelete(&st_OAuthInfo); + } + else + { + bRet = DBModule_MySQL_OAuthDelete(&st_OAuthInfo); + } + if (!bRet) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, ERROR_AUTHORIZE_PROTOCOL_REQUEST, "request info is correct,maybe token is incorrect"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求删除OAuth的TOKEN失败,可能TOKEN:%s 错误:%lX"), lpszClientAddr, st_OAuthInfo.tszTokenStr, DBModule_GetLastError()); + return false; + } + + XEngine_Client_TaskSend(lpszClientAddr, NULL, 0, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求撤销删除OAuth的token成功,撤销的token:%s"), lpszClientAddr, st_OAuthInfo.tszTokenStr); + } + + return true; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_OAuth.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_OAuth.h new file mode 100644 index 00000000..c8a4e5f6 --- /dev/null +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_OAuth.h @@ -0,0 +1,3 @@ +#pragma once + +bool XEngine_AuthorizeHTTP_OAuth(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPCXSTR 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 88f20abf..40247448 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 @@ -466,7 +466,6 @@ bool XEngine_AuthorizeHTTP_User(XNETHANDLE xhToken, LPCXSTR lpszClientAddr, LPCX XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("HTTP客户端:%s,序列号:%s,临时验证插入失败,因为服务器关闭了此功能"), lpszClientAddr, st_VERTemp.tszVSerial); return false; } - bool bSuccess = false; if (0 == st_AuthConfig.st_XSql.nDBType) { bSuccess = DBModule_SQLite_TryInsert(&st_VERTemp); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h index c36870ca..b0108dcf 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h @@ -111,6 +111,7 @@ extern XENGINE_FUNCTIONSWITCH st_FunSwitch; #include "AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.h" #include "AuthorizeHTTP_Post/AuthorizeHTTP_Announcement.h" #include "AuthorizeHTTP_Post/AuthorizeHTTP_Try.h" +#include "AuthorizeHTTP_Post/AuthorizeHTTP_OAuth.h" #include "AuthorizeHTTP_Get/AuthorizeHTTP_Token.h" #include "AuthorizeHTTP_Get/AuthorizeHTTP_GetTask.h" diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp index 79228126..1f07755e 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp @@ -191,7 +191,8 @@ bool XEngine_Client_HttpTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int LPCXSTR lpszAPIVerCDKey = _X("cdkey"); LPCXSTR lpszAPIVerNotice = _X("notice"); LPCXSTR lpszAPIVerTry = _X("try"); - + LPCXSTR lpszAPIOAuth = _X("oauth"); + memset(tszAPIType, '\0', sizeof(tszAPIType)); memset(tszAPIVer, '\0', sizeof(tszAPIVer)); memset(tszAPIName, '\0', sizeof(tszAPIName)); @@ -313,6 +314,10 @@ bool XEngine_Client_HttpTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int { XEngine_AuthorizeHTTP_User(xhToken, lpszClientAddr, tszAPIName, lpszMsgBuffer, nMsgLen); } + else if (0 == _tcsxncmp(lpszAPIOAuth, tszAPIVer, _tcsxlen(lpszAPIOAuth))) + { + XEngine_AuthorizeHTTP_OAuth(lpszClientAddr, tszAPIName, lpszMsgBuffer, nMsgLen); + } else { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, ERROR_AUTHORIZE_PROTOCOL_REQUEST, "reqeust api is not support"); @@ -330,7 +335,7 @@ bool XEngine_Client_HttpTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int LPCXSTR lpszFuncName = _X("api"); LPCXSTR lpszAPIVerDCode = _X("dcode"); LPCXSTR lpszAPIVerTime = _X("time"); - + memset(tszUrlName, '\0', sizeof(tszUrlName)); HttpProtocol_ServerHelp_GetParament(pSt_HTTPParament->tszHttpUri, &pptszList, &nListCount, tszUrlName); if ((nListCount < 1) || (0 != _tcsxncmp(lpszFuncName, tszUrlName, _tcsxlen(lpszFuncName)))) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_MQTTTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_MQTTTask.cpp index 377557dc..7ee445f1 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_MQTTTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_MQTTTask.cpp @@ -87,7 +87,7 @@ bool Authorize_MQTTTask_Handle(LPCXSTR lpszClientAddr, MQTTPROTOCOL_FIXEDHEADER* //错误断开连接 MQTTProtocol_Packet_DisConnect(tszRVBuffer, &nRVLen); MQTTProtocol_Packet_Header(tszSDBuffer, &nSDLen, XENGINE_RFCCOMPONENTS_MQTT_PROTOCOL_TYPE_DISCONN, tszRVBuffer, nRVLen); - //XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_MQTT); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_MQTT); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("MQTT客户端:%s,请求链接失败,错误码:%lX"), lpszClientAddr, MQTTProtocol_GetLastError()); return false; } diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp index 3386eeda..25ec5e81 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp @@ -73,7 +73,7 @@ bool XCALLBACK XEngine_Client_HttpAccept(LPCXSTR lpszClientAddr, XSOCKET hSocket } void XCALLBACK XEngine_Client_HttpRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) { - if (!HttpProtocol_Server_InserQueueEx(xhHttpPacket, lpszClientAddr, lpszRecvMsg, nMsgLen)) + if (!HttpProtocol_Server_InsertQueueEx(xhHttpPacket, lpszClientAddr, lpszRecvMsg, nMsgLen)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,投递数据包失败,大小:%d,错误:%lX"), lpszClientAddr, nMsgLen, Packets_GetLastError()); } @@ -230,15 +230,22 @@ bool XEngine_Client_TaskSend(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int st_HDRParam.nHttpCode = 200; st_HDRParam.bIsClose = true; - if (st_AuthConfig.st_XCrypto.bEnable) + if (nMsgLen > 0) { - CHttpMemory_PoolEx m_CodecMemory(XENGINE_MEMORY_SIZE_MAX); - Cryption_Api_CryptEncodec((LPCXBTR)lpszMsgBuffer, (XBYTE*)m_CodecMemory.get(), &nMsgLen, st_AuthConfig.st_XCrypto.tszCryptoKey, (ENUM_XENGINE_CRYPTION_SYMMETRIC)st_AuthConfig.st_XCrypto.nCryptionType); - HttpProtocol_Server_SendMsgEx(xhHttpPacket, m_HTTPMemory.get(), &nSDSize, &st_HDRParam, m_CodecMemory.get(), nMsgLen); + if (st_AuthConfig.st_XCrypto.bEnable) + { + CHttpMemory_PoolEx m_CodecMemory(XENGINE_MEMORY_SIZE_MAX); + Cryption_Api_CryptEncodec((LPCXBTR)lpszMsgBuffer, (XBYTE*)m_CodecMemory.get(), &nMsgLen, st_AuthConfig.st_XCrypto.tszCryptoKey, (ENUM_XENGINE_CRYPTION_SYMMETRIC)st_AuthConfig.st_XCrypto.nCryptionType); + HttpProtocol_Server_SendMsgEx(xhHttpPacket, m_HTTPMemory.get(), &nSDSize, &st_HDRParam, m_CodecMemory.get(), nMsgLen); + } + else + { + HttpProtocol_Server_SendMsgEx(xhHttpPacket, m_HTTPMemory.get(), &nSDSize, &st_HDRParam, lpszMsgBuffer, nMsgLen); + } } else { - HttpProtocol_Server_SendMsgEx(xhHttpPacket, m_HTTPMemory.get(), &nSDSize, &st_HDRParam, lpszMsgBuffer, nMsgLen); + HttpProtocol_Server_SendMsgEx(xhHttpPacket, m_HTTPMemory.get(), &nSDSize, &st_HDRParam); } NetCore_TCPXCore_SendEx(xhHttpSocket, lpszClientAddr, m_HTTPMemory.get(), nSDSize); SocketOpt_HeartBeat_ActiveAddrEx(xhHTTPHeart, lpszClientAddr); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp index e6ef312d..b2327b95 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp @@ -149,7 +149,6 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n } else { - bool bSuccess = false; //用户密码登录还是硬件吗登录 if (_tcsxlen(st_AuthProtocol.tszUserPass) > 0) { @@ -335,7 +334,6 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n } else if (ENUM_VERIFICATION_MODULE_SERIAL_TYPE_DAY == st_UserTable.enSerialType) { - bool bSuccess = false; XCHAR tszIPAddr[128] = {}; _tcsxcpy(tszIPAddr, lpszClientAddr); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp index 1917b6e0..704c3b92 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp @@ -64,9 +64,6 @@ void XCALLBACK XEngine_TaskEvent_Client(LPCXSTR lpszUserAddr, LPCXSTR lpszUserNa void XCALLBACK XEngine_TaskEvent_Token(LPCXSTR lpszTokenStr, int nTimeout, int nTimerenewal, XENGINE_LIBTIME* pSt_LibTime, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo, XPVOID lParam) { bool bRemove = true; - XENGINE_PROTOCOL_USERINFO st_UserInfo; - - Session_Token_GetStr(lpszTokenStr, &st_UserInfo); //自动续期? if (st_AuthConfig.st_XVerification.st_XToken.bAutoRenewal) { @@ -86,9 +83,15 @@ void XCALLBACK XEngine_TaskEvent_Token(LPCXSTR lpszTokenStr, int nTimeout, int n } } - if (bRemove) + if (1 == pSt_UserInfo->xhToken) + { + AUTHREG_OAUTHINFO st_OAuthInfo = {}; + _tcsxcpy(st_OAuthInfo.tszTokenStr, lpszTokenStr); + DBModule_SQLite_OAuthDelete(&st_OAuthInfo); + } + if (bRemove || (1 == pSt_UserInfo->xhToken)) { Session_Token_DeleteStr(lpszTokenStr); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Token:%s,用户名:%s,已经超时,权限级别:%d,被移除服务器"), lpszTokenStr, st_UserInfo.tszUserName, st_UserInfo.nUserLevel); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Token:%s,用户名:%s,已经超时,权限级别:%d,被移除服务器,移除类型:%s"), lpszTokenStr, pSt_UserInfo->tszUserName, pSt_UserInfo->nUserLevel, 1 == pSt_UserInfo->xhToken ? "OAuth" : "Token"); } } \ 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 b3816500..d60d5c56 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile @@ -10,7 +10,7 @@ LIB = -lXEngine_InfoReport -ljsoncpp -lXEngine_Verification -lXEngine_MSGNotify -lAuthorizeModule_Session -lAuthorizeModule_Database -lAuthorizeModule_Protocol -lAuthorizeModule_Configure -lAuthorizeModule_Help LIBEX = OBJECTS = Authorize_Config.o Authorize_Net.o Authorize_Task.o Authorize_TCPTask.o Authorize_WSTask.o Authorize_HttpTask.o Authorize_MQTTTask.o XEngine_AuthorizeService.o \ - AuthorizeHTTP_Client.o AuthorizeHTTP_Serial.o AuthorizeHTTP_User.o AuthorizeHTTP_Pass.o AuthorizeHTTP_Switch.o AuthorizeHTTP_Banned.o AuthorizeHTTP_CDKey.o AuthorizeHTTP_Announcement.o AuthorizeHTTP_Try.o\ + AuthorizeHTTP_Client.o AuthorizeHTTP_Serial.o AuthorizeHTTP_User.o AuthorizeHTTP_Pass.o AuthorizeHTTP_Switch.o AuthorizeHTTP_Banned.o AuthorizeHTTP_CDKey.o AuthorizeHTTP_Announcement.o AuthorizeHTTP_Try.o AuthorizeHTTP_OAuth.o \ AuthorizeHTTP_Token.o AuthorizeHTTP_GetTask.o ifeq ($(RELEASE),1) @@ -87,6 +87,8 @@ AuthorizeHTTP_Announcement.o:./AuthorizeHTTP_Post/AuthorizeHTTP_Announcement.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./AuthorizeHTTP_Post/AuthorizeHTTP_Announcement.cpp AuthorizeHTTP_Try.o:./AuthorizeHTTP_Post/AuthorizeHTTP_Try.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./AuthorizeHTTP_Post/AuthorizeHTTP_Try.cpp +AuthorizeHTTP_OAuth.o:./AuthorizeHTTP_Post/AuthorizeHTTP_OAuth.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./AuthorizeHTTP_Post/AuthorizeHTTP_OAuth.cpp AuthorizeHTTP_Token.o:./AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./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 c4010b5a..0e29f245 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp @@ -160,16 +160,17 @@ int main(int argc, char** argv) #endif bIsRun = true; int nRet = -1; - HELPCOMPONENTS_XLOG_CONFIGURE st_XLogConfig; + int nListOAuth = 0; + AUTHREG_OAUTHINFO** ppSt_OAuthInfo; THREADPOOL_PARAMENT** ppSt_ListTCPThread; THREADPOOL_PARAMENT** ppSt_ListWSThread; THREADPOOL_PARAMENT** ppSt_ListHttpThread; THREADPOOL_PARAMENT** ppSt_ListMQTTParam; + HELPCOMPONENTS_XLOG_CONFIGURE st_XLogConfig = {}; LPCXSTR lpszHTTPMime = _X("./XEngine_Config/HttpMime.types"); LPCXSTR lpszHTTPCode = _X("./XEngine_Config/HttpCode.types"); - memset(&st_XLogConfig, '\0', sizeof(HELPCOMPONENTS_XLOG_CONFIGURE)); memset(&st_AuthConfig, '\0', sizeof(XENGINE_SERVICECONFIG)); memset(&st_FunSwitch, '\0', sizeof(XENGINE_FUNCTIONSWITCH)); @@ -463,6 +464,53 @@ int main(int argc, char** argv) XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加密传输设置为关闭,采用明文传输")); } + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_OAuthList(&ppSt_OAuthInfo, &nListOAuth); + } + else + { + DBModule_MySQL_OAuthList(&ppSt_OAuthInfo, &nListOAuth); + } + for (int i = 0; i < nListOAuth; i++) + { + //是否过期 + time_t nTimeCreate = 0; + XENGINE_LIBTIME st_LibTime = {}; + BaseLib_Time_StrToTime(ppSt_OAuthInfo[i]->tszCreateTime, &st_LibTime); + BaseLib_Time_StuTimeToTTime(&st_LibTime, &nTimeCreate); + + time_t nTimeStop = time(NULL); + if ((ppSt_OAuthInfo[i]->nExpirationTime + nTimeCreate) - nTimeStop > 0) + { + AUTHREG_USERTABLE st_UserTable = {}; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_UserQuery(ppSt_OAuthInfo[i]->tszUserName, &st_UserTable); + } + else + { + DBModule_SQLite_UserQuery(ppSt_OAuthInfo[i]->tszUserName, &st_UserTable); + } + //剩余时间 + int nTimeLeft = nTimeStop - (ppSt_OAuthInfo[i]->nExpirationTime + nTimeCreate); + Session_Token_InsertStr(ppSt_OAuthInfo[i]->tszUserName, &st_UserTable.st_UserInfo, nTimeLeft); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,用户:%s 绑定TOKEN:%s ,插入会话管理器"), st_UserTable.st_UserInfo.tszUserName, ppSt_OAuthInfo[i]->tszTokenStr); + } + else + { + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_OAuthDelete(ppSt_OAuthInfo[i]); + } + else + { + DBModule_MySQL_OAuthDelete(ppSt_OAuthInfo[i]); + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,检查用户:%s 绑定TOKEN:%s 过期,删除"), ppSt_OAuthInfo[i]->tszUserName, ppSt_OAuthInfo[i]->tszTokenStr); + } + } + if (0 == _xtaccess(st_AuthConfig.st_XVerification.st_XCDKey.tszKeyFile, 0)) { VERIFICATION_XAUTHKEY st_AuthLocal = {}; @@ -482,6 +530,7 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,授权文件验证失败,授权文件没有找到")); } + #ifndef _DEBUG //发送信息报告 if (st_AuthConfig.st_XReport.bEnable && !bIsTest) @@ -501,7 +550,8 @@ int main(int argc, char** argv) XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,信息报告给API服务器没有启用")); } #endif - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,功能开关选项,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d,动态验证:%d,多端登录:%d,临时试用:%d,黑名单功能:%d,普通TOKEN:%d,硬件码登录:%d,硬件码绑定:%d"), st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice, st_FunSwitch.bSwitchDCode, st_FunSwitch.bSwitchMulti, st_FunSwitch.bSwitchTry, st_FunSwitch.bSwitchBanned, st_FunSwitch.bSwitchTokenLogin, st_FunSwitch.bSwitchHCLogin, st_FunSwitch.bSwitchHWBind); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,功能开关选项,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d,动态验证:%d,多端登录:%d,临时试用:%d,黑名单功能:%d,普通TOKEN:%d,硬件码登录:%d,OAuth登录支持:%d,硬件码绑定:%d"), st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice, st_FunSwitch.bSwitchDCode, st_FunSwitch.bSwitchMulti, st_FunSwitch.bSwitchTry, st_FunSwitch.bSwitchBanned, st_FunSwitch.bSwitchTokenLogin, st_FunSwitch.bSwitchHCLogin, st_FunSwitch.bSwitchOAuth, st_FunSwitch.bSwitchHWBind); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("所有服务成功启动,网络验证服务运行中,XEngien版本:%s%s,发行版本次数:%d,当前运行版本:%s。。。"), BaseLib_Version_XNumberStr(), BaseLib_Version_XTypeStr(), st_AuthConfig.st_XVer.pStl_ListVer->size(), st_AuthConfig.st_XVer.pStl_ListVer->front().c_str()); while (true) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj index f5d112df..ff027bad 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj @@ -154,6 +154,7 @@ stdcpp20 stdc17 /utf-8 %(AdditionalOptions) + MultiThreadedDLL Console @@ -237,6 +238,7 @@ + @@ -258,6 +260,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 ff32cae8..93b73044 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj.filters +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj.filters @@ -84,6 +84,9 @@ 源文件 + + 源文件\AuthorizeHTTP_Post + @@ -146,5 +149,8 @@ 头文件 + + 头文件\AuthorizeHTTP_Post + \ No newline at end of file diff --git a/XEngine_Source/XEngine_DependLibrary b/XEngine_Source/XEngine_DependLibrary index 237be589..2d7f1d3d 160000 --- a/XEngine_Source/XEngine_DependLibrary +++ b/XEngine_Source/XEngine_DependLibrary @@ -1 +1 @@ -Subproject commit 237be589ec33bba0bf3405c095db470c1d3766b3 +Subproject commit 2d7f1d3d9111b98d1c9d02efa8d9a28b0931354f