mod_MaintainWatcher.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465
  1. #include "stdafx2.h"
  2. #include "SpBase.h"
  3. #include "ConsoleFSM.h"
  4. #include "MaintainWatcher_server_g.h"
  5. #include "MaintainWatcher_def_g.h"
  6. #include "..\EventCode.h"
  7. using namespace MaintainWatcher;
  8. class CUKEYConsoleEntity;
  9. class MaintainWatcherSession : public MaintainCertificate_ServerSessionBase
  10. {
  11. public:
  12. MaintainWatcherSession(CUKEYConsoleEntity *pEntity): m_pEntity(pEntity) {}
  13. virtual ~MaintainWatcherSession() {}
  14. virtual void Handle_GetUserID(SpReqAnsContext<MaintainCertificate_GetUserID_Req, MaintainCertificate_GetUserID_Ans>::Pointer ctx);
  15. virtual void Handle_GetUkeyID(SpReqAnsContext<MaintainCertificate_GetUkeyID_Req, MaintainCertificate_GetUkeyID_Ans>::Pointer ctx);
  16. virtual void Handle_GetSerialNumber(SpReqAnsContext<MaintainCertificate_GetSerialNumber_Req, MaintainCertificate_GetSerialNumber_Ans>::Pointer ctx);
  17. virtual void Handle_GetCertLife(SpReqAnsContext<MaintainCertificate_GetCertLife_Req, MaintainCertificate_GetCertLife_Ans>::Pointer ctx);
  18. virtual void Handle_GetAuthorizedID(SpReqAnsContext<MaintainCertificate_GetAuthorizedID_Req, MaintainCertificate_GetAuthorizedID_Ans>::Pointer ctx);
  19. virtual void Handle_GetAuthorizeTime(SpReqAnsContext<MaintainCertificate_GetAuthorizeTime_Req, MaintainCertificate_GetAuthorizeTime_Ans>::Pointer ctx);
  20. virtual void Handle_GetUserInfo(SpReqAnsContext<MaintainCertificate_GetUserInfo_Req, MaintainCertificate_GetUserInfo_Ans>::Pointer ctx);
  21. virtual void Handle_SetSRStatus(SpReqAnsContext<MaintainCertificate_SetSRStatus_Req, MaintainCertificate_SetSRStatus_Ans>::Pointer ctx);
  22. virtual void Handle_GetSignedInfo(SpReqAnsContext<MaintainCertificate_GetSignedInfo_Req, MaintainCertificate_GetSignedInfo_Ans>::Pointer ctx);
  23. virtual void Handle_VerifyPwd(SpReqAnsContext<MaintainCertificate_VerifyPwd_Req, MaintainCertificate_VerifyPwd_Ans>::Pointer ctx);
  24. virtual void Handle_USB(SpReqAnsContext<MaintainCertificate_USB_Req, MaintainCertificate_USB_Ans>::Pointer ctx);
  25. virtual void Handle_GetEKeyStatus(SpReqAnsContext<MaintainCertificate_GetEKeyStatus_Req, MaintainCertificate_GetEKeyStatus_Ans>::Pointer ctx);
  26. private:
  27. CUKEYConsoleEntity *m_pEntity;
  28. };
  29. class CUKEYConsoleEntity : public CEntityBase, public ILogListener
  30. {
  31. public:
  32. CUKEYConsoleEntity() {}
  33. virtual ~CUKEYConsoleEntity() {}
  34. virtual const char *GetEntityName() const { return "MaintainWatcher"; }
  35. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext)
  36. {
  37. // 定阅所有日志和Dbg信息显示用
  38. //MessageBoxA(0,0,0,0);
  39. //GetFunction()->SubscribeLog(m_logSubID, this, Log_Ignore, Severity_None, Error_IgnoreAll, -2, NULL, false);
  40. //订阅进入推荐人事件
  41. CUUID m_SubIDReturnMenu;
  42. ErrorCodeEnum Error = GetFunction()->SubscribeLog(m_SubIDReturnMenu, this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_IEBROWSER_SET_RECOMMANDDER, "IEBrowser", false);
  43. if (Error_Succeed != Error)
  44. {
  45. Dbg("SubScribe LOG_EVT_BROWSER_SET_RECOMMANDDER failed.");
  46. LogWarn(Severity_Middle, Error_Unexpect, ERR_MAINTAINWATCHER_SUBSCRIBE,
  47. GetOutPutStr("%s%08X%s%08X","SubscribeLog",Error,"Event", LOG_EVT_IEBROWSER_SET_RECOMMANDDER).c_str());
  48. }
  49. //Error = Error_Succeed;
  50. Error = m_fsm.Init(this);
  51. pTransactionContext->SendAnswer(Error) ;
  52. }
  53. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
  54. {
  55. pTransactionContext->SendAnswer(Error_Succeed);
  56. }
  57. virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  58. const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  59. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage)
  60. {
  61. if (dwUserCode == LOG_EVT_IEBROWSER_SET_RECOMMANDDER)
  62. {
  63. Dbg("recv LOG_EVT_BROWSER_SET_RECOMMANDDER event from IEBrowser");
  64. m_fsm.SetRecommender();
  65. }
  66. if (strlen(pszMessage)>2)
  67. {
  68. CSimpleStringA str = pszMessage;
  69. if (str[str.GetLength()-2] == '\r' && str[str.GetLength()-1]=='\n')
  70. str[str.GetLength()-2] = 0;
  71. if (eLogType == Log_Error)
  72. str = CSimpleStringA::Format("[%s] %s || SysCode: 0x%X, UserCode: 0x%X\r\n", pszEntityName, (const char*)str, dwSysError, dwUserCode);
  73. else
  74. str = CSimpleStringA::Format("[%s] %s\r\n", pszEntityName, (const char*)str);
  75. }
  76. }
  77. virtual bool IsService()const{return true;}
  78. virtual CServerSessionBase *OnNewSession(const char* /*pszRemoteEntityName*/, const char * /*pszParam*/){return new MaintainWatcherSession(this);}
  79. void GetEkeyStatus(int &status) {
  80. m_fsm.GetEkeyStatus(status);
  81. }
  82. public:
  83. ConsoleFSM m_fsm;
  84. };
  85. void MaintainWatcherSession::Handle_GetUserID(SpReqAnsContext<MaintainCertificate_GetUserID_Req, MaintainCertificate_GetUserID_Ans>::Pointer ctx)
  86. {
  87. LOG_FUNCTION();
  88. char cUserID[17] = {0};
  89. bool bRet = GetUserIDFromCert(USER_CERT_PATH, FORMAT_PEM, cUserID);
  90. //DWORD dwRet = GetHIDFromCert(cHID);
  91. if (bRet)
  92. {
  93. ctx->Ans.UserID = cUserID;
  94. ctx->Answer(Error_Succeed);
  95. }
  96. else
  97. {
  98. ctx->Ans.UserID = "";
  99. ctx->Answer(Error_Unexpect);
  100. }
  101. }
  102. void MaintainWatcherSession::Handle_GetEKeyStatus(SpReqAnsContext<MaintainCertificate_GetEKeyStatus_Req, MaintainCertificate_GetEKeyStatus_Ans>::Pointer ctx)
  103. {
  104. LOG_FUNCTION();
  105. int status;
  106. m_pEntity->GetEkeyStatus(status);
  107. ctx->Ans.status = status;
  108. ctx->Answer(Error_Succeed);
  109. }
  110. void MaintainWatcherSession::Handle_GetUkeyID(SpReqAnsContext<MaintainCertificate_GetUkeyID_Req, MaintainCertificate_GetUkeyID_Ans>::Pointer ctx)
  111. {
  112. LOG_FUNCTION();
  113. char cHID[32] = {0};
  114. bool bRet = GetHIDFromCert(USER_CERT_PATH, FORMAT_PEM, cHID);
  115. if (bRet)
  116. {
  117. ctx->Ans.UkeyID = cHID;
  118. ctx->Answer(Error_Succeed);
  119. }
  120. else
  121. {
  122. ctx->Ans.UkeyID = "";
  123. ctx->Answer(Error_Unexpect);
  124. }
  125. }
  126. void MaintainWatcherSession::Handle_GetSerialNumber(SpReqAnsContext<MaintainCertificate_GetSerialNumber_Req, MaintainCertificate_GetSerialNumber_Ans>::Pointer ctx)
  127. {
  128. LOG_FUNCTION();
  129. char cSerialNum[32] = {0};
  130. bool bRet = GetSerialNoFromCert(USER_CERT_PATH, FORMAT_PEM, cSerialNum);
  131. if (bRet)
  132. {
  133. ctx->Ans.SerialNumber = cSerialNum;
  134. ctx->Answer(Error_Succeed);
  135. }
  136. else
  137. {
  138. ctx->Ans.SerialNumber = "";
  139. ctx->Answer(Error_Unexpect);
  140. }
  141. }
  142. void MaintainWatcherSession::Handle_GetCertLife(SpReqAnsContext<MaintainCertificate_GetCertLife_Req, MaintainCertificate_GetCertLife_Ans>::Pointer ctx)
  143. {
  144. LOG_FUNCTION();
  145. char cStratTime[32] = {0};
  146. char cEndTime[32] = {0};
  147. bool bRet = GetValidityFromCert(USER_CERT_PATH, FORMAT_PEM, cStratTime, cEndTime);
  148. if (bRet)
  149. {
  150. ctx->Ans.StartTime = cStratTime;
  151. ctx->Ans.EndTime = cEndTime;
  152. ctx->Answer(Error_Succeed);
  153. }
  154. else
  155. {
  156. ctx->Ans.StartTime = "";
  157. ctx->Ans.EndTime = "";
  158. ctx->Answer(Error_Unexpect);
  159. }
  160. }
  161. void MaintainWatcherSession::Handle_GetAuthorizedID(SpReqAnsContext<MaintainCertificate_GetAuthorizedID_Req, MaintainCertificate_GetAuthorizedID_Ans>::Pointer ctx)
  162. {
  163. LOG_FUNCTION();
  164. char cAuthorizedID[32] = {0};
  165. bool bRet = GetAuthorizerIDFromCert(USER_CERT_PATH, FORMAT_PEM, cAuthorizedID);
  166. if (bRet)
  167. {
  168. ctx->Ans.AuthorizedID = cAuthorizedID;
  169. ctx->Answer(Error_Succeed);
  170. }
  171. else
  172. {
  173. ctx->Ans.AuthorizedID = "";
  174. ctx->Answer(Error_Unexpect);
  175. }
  176. }
  177. void MaintainWatcherSession::Handle_GetAuthorizeTime(SpReqAnsContext<MaintainCertificate_GetAuthorizeTime_Req, MaintainCertificate_GetAuthorizeTime_Ans>::Pointer ctx)
  178. {
  179. LOG_FUNCTION();
  180. char cAuthorizeTime[32] = {0};
  181. bool bRet = GetAuthorizeTimeFromCert(USER_CERT_PATH, FORMAT_PEM, cAuthorizeTime);
  182. if (bRet)
  183. {
  184. ctx->Ans.AuthorizeTime = cAuthorizeTime;
  185. ctx->Answer(Error_Succeed);
  186. }
  187. else
  188. {
  189. ctx->Ans.AuthorizeTime = "";
  190. ctx->Answer(Error_Unexpect);
  191. }
  192. }
  193. void MaintainWatcherSession::Handle_GetUserInfo(SpReqAnsContext<MaintainCertificate_GetUserInfo_Req, MaintainCertificate_GetUserInfo_Ans>::Pointer ctx)
  194. {
  195. LOG_FUNCTION();
  196. char cUserType[3] = {0};
  197. bool bRet = GetUserTypeFromCert(USER_CERT_PATH, FORMAT_PEM, cUserType);
  198. if (!bRet)
  199. {
  200. Dbg("GetUserTypeFromCert err!");
  201. //return;
  202. }
  203. char cUserInfo[2048] = {0};
  204. bRet = GetUserInfoFromCert(USER_CERT_PATH, FORMAT_PEM, cUserInfo);
  205. string strUserInfo = cUserInfo;
  206. strUserInfo += "UserType=";
  207. strUserInfo += cUserType;
  208. strUserInfo += ";";
  209. memcpy(cUserInfo, strUserInfo.c_str(), strUserInfo.length());
  210. Dbg("Handle_GetUserInfo:UserInfo=%s", strUserInfo.c_str());
  211. if (bRet)
  212. {
  213. ctx->Ans.UserInfo = cUserInfo;
  214. ctx->Answer(Error_Succeed);
  215. }
  216. else
  217. {
  218. ctx->Ans.UserInfo = "";
  219. ctx->Answer(Error_Unexpect);
  220. }
  221. }
  222. void MaintainWatcherSession::Handle_SetSRStatus(SpReqAnsContext<MaintainCertificate_SetSRStatus_Req, MaintainCertificate_SetSRStatus_Ans>::Pointer ctx)
  223. {
  224. LOG_FUNCTION();
  225. ctx->Answer(Error_Succeed); // 告知中台已经收到状态设置
  226. m_pEntity->m_fsm.m_nSRState = ctx->Req.status;
  227. }
  228. void MaintainWatcherSession::Handle_VerifyPwd(SpReqAnsContext<MaintainCertificate_VerifyPwd_Req, MaintainCertificate_VerifyPwd_Ans>::Pointer ctx)
  229. {
  230. LOG_FUNCTION();
  231. DWORD dwRet = 0;
  232. CSimpleStringA strErrmsg;
  233. if (8 == ctx->Req.Pwd.GetLength())
  234. {
  235. dwRet = m_pEntity->m_fsm.VerifyUser(ctx->Req.Pwd.GetData());
  236. }
  237. else
  238. {
  239. dwRet = 0xF000FFFF;
  240. }
  241. if (dwRet != 0)
  242. {
  243. switch (dwRet)
  244. {
  245. case 0xF0000001:
  246. strErrmsg = "没有检测到电子钥匙,请插入电子钥匙!";
  247. break;
  248. case 0xF1000002:
  249. strErrmsg = "加载电子钥匙失败,请确认电子钥匙是否初始化!";
  250. break;
  251. case 0xF1000007:
  252. strErrmsg = "电子钥匙未开始生效,请确认电子钥匙有效期!";
  253. break;
  254. case 0xF1000008:
  255. strErrmsg = "电子钥匙超过有效期,请续期!";
  256. break;
  257. case 0xF100000a:
  258. strErrmsg = "电子钥匙CRL签名验证失败!";
  259. break;
  260. case 0xF100000b:
  261. strErrmsg = "电子钥匙已被撤销, 请重新初始化电子钥匙!";
  262. break;
  263. case 0xF100000c:
  264. strErrmsg = "电子钥匙HID(硬件ID)验证失败, 请重新初始化电子钥匙!";
  265. break;
  266. case 0xF100000d:
  267. strErrmsg = "电子钥匙验证失败,请确认电子钥匙是否正确初始化!";
  268. break;
  269. case 0xF100000e:
  270. strErrmsg = "申请内存失败, 终端内存不足!";
  271. break;
  272. case 0xF1000012:
  273. strErrmsg = "从电子钥匙获取任务信息错误, 请确认是否下载任务到电子钥匙!";
  274. break;
  275. case 0xF1000013:
  276. strErrmsg = "电子钥匙验证失败,请确认电子钥匙是否正确初始化!";
  277. break;
  278. case 0xF1000014:
  279. strErrmsg = "电子钥匙未开始生效,请确认电子钥匙有效期!";
  280. break;
  281. case 0xF1000015:
  282. strErrmsg = "电子钥匙超过有效期,请续期!";
  283. break;
  284. case 0xF0000018:
  285. strErrmsg = "当前登录用户访问权限不够,请登录到Administrator用户!";/*打开本地3des密钥文件失败!*/
  286. break;
  287. case 0xF0000019:
  288. strErrmsg = "当前登录用户访问权限不够,请登录到Administrator用户!";/*打开本地3des密钥长度错误!*/
  289. break;
  290. case 0xF000001a:
  291. strErrmsg = "找不到电子钥匙驱动,请确认是否成功安装驱动!";
  292. break;
  293. case 0xF000001b:
  294. strErrmsg = "当前登录用户访问权限不够,请登录到Administrator用户!";
  295. break;
  296. case 0xF000FF00:
  297. case 0xF000FFFF:
  298. strErrmsg = "电子钥匙密码错误,请确认后重新输入!";
  299. break;
  300. case 0xF000000F:
  301. strErrmsg = "电子钥匙未初始化,请初始化!";
  302. break;
  303. case VERIFYTYPE_ERR:
  304. strErrmsg = "电子钥匙不具备系统登录权限,认证类型错误!";
  305. break;
  306. case USERTYPE_ERR:
  307. strErrmsg = "电子钥匙不具备系统登录权限,用户类型错误!";
  308. break;
  309. case GET_USERINFO_ERR:
  310. strErrmsg = "从电子钥匙获取用户信息失败!";
  311. break;
  312. case IN_BLACKLIST_ERR:
  313. strErrmsg = "当前电子钥匙已被禁用,请取消挂失或更换其他电子钥匙!";
  314. break;
  315. case GET_ISSUERNUM_ERR:
  316. strErrmsg = "获取外拓卡箱号失败!";
  317. break;
  318. case VERIFY_ISSUERNUM_ERR:
  319. strErrmsg = "不具备当前外拓卡箱号的操作授权,请下载任务!";
  320. break;
  321. case VERIFY_TERMINALNO_ERR:
  322. strErrmsg = "不具备当前终端的操作授权,请下载任务!";
  323. break;
  324. case LOG_FULL_ERR:
  325. strErrmsg = "电子钥匙操作日志记录已满,请先登录作业平台上传操作日志!";
  326. break;
  327. case GET_NO_FRAMEWORK_PERMIT_ERR:
  328. strErrmsg = "电子钥匙类型不支持此操作!";
  329. break;
  330. case TERMINAL_NO_TASK:
  331. strErrmsg = "电子钥匙未下载设备的操作权限,请下载!!";
  332. break;
  333. case TERMINAL_AUTHORIZED_ERR:
  334. strErrmsg = "电子钥匙不具备此设备操作授权,请确认是否已授权!";
  335. break;
  336. case TERMINAL_AUTHORIZED_OVERTIME_ERR:
  337. strErrmsg = "设备授权已过期,请确认授权时间!";
  338. break;
  339. case TERMINAL_AUTHORIZED_NOTBEGIN_ERR:
  340. strErrmsg = "设备授权未开始生效,请确认授权时间!";
  341. break;
  342. case GET_CERT_VALIDITY_ERR:
  343. strErrmsg = "获取证书有效时间失败!";
  344. break;
  345. case OVERTTIMER_WAR:
  346. strErrmsg = "电子钥匙即将过期,请及时续期!";
  347. break;
  348. default:
  349. strErrmsg = "电子钥匙验证失败,请联系维护人员!";
  350. break;
  351. }
  352. }
  353. m_pEntity->m_fsm.m_strPwd = ctx->Req.Pwd;
  354. m_pEntity->m_fsm.m_errcode = dwRet;
  355. Dbg("VerifyUser return %08X, errmsg:%s",dwRet, strErrmsg);
  356. LogWarn(Severity_Middle, Error_Unexpect, ERR_MAINTAINWATCHER_EKEY_VERIFY,
  357. GetOutPutStr("%s%08X%s%s", "VerifyUser", dwRet, "strErrmsg", strErrmsg).c_str());
  358. m_pEntity->m_fsm.VerifyOther();
  359. ctx->Ans.Errcode = dwRet;
  360. ctx->Ans.ErrMsg = strErrmsg;
  361. ctx->Answer(Error_Succeed);
  362. }
  363. void MaintainWatcherSession::Handle_GetSignedInfo(SpReqAnsContext<MaintainCertificate_GetSignedInfo_Req, MaintainCertificate_GetSignedInfo_Ans>::Pointer ctx)
  364. {
  365. LOG_FUNCTION();
  366. //拼装待签名的内容
  367. //格式:电子钥匙ID@AgentID@终端ID@时间@业务号@流水号
  368. char cIndata[128];
  369. sprintf(cIndata, "%s@%s@%s@%s@%s@%s",
  370. m_pEntity->m_fsm.m_strKeyHID,
  371. m_pEntity->m_fsm.m_strTerminalId,
  372. m_pEntity->m_fsm.m_strUserID,
  373. m_pEntity->m_fsm.m_strNowTime,
  374. ctx->Req.SerialNo,
  375. ctx->Req.ServiceNo);
  376. /*char cSignedInfo[128] = {0};
  377. DWORD dwRet = GenSignedInfo(hHandle, pIndata, cSignedInfo);
  378. if (0 == dwRet)
  379. {
  380. ctx->Ans.SignedInfo = cSignedInfo;
  381. ctx->Answer(Error_Succeed);
  382. }
  383. else
  384. {
  385. ctx->Ans.SignedInfo = "";
  386. ctx->Answer(Error_Unexpect);
  387. }*/
  388. }
  389. void MaintainWatcherSession::Handle_USB(SpReqAnsContext<MaintainCertificate_USB_Req, MaintainCertificate_USB_Ans>::Pointer ctx)
  390. {
  391. LOG_FUNCTION();
  392. ErrorCodeEnum eErr = m_pEntity->m_fsm.OpenGpio(ctx->Req.open);
  393. ctx->Answer(eErr);
  394. }
  395. SP_BEGIN_ENTITY_MAP()
  396. SP_ENTITY(CUKEYConsoleEntity)
  397. SP_END_ENTITY_MAP()