@@ -55,6 +55,114 @@ XHTHREAD XCALLBACK HTTPTask_TastPost_Thread(XPVOID lParam)
5555 }
5656 return 0 ;
5757}
58+ bool HTTPTask_TastPost_Verification (RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, XCHAR** pptszHDRList, int nHDRCount)
59+ {
60+ // http验证
61+ int nVType = 0 ;
62+ int nSDLen = 0 ;
63+ XCHAR tszSDBuffer[XPATH_MAX] = {};
64+ RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam = {};
65+
66+ st_HDRParam.nHttpCode = 401 ;
67+ st_HDRParam.bIsClose = true ;
68+ st_HDRParam.bAuth = true ;
69+ // 打包验证信息
70+ int nHDRLen = 0 ;
71+ XCHAR tszHDRBuffer[XPATH_MAX] = {};
72+ if (1 == st_ServiceConfig.st_XVerifcation .nVType )
73+ {
74+ Verification_HTTP_BasicServerPacket (tszHDRBuffer, &nHDRLen);
75+ }
76+ else
77+ {
78+ XCHAR tszNonceStr[64 ] = {};
79+ XCHAR tszOpaqueStr[64 ] = {};
80+ Verification_HTTP_DigestServerPacket (tszHDRBuffer, &nHDRLen, tszNonceStr, tszOpaqueStr);
81+ }
82+ // 后去验证方法
83+ if (!Verification_HTTP_GetType (pptszHDRList, nHDRCount, &nVType))
84+ {
85+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
86+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
87+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,验证方式:%d,错误:%lX" ), lpszClientAddr, st_ServiceConfig.st_XVerifcation .nVType , Verification_GetLastError ());
88+ return false ;
89+ }
90+ // 验证方式是否一致
91+ if (st_ServiceConfig.st_XVerifcation .nVType != nVType)
92+ {
93+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
94+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
95+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,验证方式错误,请求:%d,需求:%d" ), lpszClientAddr, nVType, st_ServiceConfig.st_XVerifcation .nVType );
96+ return false ;
97+ }
98+ bool bRet = false ;
99+
100+ if (_tcsxlen (st_ServiceConfig.st_XVerifcation .tszAPIAuth ) > 0 )
101+ {
102+ int nHTTPCode = 0 ;
103+ int nMSGLen = 0 ;
104+ XCLIENT_APIHTTP st_APIHttp = {};
105+ XCHAR* ptszMSGBuffer = NULL ;
106+ if (!APIClient_Http_Request (_X (" GET" ), st_ServiceConfig.st_XVerifcation .tszAPIAuth , NULL , &nHTTPCode, &ptszMSGBuffer, &nMSGLen, NULL , NULL , &st_APIHttp))
107+ {
108+ st_HDRParam.nHttpCode = 500 ;
109+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
110+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
111+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,GET请求验证服务:%s 失败,错误码:%lX" ), lpszClientAddr, st_ServiceConfig.st_XVerifcation .tszAPIAuth , APIClient_GetLastError ());
112+ return false ;
113+ }
114+ if (200 != nHTTPCode)
115+ {
116+ st_HDRParam.nHttpCode = 500 ;
117+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
118+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
119+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,GET请求验证服务:%s 失败,错误:%d" ), lpszClientAddr, st_ServiceConfig.st_XVerifcation .tszAPIAuth , nHTTPCode);
120+ return false ;
121+ }
122+ XENGINE_PROTOCOL_USERAUTH st_UserAuth = {};
123+ if (!ModuleProtocol_Parse_Verifcation (ptszMSGBuffer, nSDLen, st_UserAuth.tszUserName , st_UserAuth.tszUserPass ))
124+ {
125+ st_HDRParam.nHttpCode = 500 ;
126+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
127+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
128+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,返回内容:%s 错误,无法继续" ), lpszClientAddr, ptszMSGBuffer);
129+ BaseLib_Memory_FreeCStyle ((XPPMEM)&ptszMSGBuffer);
130+ return false ;
131+ }
132+ BaseLib_Memory_FreeCStyle ((XPPMEM)&ptszMSGBuffer);
133+
134+ if (1 == nVType)
135+ {
136+ bRet = Verification_HTTP_Basic (st_UserAuth.tszUserName , st_UserAuth.tszUserPass , pptszHDRList, nHDRCount);
137+ }
138+ else if (2 == nVType)
139+ {
140+ bRet = Verification_HTTP_Digest (st_UserAuth.tszUserName , st_UserAuth.tszUserPass , pSt_HTTPParam->tszHttpMethod , pptszHDRList, nHDRCount);
141+ }
142+ }
143+ else
144+ {
145+ if (1 == nVType)
146+ {
147+ bRet = Verification_HTTP_Basic (st_ServiceConfig.st_XVerifcation .tszUserName , st_ServiceConfig.st_XVerifcation .tszUserPass , pptszHDRList, nHDRCount);
148+ }
149+ else if (2 == nVType)
150+ {
151+ bRet = Verification_HTTP_Digest (st_ServiceConfig.st_XVerifcation .tszUserName , st_ServiceConfig.st_XVerifcation .tszUserPass , pSt_HTTPParam->tszHttpMethod , pptszHDRList, nHDRCount);
152+ }
153+ }
154+
155+ if (!bRet)
156+ {
157+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
158+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
159+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,验证处理错误,可能用户密码登信息不匹配,类型:%d" ), lpszClientAddr, nVType);
160+ return false ;
161+ }
162+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" HTTP客户端:%s,HTTP验证类型:%d 通过" ), lpszClientAddr, nVType);
163+ return true ;
164+ }
165+
58166bool HTTPTask_TastPost_Handle (RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszMSGBuffer, int nMSGLen, XCHAR** pptszHDRList, int nHDRCount)
59167{
60168 bool bVerification = false ;
@@ -103,107 +211,12 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST
103211 // http验证
104212 if (st_ServiceConfig.st_XVerifcation .bEnable )
105213 {
106- int nVType = 0 ;
107- RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam = {};
108-
109- st_HDRParam.nHttpCode = 401 ;
110- st_HDRParam.bIsClose = true ;
111- st_HDRParam.bAuth = true ;
112- // 打包验证信息
113- int nHDRLen = 0 ;
114- XCHAR tszHDRBuffer[XPATH_MAX] = {};
115- if (1 == st_ServiceConfig.st_XVerifcation .nVType )
116- {
117- Verification_HTTP_BasicServerPacket (tszHDRBuffer, &nHDRLen);
118- }
119- else
120- {
121- XCHAR tszNonceStr[64 ] = {};
122- XCHAR tszOpaqueStr[64 ] = {};
123- Verification_HTTP_DigestServerPacket (tszHDRBuffer, &nHDRLen, tszNonceStr, tszOpaqueStr);
124- }
125- // 后去验证方法
126- if (!Verification_HTTP_GetType (pptszHDRList, nHDRCount, &nVType))
127- {
128- HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
129- XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
130- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,验证方式:%d,错误:%lX" ), lpszClientAddr, st_ServiceConfig.st_XVerifcation .nVType , Verification_GetLastError ());
131- return false ;
132- }
133- // 验证方式是否一致
134- if (st_ServiceConfig.st_XVerifcation .nVType != nVType)
135- {
136- HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
137- XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
138- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,验证方式错误,请求:%d,需求:%d" ), lpszClientAddr, nVType, st_ServiceConfig.st_XVerifcation .nVType );
139- return false ;
140- }
141- bool bRet = false ;
142-
143- if (_tcsxlen (st_ServiceConfig.st_XVerifcation .tszAPIAuth ) > 0 )
144- {
145- int nHTTPCode = 0 ;
146- int nMSGLen = 0 ;
147- XCLIENT_APIHTTP st_APIHttp = {};
148- XCHAR* ptszMSGBuffer = NULL ;
149- if (!APIClient_Http_Request (_X (" GET" ), st_ServiceConfig.st_XVerifcation .tszAPIAuth , NULL , &nHTTPCode, &ptszMSGBuffer, &nMSGLen, NULL , NULL , &st_APIHttp))
150- {
151- st_HDRParam.nHttpCode = 500 ;
152- HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
153- XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
154- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,GET请求验证服务:%s 失败,错误码:%lX" ), lpszClientAddr, st_ServiceConfig.st_XVerifcation .tszAPIAuth , APIClient_GetLastError ());
155- return false ;
156- }
157- if (200 != nHTTPCode)
158- {
159- st_HDRParam.nHttpCode = 500 ;
160- HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
161- XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
162- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,GET请求验证服务:%s 失败,错误:%d" ), lpszClientAddr, st_ServiceConfig.st_XVerifcation .tszAPIAuth , nHTTPCode);
163- return false ;
164- }
165- XENGINE_PROTOCOL_USERAUTH st_UserAuth = {};
166- if (!ModuleProtocol_Parse_Verifcation (ptszMSGBuffer, nSDLen, st_UserAuth.tszUserName , st_UserAuth.tszUserPass ))
167- {
168- st_HDRParam.nHttpCode = 500 ;
169- HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
170- XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
171- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,返回内容:%s 错误,无法继续" ), lpszClientAddr, ptszMSGBuffer);
172- BaseLib_Memory_FreeCStyle ((XPPMEM)&ptszMSGBuffer);
173- return false ;
174- }
175- BaseLib_Memory_FreeCStyle ((XPPMEM)&ptszMSGBuffer);
176-
177- if (1 == nVType)
178- {
179- bRet = Verification_HTTP_Basic (st_UserAuth.tszUserName , st_UserAuth.tszUserPass , pptszHDRList, nHDRCount);
180- }
181- else if (2 == nVType)
182- {
183- bRet = Verification_HTTP_Digest (st_UserAuth.tszUserName , st_UserAuth.tszUserPass , pSt_HTTPParam->tszHttpMethod , pptszHDRList, nHDRCount);
184- }
185- }
186- else
214+ // 全面验证
215+ if (!HTTPTask_TastPost_Verification (pSt_HTTPParam, lpszClientAddr, pptszHDRList, nHDRCount))
187216 {
188- if (1 == nVType)
189- {
190- bRet = Verification_HTTP_Basic (st_ServiceConfig.st_XVerifcation .tszUserName , st_ServiceConfig.st_XVerifcation .tszUserPass , pptszHDRList, nHDRCount);
191- }
192- else if (2 == nVType)
193- {
194- bRet = Verification_HTTP_Digest (st_ServiceConfig.st_XVerifcation .tszUserName , st_ServiceConfig.st_XVerifcation .tszUserPass , pSt_HTTPParam->tszHttpMethod , pptszHDRList, nHDRCount);
195- }
196- }
197-
198- if (!bRet)
199- {
200- HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
201- XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
202- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,验证处理错误,可能用户密码登信息不匹配,类型:%d" ), lpszClientAddr, nVType);
203217 return false ;
204218 }
205219 bVerification = true ;
206- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" HTTP客户端:%s,HTTP验证类型:%d 通过" ), lpszClientAddr, nVType);
207220 }
208221
209222 XCHAR tszKey[XPATH_MAX];
@@ -339,17 +352,13 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST
339352 // 后台管理接口:http://app.xyry.org:5501/api?function=back¶ms1=0
340353 XCHAR tszType[64 ];
341354 memset (tszType, ' \0 ' , sizeof (tszType));
342-
355+ // 单独验证
343356 if (st_ServiceConfig.st_XVerifcation .st_VerSwitch .bBackService && !bVerification)
344357 {
345- st_HDRParam.nHttpCode = 401 ;
346- st_HDRParam.bAuth = true ;
347- st_HDRParam.bIsClose = true ;
348- ModuleProtocol_Packet_Common (tszRVBuffer, &nSDLen, 403 , _X (" User verification required" ));
349- HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
350- XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
351- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,请求后台协议失败,此模式需要进行验证,但是请求未验证" ), lpszClientAddr);
352- return false ;
358+ if (!HTTPTask_TastPost_Verification (pSt_HTTPParam, lpszClientAddr, pptszHDRList, nHDRCount))
359+ {
360+ return false ;
361+ }
353362 }
354363 BaseLib_String_GetKeyValue (pptszList[1 ], " =" , tszKey, tszType);
355364 HTTPTask_TaskPost_BackService (lpszClientAddr, lpszMSGBuffer, nMSGLen, _ttxoi (tszType));
@@ -364,14 +373,10 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST
364373 // 守护进程接口:http://app.xyry.org:5501/api?function=deamon¶ms1=0
365374 if (st_ServiceConfig.st_XVerifcation .st_VerSwitch .bDeamon && !bVerification)
366375 {
367- st_HDRParam.nHttpCode = 401 ;
368- st_HDRParam.bAuth = true ;
369- st_HDRParam.bIsClose = true ;
370- ModuleProtocol_Packet_Common (tszRVBuffer, &nSDLen, 403 , _X (" User verification required" ));
371- HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
372- XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
373- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,请求守护进程协议失败,此模式需要进行验证,但是请求未验证" ), lpszClientAddr);
374- return false ;
376+ if (!HTTPTask_TastPost_Verification (pSt_HTTPParam, lpszClientAddr, pptszHDRList, nHDRCount))
377+ {
378+ return false ;
379+ }
375380 }
376381 HTTPTask_TaskPost_Deamon (lpszClientAddr, lpszMSGBuffer, nMSGLen);
377382 }
0 commit comments