Skip to content

Commit 9b9eb2a

Browse files
author
gitlab
committed
Merge branch 'fix-54828@@2' into '4.6.31'
cherry-pick feature-haitai-4.5.3 to 4.6.31 See merge request zstackio/zstack!3854
2 parents a4d6b09 + e241279 commit 9b9eb2a

File tree

20 files changed

+788
-58
lines changed

20 files changed

+788
-58
lines changed

conf/db/upgrade/V4.6.31__schema.sql

+19
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
1+
CREATE TABLE IF NOT EXISTS `zstack`.`HaiTaiSecretResourcePoolVO` (
2+
`uuid` varchar(32) NOT NULL UNIQUE,
3+
`managementIp` varchar(32) NOT NULL,
4+
`port` int unsigned NOT NULL,
5+
`realm` varchar(32) NOT NULL,
6+
PRIMARY KEY (`uuid`),
7+
CONSTRAINT fkHaiTaiSecretResourcePoolVOSecretResourcePoolVO FOREIGN KEY (uuid) REFERENCES SecretResourcePoolVO (uuid) ON UPDATE RESTRICT ON DELETE CASCADE
8+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
9+
10+
CREATE TABLE IF NOT EXISTS `zstack`.`EncryptEntityMetadataVO` (
11+
`id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT,
12+
`entityName` varchar(255) NOT NULL,
13+
`columnName` varchar(255) NOT NULL,
14+
`state` varchar(32) NOT NULL,
15+
`lastOpDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
16+
`createDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
17+
PRIMARY KEY (`id`)
18+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
19+
120
ALTER TABLE `zstack`.`KVMHostVO` ADD COLUMN `osDistribution` varchar(64) DEFAULT NULL;
221
ALTER TABLE `zstack`.`KVMHostVO` ADD COLUMN `osRelease` varchar(64) DEFAULT NULL;
322
ALTER TABLE `zstack`.`KVMHostVO` ADD COLUMN `osVersion` varchar(64) DEFAULT NULL;

conf/persistence.xml

+1
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@
176176
<class>org.zstack.header.vm.devices.VmInstanceDeviceAddressVO</class>
177177
<class>org.zstack.header.vm.devices.VmInstanceDeviceAddressArchiveVO</class>
178178
<class>org.zstack.header.vm.devices.VmInstanceDeviceAddressGroupVO</class>
179+
<class>org.zstack.header.core.encrypt.EncryptEntityMetadataVO</class>
179180
<class>org.zstack.storage.ceph.primary.CephOsdGroupVO</class>
180181
<class>org.zstack.sdnController.header.SdnControllerVO</class>
181182
<class>org.zstack.sdnController.header.HardwareL2VxlanNetworkPoolVO</class>

conf/springConfigXml/encrypt.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
<bean id="EncryptFacade" class="org.zstack.core.encrypt.EncryptFacadeImpl">
2828
<zstack:plugin>
29-
<zstack:extension interface="org.zstack.header.Component"/>
29+
<zstack:extension interface="org.zstack.header.Component" order="-1"/>
3030
</zstack:plugin>
3131
</bean>
3232

@@ -43,4 +43,5 @@
4343
</bean>
4444

4545
<bean id="PasswordConvert" class="org.zstack.core.convert.PasswordConverter" />
46+
<bean id="SpecialDataConverter" class="org.zstack.core.convert.SpecialDataConverter" />
4647
</beans>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package org.zstack.core.convert;
2+
3+
import org.apache.commons.lang.StringUtils;
4+
import org.springframework.beans.factory.annotation.Autowire;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.beans.factory.annotation.Configurable;
7+
import org.springframework.stereotype.Component;
8+
import org.zstack.core.encrypt.EncryptFacade;
9+
import org.zstack.core.encrypt.EncryptGlobalConfig;
10+
import org.zstack.header.core.encrypt.PasswordEncryptType;
11+
import org.zstack.utils.Utils;
12+
import org.zstack.utils.logging.CLogger;
13+
14+
import javax.persistence.AttributeConverter;
15+
import javax.persistence.Converter;
16+
import java.util.regex.Matcher;
17+
import java.util.regex.Pattern;
18+
19+
/**
20+
* @Author: DaoDao
21+
* @Date: 2023/3/9
22+
*/
23+
@Component
24+
@Converter
25+
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE)
26+
public class SpecialDataConverter implements AttributeConverter<String, String> {
27+
private static final CLogger logger = Utils.getLogger(SpecialDataConverter.class);
28+
29+
private static EncryptFacade encryptFacade;
30+
31+
32+
@Autowired
33+
public void init(EncryptFacade encryptFacade){
34+
SpecialDataConverter.encryptFacade = encryptFacade;
35+
}
36+
37+
@Override
38+
public String convertToDatabaseColumn(String attribute) {
39+
if (PasswordEncryptType.None.toString().equals(EncryptGlobalConfig.ENABLE_PASSWORD_ENCRYPT.value(String.class))) {
40+
return attribute;
41+
}
42+
if (StringUtils.isEmpty(attribute)) {
43+
return attribute;
44+
}
45+
46+
if (!isMobileNO(attribute) && !checkEmail(attribute)) {
47+
return attribute;
48+
}
49+
50+
return encryptFacade.encrypt(attribute);
51+
}
52+
53+
@Override
54+
public String convertToEntityAttribute(String dbData) {
55+
if (PasswordEncryptType.None.toString().equals(EncryptGlobalConfig.ENABLE_PASSWORD_ENCRYPT.value(String.class))) {
56+
return dbData;
57+
}
58+
59+
if (StringUtils.isEmpty(dbData)) {
60+
return dbData ;
61+
}
62+
63+
return encryptFacade.decrypt(dbData);
64+
}
65+
66+
public static boolean isMobileNO(String mobiles) {
67+
try {
68+
Pattern p = Pattern
69+
.compile("[1][3456789][0-9]{9}$");
70+
Matcher m = p.matcher(mobiles);
71+
return m.matches();
72+
} catch (Exception e) {
73+
return false;
74+
}
75+
}
76+
77+
public static boolean checkEmail(String email) {
78+
try {
79+
String EMAIL_PATTERN = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
80+
Pattern pattern = Pattern.compile(EMAIL_PATTERN);;
81+
Matcher matcher = pattern.matcher(email);
82+
return matcher.matches();
83+
} catch (Exception e) {
84+
return false;
85+
}
86+
}
87+
}

core/src/main/java/org/zstack/core/encrypt/EncryptFacade.java

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.zstack.core.encrypt;
22

3+
import org.zstack.header.core.encrypt.EncryptEntityState;
4+
35
/**
46
* Created by kayo on 2018/9/7.
57
*/
@@ -11,4 +13,6 @@ public interface EncryptFacade {
1113
EncryptFacadeResult<String> encrypt(String data, String algType);
1214

1315
EncryptFacadeResult<String> decrypt(String data, String algType);
16+
17+
void updateEncryptDataStateIfExists(String entity, String column, EncryptEntityState state);
1418
}

0 commit comments

Comments
 (0)