Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
534fe83ac2 | ||
|
|
d95d958de0 | ||
|
|
4e5730f31f |
@@ -1,5 +1,5 @@
|
|||||||
#/bin/bash
|
#/bin/bash
|
||||||
version=2.3.0
|
version=2.3.1
|
||||||
docker build -t orion-visor-adminer:${version} .
|
docker build -t orion-visor-adminer:${version} .
|
||||||
docker tag orion-visor-adminer:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:${version}
|
docker tag orion-visor-adminer:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:${version}
|
||||||
docker tag orion-visor-adminer:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:latest
|
docker tag orion-visor-adminer:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:latest
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#/bin/bash
|
#/bin/bash
|
||||||
version=2.3.0
|
version=2.3.1
|
||||||
cp -r ../../sql ./sql
|
cp -r ../../sql ./sql
|
||||||
docker build -t orion-visor-mysql:${version} .
|
docker build -t orion-visor-mysql:${version} .
|
||||||
rm -rf ./sql
|
rm -rf ./sql
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#/bin/bash
|
#/bin/bash
|
||||||
version=2.3.0
|
version=2.3.1
|
||||||
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:${version}
|
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:${version}
|
||||||
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-mysql:${version}
|
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-mysql:${version}
|
||||||
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:${version}
|
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:${version}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#/bin/bash
|
#/bin/bash
|
||||||
version=2.3.0
|
version=2.3.1
|
||||||
docker build -t orion-visor-redis:${version} .
|
docker build -t orion-visor-redis:${version} .
|
||||||
docker tag orion-visor-redis:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:${version}
|
docker tag orion-visor-redis:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:${version}
|
||||||
docker tag orion-visor-redis:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:latest
|
docker tag orion-visor-redis:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:latest
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#/bin/bash
|
#/bin/bash
|
||||||
version=2.3.0
|
version=2.3.1
|
||||||
mv ../../orion-visor-launch/target/orion-visor-launch.jar ./orion-visor-launch.jar
|
mv ../../orion-visor-launch/target/orion-visor-launch.jar ./orion-visor-launch.jar
|
||||||
mv ../../orion-visor-ui/dist ./dist
|
mv ../../orion-visor-ui/dist ./dist
|
||||||
docker build --no-cache -t orion-visor-service:${version} .
|
docker build --no-cache -t orion-visor-service:${version} .
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public interface AppConst extends OrionConst {
|
|||||||
/**
|
/**
|
||||||
* 同 ${orion.version} 迭代时候需要手动更改
|
* 同 ${orion.version} 迭代时候需要手动更改
|
||||||
*/
|
*/
|
||||||
String VERSION = "2.3.0";
|
String VERSION = "2.3.1";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 同 ${spring.application.name}
|
* 同 ${spring.application.name}
|
||||||
|
|||||||
@@ -23,21 +23,13 @@
|
|||||||
package org.dromara.visor.common.interfaces;
|
package org.dromara.visor.common.interfaces;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rsa 加密器
|
* rsa 解密器
|
||||||
*
|
*
|
||||||
* @author Jiahang Li
|
* @author Jiahang Li
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
* @since 2025/1/5 20:58
|
* @since 2025/1/5 20:58
|
||||||
*/
|
*/
|
||||||
public interface RsaEncryptor {
|
public interface RsaDecryptor {
|
||||||
|
|
||||||
/**
|
|
||||||
* 加密
|
|
||||||
*
|
|
||||||
* @param value value
|
|
||||||
* @return value
|
|
||||||
*/
|
|
||||||
String encrypt(String value);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解密
|
* 解密
|
||||||
@@ -23,30 +23,20 @@
|
|||||||
package org.dromara.visor.common.utils;
|
package org.dromara.visor.common.utils;
|
||||||
|
|
||||||
import cn.orionsec.kit.lang.utils.Exceptions;
|
import cn.orionsec.kit.lang.utils.Exceptions;
|
||||||
import org.dromara.visor.common.interfaces.RsaEncryptor;
|
import org.dromara.visor.common.interfaces.RsaDecryptor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rsa 加密工具类
|
* rsa 参数解密工具类
|
||||||
*
|
*
|
||||||
* @author Jiahang Li
|
* @author Jiahang Li
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
* @since 2025/1/5 21:13
|
* @since 2025/1/5 21:13
|
||||||
*/
|
*/
|
||||||
public class RsaEncryptUtils {
|
public class RsaParamDecryptUtils {
|
||||||
|
|
||||||
private static RsaEncryptor delegate;
|
private static RsaDecryptor delegate;
|
||||||
|
|
||||||
private RsaEncryptUtils() {
|
private RsaParamDecryptUtils() {
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 加密
|
|
||||||
*
|
|
||||||
* @param value value
|
|
||||||
* @return value
|
|
||||||
*/
|
|
||||||
public static String encrypt(String value) {
|
|
||||||
return delegate.encrypt(value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -59,12 +49,12 @@ public class RsaEncryptUtils {
|
|||||||
return delegate.decrypt(value);
|
return delegate.decrypt(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setDelegate(RsaEncryptor delegate) {
|
public static void setDelegate(RsaDecryptor delegate) {
|
||||||
if (RsaEncryptUtils.delegate != null) {
|
if (RsaParamDecryptUtils.delegate != null) {
|
||||||
// unmodified
|
// unmodified
|
||||||
throw Exceptions.state();
|
throw Exceptions.state();
|
||||||
}
|
}
|
||||||
RsaEncryptUtils.delegate = delegate;
|
RsaParamDecryptUtils.delegate = delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
<url>https://github.com/dromara/orion-visor</url>
|
<url>https://github.com/dromara/orion-visor</url>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<revision>2.3.0</revision>
|
<revision>2.3.1</revision>
|
||||||
<spring.boot.version>2.7.17</spring.boot.version>
|
<spring.boot.version>2.7.17</spring.boot.version>
|
||||||
<spring.boot.admin.version>2.7.15</spring.boot.admin.version>
|
<spring.boot.admin.version>2.7.15</spring.boot.admin.version>
|
||||||
<flatten.maven.plugin.version>1.5.0</flatten.maven.plugin.version>
|
<flatten.maven.plugin.version>1.5.0</flatten.maven.plugin.version>
|
||||||
|
|||||||
@@ -25,12 +25,12 @@ package org.dromara.visor.framework.encrypt.configuration;
|
|||||||
import org.dromara.visor.common.config.ConfigStore;
|
import org.dromara.visor.common.config.ConfigStore;
|
||||||
import org.dromara.visor.common.constant.AutoConfigureOrderConst;
|
import org.dromara.visor.common.constant.AutoConfigureOrderConst;
|
||||||
import org.dromara.visor.common.interfaces.AesEncryptor;
|
import org.dromara.visor.common.interfaces.AesEncryptor;
|
||||||
import org.dromara.visor.common.interfaces.RsaEncryptor;
|
import org.dromara.visor.common.interfaces.RsaDecryptor;
|
||||||
import org.dromara.visor.common.utils.AesEncryptUtils;
|
import org.dromara.visor.common.utils.AesEncryptUtils;
|
||||||
import org.dromara.visor.common.utils.RsaEncryptUtils;
|
import org.dromara.visor.common.utils.RsaParamDecryptUtils;
|
||||||
import org.dromara.visor.framework.encrypt.configuration.config.AesEncryptConfig;
|
import org.dromara.visor.framework.encrypt.configuration.config.AesEncryptConfig;
|
||||||
import org.dromara.visor.framework.encrypt.core.impl.AesEncryptorImpl;
|
import org.dromara.visor.framework.encrypt.core.impl.AesEncryptorImpl;
|
||||||
import org.dromara.visor.framework.encrypt.core.impl.RsaEncryptorImpl;
|
import org.dromara.visor.framework.encrypt.core.impl.RsaDecryptorImpl;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
|
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
@@ -63,15 +63,15 @@ public class OrionEncryptAutoConfiguration {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param configStore configStore
|
* @param configStore configStore
|
||||||
* @return rsa 加密器
|
* @return rsa 参数解密器
|
||||||
*/
|
*/
|
||||||
@Bean
|
@Bean
|
||||||
public RsaEncryptor rsaEncryptor(ConfigStore configStore) {
|
public RsaDecryptor rsaParamDecryptor(ConfigStore configStore) {
|
||||||
// 加密器
|
// 解密器
|
||||||
RsaEncryptor encryptor = new RsaEncryptorImpl(configStore);
|
RsaDecryptor decryptor = new RsaDecryptorImpl(configStore);
|
||||||
// 设置工具类
|
// 设置工具类
|
||||||
RsaEncryptUtils.setDelegate(encryptor);
|
RsaParamDecryptUtils.setDelegate(decryptor);
|
||||||
return encryptor;
|
return decryptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,10 +26,11 @@ import cn.orionsec.kit.lang.utils.crypto.RSA;
|
|||||||
import org.dromara.visor.common.config.ConfigRef;
|
import org.dromara.visor.common.config.ConfigRef;
|
||||||
import org.dromara.visor.common.config.ConfigStore;
|
import org.dromara.visor.common.config.ConfigStore;
|
||||||
import org.dromara.visor.common.constant.ConfigKeys;
|
import org.dromara.visor.common.constant.ConfigKeys;
|
||||||
import org.dromara.visor.common.interfaces.RsaEncryptor;
|
import org.dromara.visor.common.interfaces.RsaDecryptor;
|
||||||
|
|
||||||
import java.security.interfaces.RSAPrivateKey;
|
import java.security.interfaces.RSAPrivateKey;
|
||||||
import java.security.interfaces.RSAPublicKey;
|
import java.util.Arrays;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rsa 加密器
|
* rsa 加密器
|
||||||
@@ -38,25 +39,21 @@ import java.security.interfaces.RSAPublicKey;
|
|||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
* @since 2025/1/7 11:32
|
* @since 2025/1/7 11:32
|
||||||
*/
|
*/
|
||||||
public class RsaEncryptorImpl implements RsaEncryptor {
|
public class RsaDecryptorImpl implements RsaDecryptor {
|
||||||
|
|
||||||
private final ConfigRef<RSAPublicKey> publicKey;
|
private static final String SPLIT = "\\|";
|
||||||
|
|
||||||
private final ConfigRef<RSAPrivateKey> privateKey;
|
private final ConfigRef<RSAPrivateKey> privateKey;
|
||||||
|
|
||||||
public RsaEncryptorImpl(ConfigStore configStore) {
|
public RsaDecryptorImpl(ConfigStore configStore) {
|
||||||
this.publicKey = configStore.ref(ConfigKeys.ENCRYPT_PUBLIC_KEY, RSA::getPublicKey);
|
|
||||||
this.privateKey = configStore.ref(ConfigKeys.ENCRYPT_PRIVATE_KEY, RSA::getPrivateKey);
|
this.privateKey = configStore.ref(ConfigKeys.ENCRYPT_PRIVATE_KEY, RSA::getPrivateKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String encrypt(String value) {
|
|
||||||
return RSA.encrypt(value, publicKey.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String decrypt(String value) {
|
public String decrypt(String value) {
|
||||||
return RSA.decrypt(value, privateKey.value);
|
return Arrays.stream(value.split(SPLIT))
|
||||||
|
.map(s -> RSA.decrypt(s, privateKey.value))
|
||||||
|
.collect(Collectors.joining());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -28,7 +28,7 @@ import com.fasterxml.jackson.databind.DeserializationContext;
|
|||||||
import com.fasterxml.jackson.databind.JsonDeserializer;
|
import com.fasterxml.jackson.databind.JsonDeserializer;
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import org.dromara.visor.common.constant.ErrorMessage;
|
import org.dromara.visor.common.constant.ErrorMessage;
|
||||||
import org.dromara.visor.common.utils.RsaEncryptUtils;
|
import org.dromara.visor.common.utils.RsaParamDecryptUtils;
|
||||||
import org.dromara.visor.common.utils.Valid;
|
import org.dromara.visor.common.utils.Valid;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -51,7 +51,7 @@ public class ParamDecryptDeserializer extends JsonDeserializer<String> {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
// 解密参数
|
// 解密参数
|
||||||
String decrypt = RsaEncryptUtils.decrypt(value);
|
String decrypt = RsaParamDecryptUtils.decrypt(value);
|
||||||
return Valid.notNull(decrypt, ErrorMessage.DECRYPT_ERROR);
|
return Valid.notNull(decrypt, ErrorMessage.DECRYPT_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ import java.util.function.Function;
|
|||||||
*/
|
*/
|
||||||
public class ReplaceVersion {
|
public class ReplaceVersion {
|
||||||
|
|
||||||
private static final String TARGET_VERSION = "2.2.3";
|
private static final String TARGET_VERSION = "2.3.0";
|
||||||
|
|
||||||
private static final String REPLACE_VERSION = "2.3.0";
|
private static final String REPLACE_VERSION = "2.3.1";
|
||||||
|
|
||||||
private static final String PATH = new File("").getAbsolutePath();
|
private static final String PATH = new File("").getAbsolutePath();
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import org.dromara.visor.common.constant.Const;
|
|||||||
import org.dromara.visor.common.constant.ErrorMessage;
|
import org.dromara.visor.common.constant.ErrorMessage;
|
||||||
import org.dromara.visor.common.handler.data.strategy.AbstractGenericsDataStrategy;
|
import org.dromara.visor.common.handler.data.strategy.AbstractGenericsDataStrategy;
|
||||||
import org.dromara.visor.common.utils.AesEncryptUtils;
|
import org.dromara.visor.common.utils.AesEncryptUtils;
|
||||||
import org.dromara.visor.common.utils.RsaEncryptUtils;
|
import org.dromara.visor.common.utils.RsaParamDecryptUtils;
|
||||||
import org.dromara.visor.common.utils.Valid;
|
import org.dromara.visor.common.utils.Valid;
|
||||||
import org.dromara.visor.module.asset.dao.HostIdentityDAO;
|
import org.dromara.visor.module.asset.dao.HostIdentityDAO;
|
||||||
import org.dromara.visor.module.asset.dao.HostKeyDAO;
|
import org.dromara.visor.module.asset.dao.HostKeyDAO;
|
||||||
@@ -134,7 +134,7 @@ public class HostSshConfigStrategy extends AbstractGenericsDataStrategy<HostSshC
|
|||||||
// 检查新密码
|
// 检查新密码
|
||||||
String newPassword = Valid.notBlank(after.getPassword(), ErrorMessage.PASSWORD_MISSING);
|
String newPassword = Valid.notBlank(after.getPassword(), ErrorMessage.PASSWORD_MISSING);
|
||||||
// 解密密码
|
// 解密密码
|
||||||
newPassword = RsaEncryptUtils.decrypt(newPassword);
|
newPassword = RsaParamDecryptUtils.decrypt(newPassword);
|
||||||
Valid.notBlank(newPassword, ErrorMessage.DECRYPT_ERROR);
|
Valid.notBlank(newPassword, ErrorMessage.DECRYPT_ERROR);
|
||||||
// 设置密码
|
// 设置密码
|
||||||
after.setPassword(AesEncryptUtils.encryptAsString(newPassword));
|
after.setPassword(AesEncryptUtils.encryptAsString(newPassword));
|
||||||
|
|||||||
@@ -3,4 +3,4 @@ VITE_API_BASE_URL=http://127.0.0.1:9200/orion-visor/api
|
|||||||
# websocket 路径
|
# websocket 路径
|
||||||
VITE_WS_BASE_URL=ws://127.0.0.1:9200/orion-visor/keep-alive
|
VITE_WS_BASE_URL=ws://127.0.0.1:9200/orion-visor/keep-alive
|
||||||
# 版本号
|
# 版本号
|
||||||
VITE_APP_VERSION=2.3.0
|
VITE_APP_VERSION=2.3.1
|
||||||
|
|||||||
@@ -3,4 +3,4 @@ VITE_API_BASE_URL=/orion-visor/api
|
|||||||
# websocket 路径
|
# websocket 路径
|
||||||
VITE_WS_BASE_URL=/orion-visor/keep-alive
|
VITE_WS_BASE_URL=/orion-visor/keep-alive
|
||||||
# 版本号
|
# 版本号
|
||||||
VITE_APP_VERSION=2.3.0
|
VITE_APP_VERSION=2.3.1
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "orion-visor-ui",
|
"name": "orion-visor-ui",
|
||||||
"description": "Orion Visor UI",
|
"description": "Orion Visor UI",
|
||||||
"version": "2.3.0",
|
"version": "2.3.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"author": "Jiahang Li",
|
"author": "Jiahang Li",
|
||||||
"license": "Apache 2.0",
|
"license": "Apache 2.0",
|
||||||
|
|||||||
@@ -2,6 +2,9 @@ import { JSEncrypt } from 'jsencrypt';
|
|||||||
import { useCacheStore } from '@/store';
|
import { useCacheStore } from '@/store';
|
||||||
import { Message } from '@arco-design/web-vue';
|
import { Message } from '@arco-design/web-vue';
|
||||||
|
|
||||||
|
// 分块大小
|
||||||
|
const BLOCK_SIZE = 100;
|
||||||
|
|
||||||
// 加密
|
// 加密
|
||||||
export const encrypt = async (data: string | undefined): Promise<string | undefined> => {
|
export const encrypt = async (data: string | undefined): Promise<string | undefined> => {
|
||||||
// 为空直接返回
|
// 为空直接返回
|
||||||
@@ -9,14 +12,32 @@ export const encrypt = async (data: string | undefined): Promise<string | undefi
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
// 获取公钥
|
// 获取公钥
|
||||||
const { encrypt } = await useCacheStore().loadSystemSetting();
|
const publicKey = (await useCacheStore().loadSystemSetting()).encrypt?.publicKey;
|
||||||
const encryptor = new JSEncrypt();
|
const encryptor = new JSEncrypt();
|
||||||
encryptor.setPublicKey(encrypt?.publicKey);
|
encryptor.setPublicKey(publicKey);
|
||||||
// 加密
|
|
||||||
const value = encryptor.encrypt(data);
|
try {
|
||||||
if (value === false) {
|
// 分块加密
|
||||||
|
const chunks = splitString(data);
|
||||||
|
const encryptedChunks = chunks.map(chunk => {
|
||||||
|
const encrypted = encryptor.encrypt(chunk);
|
||||||
|
if (encrypted === false) {
|
||||||
|
throw new Error();
|
||||||
|
}
|
||||||
|
return encrypted;
|
||||||
|
});
|
||||||
|
return encryptedChunks.join('|');
|
||||||
|
} catch (error) {
|
||||||
Message.error('数据加密失败');
|
Message.error('数据加密失败');
|
||||||
throw new Error('数据加密失败');
|
throw new Error('数据加密失败');
|
||||||
}
|
}
|
||||||
return value;
|
};
|
||||||
|
|
||||||
|
// 分割字符串
|
||||||
|
const splitString = (str: string): string[] => {
|
||||||
|
const chunks: string[] = [];
|
||||||
|
for (let i = 0; i < str.length; i += BLOCK_SIZE) {
|
||||||
|
chunks.push(str.slice(i, i + BLOCK_SIZE));
|
||||||
|
}
|
||||||
|
return chunks;
|
||||||
};
|
};
|
||||||
|
|||||||
2
pom.xml
2
pom.xml
@@ -22,7 +22,7 @@
|
|||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<revision>2.3.0</revision>
|
<revision>2.3.1</revision>
|
||||||
<maven.compiler.source>8</maven.compiler.source>
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
<maven.compiler.target>8</maven.compiler.target>
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
<maven.surefire.plugin.version>3.0.0-M5</maven.surefire.plugin.version>
|
<maven.surefire.plugin.version>3.0.0-M5</maven.surefire.plugin.version>
|
||||||
|
|||||||
Reference in New Issue
Block a user