Skip to content

Commit 9eaaebe

Browse files
committed
added:OAuth token support for token module
1 parent f53a696 commit 9eaaebe

File tree

8 files changed

+124
-7
lines changed

8 files changed

+124
-7
lines changed

XEngine_Module/XEngine_Token/Session_Define.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,13 +269,15 @@ extern "C" bool Session_Token_GetList(XNETHANDLE*** pppxhToken, int* pInt_ListCo
269269
extern "C" bool Session_Token_CreateStr(XCHAR* ptszToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo = NULL, int nTimeout = -1);
270270
extern "C" bool Session_Token_InsertStr(LPCXSTR lpszToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo = NULL, int nTimeout = -1);
271271
extern "C" bool Session_Token_DeleteStr(LPCXSTR lpszToken);
272-
extern "C" bool Session_Token_UPDateStr(LPCXSTR lpszToken);
272+
extern "C" bool Session_Token_UPDateStr(LPCXSTR lpszToken, LPCXSTR lpszRefreshToken = NULL, LPCXSTR lpszNewToken = NULL);
273273
extern "C" bool Session_Token_GetStr(LPCXSTR lpszToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo = NULL);
274274
extern "C" bool Session_Token_GetTimeInfoStr(LPCXSTR lpszToken, XENGINE_LIBTIME* pSt_LoginTime = NULL, XENGINE_LIBTIME* pSt_UPTime = NULL);
275275
extern "C" bool Session_Token_GetTimeoutStr(LPCXSTR lpszToken, __int64x* pInt_TimeLogin = NULL, __int64x* pInt_Timeout = NULL);
276276
extern "C" bool Session_Token_GetTimeRenewalStr(LPCXSTR lpszToken, int* pInt_RenewalTime);
277277
extern "C" bool Session_Token_GetUserStr(LPCXSTR lpszUser, LPCXSTR lpszPass, XCHAR* ptszToken);
278278
extern "C" bool Session_Token_GetListStr(XCHAR*** ppptszToken, int* pInt_ListCount);
279+
extern "C" bool Session_Token_OAuthSetInfo(LPCXSTR lpszToken, VERIFICATION_OAUTHINFO* pSt_OAuthInfo);
280+
extern "C" bool Session_Token_OAuthSetToken(LPCXSTR lpszToken, VERIFICATION_TOKENINFO* pSt_TokenInfo);
279281
/************************************************************************/
280282
/* 动态码导出定义 */
281283
/************************************************************************/

XEngine_Module/XEngine_Token/Session_Error.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#define ERROR_XENGINE_MODULE_SESSION_TOKEN_THREAD 0x0020001 //创建线程失败
1818
#define ERROR_XENGINE_MODULE_SESSION_TOKEN_NOTFOUND 0x0020002 //没有找到客户端
1919
#define ERROR_XENGINE_MODULE_SESSION_TOKEN_EXIST 0x0020003 //没有找到客户端
20+
#define ERROR_XENGINE_MODULE_SESSION_TOKEN_TOKEN 0x0020004 //TOKEN错误,令牌不一致
2021
/************************************************************************/
2122
/* TOKEN会话错误 */
2223
/************************************************************************/

XEngine_Module/XEngine_Token/Session_Token/Session_Token.cpp

Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -637,7 +637,7 @@ bool CSession_Token::Session_Token_DeleteStr(LPCXSTR lpszToken)
637637
st_Locker.unlock();
638638
return true;
639639
}
640-
bool CSession_Token::Session_Token_UPDateStr(LPCXSTR lpszToken)
640+
bool CSession_Token::Session_Token_UPDateStr(LPCXSTR lpszToken, LPCXSTR lpszRefreshToken /* = NULL */, LPCXSTR lpszNewToken /* = NULL */)
641641
{
642642
Session_IsErrorOccur = false;
643643

@@ -652,7 +652,29 @@ bool CSession_Token::Session_Token_UPDateStr(LPCXSTR lpszToken)
652652
}
653653
stl_MapIterator->second.nRenewalTime++;
654654
BaseLib_Time_GetSysTime(&stl_MapIterator->second.st_OutTimer);
655-
st_Locker.unlock_shared();
655+
//判断类型
656+
if (1 == stl_MapIterator->second.nTokenType)
657+
{
658+
//判断刷新token是否一致
659+
if (0 != _tcsxnicmp(stl_MapIterator->second.st_TokenInfo.tszTokenRefresh, lpszRefreshToken, _tcsxlen(lpszRefreshToken)))
660+
{
661+
Session_IsErrorOccur = true;
662+
Session_dwErrorCode = ERROR_XENGINE_MODULE_SESSION_TOKEN_TOKEN;
663+
st_Locker.unlock_shared();
664+
return false;
665+
}
666+
st_Locker.unlock_shared();
667+
//OAuth2类型需要重置
668+
st_Locker.lock();
669+
TOKENSESSION_INFOCLIENT st_ClientInfo = std::move(stl_MapIterator->second); // 取出旧的值
670+
stl_MapTokenStr.erase(stl_MapIterator); // 删除旧 key
671+
stl_MapTokenStr.emplace(lpszNewToken, std::move(st_ClientInfo)); // 插入新 key
672+
st_Locker.unlock();
673+
}
674+
else
675+
{
676+
st_Locker.unlock_shared();
677+
}
656678
return true;
657679
}
658680
bool CSession_Token::Session_Token_GetStr(LPCXSTR lpszToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo /* = NULL */)
@@ -828,6 +850,55 @@ bool CSession_Token::Session_Token_GetListStr(XCHAR*** ppptszToken, int* pInt_Li
828850

829851
return true;
830852
}
853+
bool CSession_Token::Session_Token_OAuthSetInfo(LPCXSTR lpszToken, VERIFICATION_OAUTHINFO* pSt_OAuthInfo)
854+
{
855+
Session_IsErrorOccur = false;
856+
857+
if ((NULL == lpszToken) || (NULL == pSt_OAuthInfo))
858+
{
859+
Session_IsErrorOccur = true;
860+
Session_dwErrorCode = ERROR_XENGINE_MODULE_SESSION_TOKEN_PARAMENT;
861+
return false;
862+
}
863+
st_Locker.lock_shared();
864+
auto stl_MapIterator = stl_MapTokenStr.find(lpszToken);
865+
if (stl_MapIterator == stl_MapTokenStr.end())
866+
{
867+
st_Locker.unlock_shared();
868+
Session_IsErrorOccur = true;
869+
Session_dwErrorCode = ERROR_XENGINE_MODULE_SESSION_TOKEN_NOTFOUND;
870+
return false;
871+
}
872+
stl_MapIterator->second.nTokenType = 1;
873+
stl_MapIterator->second.st_OAuthInfo = *pSt_OAuthInfo;
874+
st_Locker.unlock_shared();
875+
return true;
876+
}
877+
bool CSession_Token::Session_Token_OAuthSetToken(LPCXSTR lpszToken, VERIFICATION_TOKENINFO* pSt_TokenInfo)
878+
{
879+
Session_IsErrorOccur = false;
880+
881+
if ((NULL == lpszToken) || (NULL == pSt_TokenInfo))
882+
{
883+
Session_IsErrorOccur = true;
884+
Session_dwErrorCode = ERROR_XENGINE_MODULE_SESSION_TOKEN_PARAMENT;
885+
return false;
886+
}
887+
st_Locker.lock_shared();
888+
auto stl_MapIterator = stl_MapTokenStr.find(lpszToken);
889+
if (stl_MapIterator == stl_MapTokenStr.end())
890+
{
891+
st_Locker.unlock_shared();
892+
Session_IsErrorOccur = true;
893+
Session_dwErrorCode = ERROR_XENGINE_MODULE_SESSION_TOKEN_NOTFOUND;
894+
return false;
895+
}
896+
stl_MapIterator->second.st_TokenInfo = *pSt_TokenInfo;
897+
//影响过期时间
898+
stl_MapIterator->second.nTimeout = pSt_TokenInfo->nExpiredTime; //更新超时时间
899+
st_Locker.unlock_shared();
900+
return true;
901+
}
831902
//////////////////////////////////////////////////////////////////////////
832903
// 线程函数
833904
//////////////////////////////////////////////////////////////////////////

XEngine_Module/XEngine_Token/Session_Token/Session_Token.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,16 @@
1212
*********************************************************************/
1313
typedef struct
1414
{
15+
VERIFICATION_OAUTHINFO st_OAuthInfo; //OAuth验证信息
16+
VERIFICATION_TOKENINFO st_TokenInfo; //Token验证信息
17+
1518
XENGINE_PROTOCOL_USERINFO st_UserInfo;
1619
XENGINE_LIBTIME st_LibTimer; //登录时间结构
1720
XENGINE_LIBTIME st_OutTimer; //超时时间结构
1821
XCHAR tszTokenStr[XPATH_MID]; //TOKEN字符串
1922
int nTimeout; //单独指定超时
2023
int nRenewalTime; //自动续期次数
24+
int nTokenType; //TOKEN类型0,默认, 1,OAuth2,2,JWT
2125
}TOKENSESSION_INFOCLIENT;
2226
//////////////////////////////////////////////////////////////////////////
2327
class CSession_Token
@@ -28,6 +32,7 @@ class CSession_Token
2832
public:
2933
bool Session_Token_Init(int nTimeout, bool bRemove, CALLBACK_XENGIEN_MODULE_TOKEN_EVENTS fpCall_TokenEvent, XPVOID lParam = NULL);
3034
bool Session_Token_Destroy();
35+
public:
3136
bool Session_Token_Create(XNETHANDLE *pxhToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo = NULL, int nTimeout = -1);
3237
bool Session_Token_Insert(XNETHANDLE xhToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo = NULL, int nTimeout = -1);
3338
bool Session_Token_Delete(XNETHANDLE xhToken);
@@ -42,13 +47,16 @@ class CSession_Token
4247
bool Session_Token_CreateStr(XCHAR* ptszToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo = NULL, int nTimeout = -1);
4348
bool Session_Token_InsertStr(LPCXSTR lpszToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo = NULL, int nTimeout = -1);
4449
bool Session_Token_DeleteStr(LPCXSTR lpszToken);
45-
bool Session_Token_UPDateStr(LPCXSTR lpszToken);
50+
bool Session_Token_UPDateStr(LPCXSTR lpszToken, LPCXSTR lpszRefreshToken = NULL, LPCXSTR lpszNewToken = NULL);
4651
bool Session_Token_GetStr(LPCXSTR lpszToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo = NULL);
4752
bool Session_Token_GetTimeInfoStr(LPCXSTR lpszToken, XENGINE_LIBTIME* pSt_LoginTime = NULL, XENGINE_LIBTIME* pSt_UPTime = NULL);
4853
bool Session_Token_GetTimeoutStr(LPCXSTR lpszToken, __int64x* pInt_TimeLogin = NULL, __int64x* pInt_Timeout = NULL);
4954
bool Session_Token_GetTimeRenewalStr(LPCXSTR lpszToken, int* pInt_RenewalTime);
5055
bool Session_Token_GetUserStr(LPCXSTR lpszUser, LPCXSTR lpszPass, XCHAR* ptszToken);
5156
bool Session_Token_GetListStr(XCHAR*** ppptszToken, int* pInt_ListCount);
57+
58+
bool Session_Token_OAuthSetInfo(LPCXSTR lpszToken, VERIFICATION_OAUTHINFO* pSt_OAuthInfo);
59+
bool Session_Token_OAuthSetToken(LPCXSTR lpszToken, VERIFICATION_TOKENINFO* pSt_TokenInfo);
5260
protected:
5361
static XHTHREAD Session_Token_Thread(XPVOID lParam);
5462
private:

XEngine_Module/XEngine_Token/XEngine_Token.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ EXPORTS
2626
Session_Token_GetTimeRenewalStr
2727
Session_Token_GetUserStr
2828
Session_Token_GetListStr
29+
Session_Token_OAuthSetInfo
30+
Session_Token_OAuthSetToken
2931

3032
Session_Dynamic_Init
3133
Session_Dynamic_Destory

XEngine_Module/XEngine_Token/XEngine_Token.vcxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@
135135
<GenerateDebugInformation>true</GenerateDebugInformation>
136136
<EnableUAC>false</EnableUAC>
137137
<ModuleDefinitionFile>XEngine_Token.def</ModuleDefinitionFile>
138+
<AdditionalLibraryDirectories>$(SolutionDir)</AdditionalLibraryDirectories>
138139
</Link>
139140
</ItemDefinitionGroup>
140141
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -155,6 +156,7 @@
155156
<GenerateDebugInformation>true</GenerateDebugInformation>
156157
<EnableUAC>false</EnableUAC>
157158
<ModuleDefinitionFile>XEngine_Token.def</ModuleDefinitionFile>
159+
<AdditionalLibraryDirectories>$(SolutionDir)</AdditionalLibraryDirectories>
158160
</Link>
159161
</ItemDefinitionGroup>
160162
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -171,6 +173,7 @@
171173
<GenerateDebugInformation>true</GenerateDebugInformation>
172174
<EnableUAC>false</EnableUAC>
173175
<ModuleDefinitionFile>XEngine_Token.def</ModuleDefinitionFile>
176+
<AdditionalLibraryDirectories>$(SolutionDir)</AdditionalLibraryDirectories>
174177
</Link>
175178
</ItemDefinitionGroup>
176179
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
@@ -187,6 +190,7 @@
187190
<GenerateDebugInformation>true</GenerateDebugInformation>
188191
<EnableUAC>false</EnableUAC>
189192
<ModuleDefinitionFile>XEngine_Token.def</ModuleDefinitionFile>
193+
<AdditionalLibraryDirectories>$(SolutionDir)</AdditionalLibraryDirectories>
190194
</Link>
191195
</ItemDefinitionGroup>
192196
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -207,6 +211,7 @@
207211
<GenerateDebugInformation>true</GenerateDebugInformation>
208212
<EnableUAC>false</EnableUAC>
209213
<ModuleDefinitionFile>XEngine_Token.def</ModuleDefinitionFile>
214+
<AdditionalLibraryDirectories>$(SolutionDir)</AdditionalLibraryDirectories>
210215
</Link>
211216
</ItemDefinitionGroup>
212217
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
@@ -227,6 +232,7 @@
227232
<GenerateDebugInformation>true</GenerateDebugInformation>
228233
<EnableUAC>false</EnableUAC>
229234
<ModuleDefinitionFile>XEngine_Token.def</ModuleDefinitionFile>
235+
<AdditionalLibraryDirectories>$(SolutionDir)</AdditionalLibraryDirectories>
230236
</Link>
231237
</ItemDefinitionGroup>
232238
<ItemGroup>

XEngine_Module/XEngine_Token/pch.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ extern "C" bool Session_Token_DeleteStr(LPCXSTR lpszToken)
9191
{
9292
return m_SessionToken.Session_Token_DeleteStr(lpszToken);
9393
}
94-
extern "C" bool Session_Token_UPDateStr(LPCXSTR lpszToken)
94+
extern "C" bool Session_Token_UPDateStr(LPCXSTR lpszToken, LPCXSTR lpszRefreshToken, LPCXSTR lpszNewToken)
9595
{
96-
return m_SessionToken.Session_Token_UPDateStr(lpszToken);
96+
return m_SessionToken.Session_Token_UPDateStr(lpszToken, lpszRefreshToken, lpszNewToken);
9797
}
9898
extern "C" bool Session_Token_GetStr(LPCXSTR lpszToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo)
9999
{
@@ -119,6 +119,14 @@ extern "C" bool Session_Token_GetListStr(XCHAR*** ppptszToken, int* pInt_ListCou
119119
{
120120
return m_SessionToken.Session_Token_GetListStr(ppptszToken, pInt_ListCount);
121121
}
122+
extern "C" bool Session_Token_OAuthSetInfo(LPCXSTR lpszToken, VERIFICATION_OAUTHINFO* pSt_OAuthInfo)
123+
{
124+
return m_SessionToken.Session_Token_OAuthSetInfo(lpszToken, pSt_OAuthInfo);
125+
}
126+
extern "C" bool Session_Token_OAuthSetToken(LPCXSTR lpszToken, VERIFICATION_TOKENINFO* pSt_TokenInfo)
127+
{
128+
return m_SessionToken.Session_Token_OAuthSetToken(lpszToken, pSt_TokenInfo);
129+
}
122130
/************************************************************************/
123131
/* 动态码导出定义 */
124132
/************************************************************************/

XEngine_Module/XEngine_Token/pch.h

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
#include <XEngine_Include/XEngine_ProtocolHdr.h>
2626
#include <XEngine_Include/XEngine_BaseLib/BaseLib_Define.h>
2727
#include <XEngine_Include/XEngine_BaseLib/BaseLib_Error.h>
28+
#include "../XEngine_Verification/Verification_Define.h"
29+
#include "../XEngine_Verification/Verification_Error.h"
2830
#include "Session_Define.h"
2931
#include "Session_Error.h"
3032
/********************************************************************
@@ -42,5 +44,22 @@ extern bool Session_IsErrorOccur;
4244
extern XLONG Session_dwErrorCode;
4345

4446
#ifdef _MSC_BUILD
45-
#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib.lib")
47+
#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib")
48+
#ifdef _DEBUG
49+
#ifdef _M_X64
50+
#pragma comment(lib,"x64/Debug/XEngine_Verification")
51+
#elif _M_ARM64
52+
#pragma comment(lib,"ARM64/Debug/XEngine_Verification")
53+
#elif _M_IX86
54+
#pragma comment(lib,"Debug/XEngine_Verification")
55+
#endif
56+
#else
57+
#ifdef _M_X64
58+
#pragma comment(lib,"x64/Release/XEngine_Verification")
59+
#elif _M_ARM64
60+
#pragma comment(lib,"ARM64/Release/XEngine_Verification")
61+
#elif _M_IX86
62+
#pragma comment(lib,"Release/XEngine_Verification")
63+
#endif
64+
#endif
4665
#endif

0 commit comments

Comments
 (0)