|
@@ -11,7 +11,8 @@
|
|
|
#include "SpIni.h"
|
|
|
#include "SpUtility.h"
|
|
|
#include "CommEntitySettings.hpp"
|
|
|
-#include <regex.h>
|
|
|
+#include "CommEntityHelpAgge.hpp"
|
|
|
+
|
|
|
#include <regex>
|
|
|
|
|
|
#include "microservices/api_comm.h"
|
|
@@ -116,114 +117,12 @@ void CCenterSettingEntity::OnStarted()
|
|
|
pTransactionContext->SendAnswer(Error_Succeed);
|
|
|
}
|
|
|
|
|
|
- namespace
|
|
|
- {
|
|
|
- bool IsValidUrl(const CSimpleStringA& value)
|
|
|
- {
|
|
|
- if (value.IsNullOrEmpty()) {
|
|
|
- return false;
|
|
|
- } else {
|
|
|
- std::string strUrl = SP::Utility::ToLower(value.GetData());
|
|
|
- regex_t reg;
|
|
|
- CSimpleStringA pattern = "^((https|http)?://)";
|
|
|
- pattern += "?(([0-9a-z_!~*\\'().&=+$%-]+: )?[0-9a-z_!~*\\'().&=+$%-]+@)?";
|
|
|
- pattern += "(([0-9]{1,3}\\.){3}[0-9]{1,3}";
|
|
|
- pattern += "|";
|
|
|
- pattern += "([0-9a-z_!~*\\'()-]+\\.)*";
|
|
|
- pattern += "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\\.";
|
|
|
- pattern += "[a-z]{2,6})";
|
|
|
- pattern += "(:[0-9]{1,4})?";
|
|
|
- pattern += "((/?)|";
|
|
|
- pattern += "(/[0-9a-z_!~*\\'().;?:@&=+$,%#-]+)+/?)$";
|
|
|
-
|
|
|
- int ret = regcomp(®, pattern, REG_EXTENDED | REG_NOSUB);
|
|
|
- if (ret) {
|
|
|
- char ebuff[256];
|
|
|
- regerror(ret, ®, ebuff, 256);
|
|
|
- Dbg("regex failed: %s", ebuff);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- Dbg("pattern: %s", pattern.GetData());
|
|
|
- ret = regexec(®, strUrl.c_str(), 0, NULL, 0);
|
|
|
- if (0 == ret) {
|
|
|
- Dbg("correct url format: %s", strUrl.c_str());
|
|
|
- return true;
|
|
|
- } else {
|
|
|
- char ebuff[256];
|
|
|
- regerror(ret, ®, ebuff, 256);
|
|
|
- Dbg("%s not match: %s", strUrl.c_str(), ebuff);
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- bool IsNum(const std::string& value)
|
|
|
- {
|
|
|
- if (value.empty()) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- regex_t reg;
|
|
|
- const std::string pattern = "^[0-9]+$";
|
|
|
- int ret = regcomp(®, pattern.c_str(), REG_EXTENDED | REG_NOSUB);
|
|
|
- if (ret) {
|
|
|
- char ebuff[256];
|
|
|
- regerror(ret, ®, ebuff, 256);
|
|
|
- Dbg("regex failed: %s", ebuff);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- ret = regexec(®, value.c_str(), 0, NULL, 0);
|
|
|
- if (0 == ret) {
|
|
|
- Dbg("correct url format: %s", value.c_str());
|
|
|
- return true;
|
|
|
- } else {
|
|
|
- char ebuff[256];
|
|
|
- regerror(ret, ®, ebuff, 256);
|
|
|
- Dbg("%s not match: %s", value.c_str(), ebuff);
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- bool CheckIPv4(const std::string& value)
|
|
|
- {
|
|
|
- if (value.empty()) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- std::vector<std::string> elems = SP::Utility::Split(value, '.');
|
|
|
- if (elems.size() != 4) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- for (int i = 0; i < 4; i++) {
|
|
|
- if (!IsNum(elems[i])) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- if (elems[i].find(' ') != std::string::npos) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- if ((elems[i].find('0') == 0) && (elems[i].length() != 1)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if ((stoi(elems[0]) <= 0 || stoi(elems[0]) == 127 || stoi(elems[0]) > 223) ||
|
|
|
- (stoi(elems[1]) < 0 || stoi(elems[1]) > 255) ||
|
|
|
- (stoi(elems[2]) < 0 || stoi(elems[2]) > 255) ||
|
|
|
- (stoi(elems[3]) < 0 || stoi(elems[3]) > 255)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
ErrorCodeEnum CCenterSettingEntity::BeginDownloadCenterSetting(LPCTSTR serverIP, int port)
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
|
|
|
CSimpleStringA strServiceLink(serverIP);
|
|
|
- if (IsValidUrl(strServiceLink)) {
|
|
|
+ if (SP::Module::Ulitily::IsValidUrl(strServiceLink)) {
|
|
|
Dbg("download centersettings file from head branch micro service!");
|
|
|
CenterSettingsMicroServiceHelper microHelper(this);
|
|
|
if (strServiceLink.IndexOf(URLPATH_CENTERSETTING_UPDATE_CONFIG) == -1) {
|
|
@@ -245,7 +144,7 @@ void CCenterSettingEntity::OnStarted()
|
|
|
}
|
|
|
ReturnAndClearDownloadContext(rc);
|
|
|
return rc;
|
|
|
- } else if (CheckIPv4(strServiceLink.GetData()) && port > 0) {
|
|
|
+ } else if (SP::Module::Ulitily::CheckIPv4(strServiceLink.GetData()) && port > 0) {
|
|
|
/*指定分行服务IP和端口下载集中配置文件*/
|
|
|
if (!ConnectToServiceWithType(ConnectServerType::PARAM, serverIP, port)) {
|
|
|
return Error_NetBroken;
|