Skip to content

Commit b627980

Browse files
committed
feat: 升级 wisp 版本, 增加命令过滤动作: 通知并告警
1 parent 0893dec commit b627980

File tree

15 files changed

+7056
-9204
lines changed

15 files changed

+7056
-9204
lines changed

Dockerfile-base

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ RUN set -ex \
2929
&& chmod 755 /usr/local/bin/check \
3030
&& rm -f check-${CHECK_VERSION}-linux-${TARGETARCH}.tar.gz
3131

32-
ARG WISP_VERSION=v0.1.22
32+
ARG WISP_VERSION=v0.2.0
3333
RUN set -ex \
3434
&& wget https://github.com/jumpserver/wisp/releases/download/${WISP_VERSION}/wisp-${WISP_VERSION}-linux-${TARGETARCH}.tar.gz \
3535
&& tar -xf wisp-${WISP_VERSION}-linux-${TARGETARCH}.tar.gz -C /usr/local/bin/ --strip-components=1 \

backend/framework/src/main/java/org/jumpserver/chen/framework/console/DataViewConsole.java

+42-1
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,17 @@
1313
import org.jumpserver.chen.framework.i18n.MessageUtils;
1414
import org.jumpserver.chen.framework.jms.entity.CommandRecord;
1515
import org.jumpserver.chen.framework.session.SessionManager;
16+
import org.jumpserver.chen.framework.session.controller.dialog.Button;
17+
import org.jumpserver.chen.framework.session.controller.dialog.Dialog;
1618
import org.jumpserver.chen.framework.utils.TreeUtils;
1719
import org.jumpserver.chen.framework.ws.io.Packet;
18-
import org.jumpserver.chen.wisp.Common;
20+
import org.jumpserver.wisp.Common;
1921
import org.springframework.web.socket.WebSocketSession;
2022

2123
import java.sql.SQLException;
2224
import java.util.Map;
25+
import java.util.concurrent.CountDownLatch;
26+
import java.util.concurrent.atomic.AtomicBoolean;
2327

2428
public class DataViewConsole extends AbstractConsole {
2529

@@ -110,6 +114,7 @@ public void createDataView(String schemaName, String tableName) {
110114
.getSqlActuator()
111115
.createPlan(schemaName, tableName, null);
112116
var sql = plan.getTargetSQL();
117+
113118
var aclResult = session.checkACL(sql);
114119
if (aclResult != null && (aclResult.getRiskLevel() == Common.RiskLevel.Reject || aclResult.getRiskLevel() == Common.RiskLevel.ReviewReject)) {
115120
this.getConsoleLogger().error("%s", MessageUtils.get("ACLRejectError"));
@@ -121,6 +126,42 @@ public void createDataView(String schemaName, String tableName) {
121126
this.stateManager.commit();
122127
throw new SQLException(MessageUtils.get("ACLRejectError"));
123128
}
129+
130+
if (aclResult!=null && aclResult.isNotify()) {
131+
132+
var dialog = new Dialog(MessageUtils.get("Warning"));
133+
dialog.setBody(MessageUtils.get("CommandWarningDialogMessage"));
134+
var countDownLatch = new CountDownLatch(1);
135+
AtomicBoolean hasNext = new AtomicBoolean(true);
136+
137+
dialog.addButton(new Button(MessageUtils.get("Submit"), "submit", countDownLatch::countDown));
138+
139+
dialog.addButton(new Button(MessageUtils.get("Cancel"), "cancel", () -> {
140+
hasNext.set(false);
141+
countDownLatch.countDown();
142+
this.getConsoleLogger().warn(MessageUtils.get("ExecutionCanceled"));
143+
}));
144+
145+
SessionManager.getCurrentSession().getController().showDialog(dialog);
146+
147+
try {
148+
countDownLatch.await();
149+
150+
if (!hasNext.get()) {
151+
throw new SQLException(MessageUtils.get("ExecutionCanceled"));
152+
}
153+
154+
} catch (InterruptedException e) {
155+
this.stateManager.commit();
156+
157+
this.getConsoleLogger().error("get result error");
158+
} finally {
159+
SessionManager.getCurrentSession().getController().closeDialog();
160+
}
161+
}
162+
163+
164+
124165
plan.setSqlQueryParams(sqlQueryParams);
125166
plan.generateTargetSQL();
126167

backend/framework/src/main/java/org/jumpserver/chen/framework/console/QueryConsole.java

+41-1
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@
2020
import org.jumpserver.chen.framework.jms.acl.ACLResult;
2121
import org.jumpserver.chen.framework.jms.entity.CommandRecord;
2222
import org.jumpserver.chen.framework.session.SessionManager;
23+
import org.jumpserver.chen.framework.session.controller.dialog.Button;
24+
import org.jumpserver.chen.framework.session.controller.dialog.Dialog;
2325
import org.jumpserver.chen.framework.utils.TreeUtils;
2426
import org.jumpserver.chen.framework.ws.io.Packet;
25-
import org.jumpserver.chen.wisp.Common;
27+
import org.jumpserver.wisp.Common;
2628
import org.springframework.web.socket.WebSocketSession;
2729

2830
import java.io.IOException;
@@ -32,6 +34,8 @@
3234
import java.util.ArrayList;
3335
import java.util.HashMap;
3436
import java.util.Map;
37+
import java.util.concurrent.CountDownLatch;
38+
import java.util.concurrent.atomic.AtomicBoolean;
3539

3640
@Slf4j
3741
public class QueryConsole extends AbstractConsole {
@@ -272,6 +276,42 @@ public void onSQL(String sql) {
272276
this.stateManager.commit();
273277
return;
274278
}
279+
280+
if (aclResult.isNotify()) {
281+
282+
var dialog = new Dialog(MessageUtils.get("Warning"));
283+
dialog.setBody(MessageUtils.get("CommandWarningDialogMessage"));
284+
var countDownLatch = new CountDownLatch(1);
285+
AtomicBoolean hasNext = new AtomicBoolean(true);
286+
287+
dialog.addButton(new Button(MessageUtils.get("Submit"), "submit", countDownLatch::countDown));
288+
289+
dialog.addButton(new Button(MessageUtils.get("Cancel"), "cancel", () -> {
290+
hasNext.set(false);
291+
countDownLatch.countDown();
292+
this.getConsoleLogger().warn(MessageUtils.get("ExecutionCanceled"));
293+
}));
294+
295+
SessionManager.getCurrentSession().getController().showDialog(dialog);
296+
297+
try {
298+
countDownLatch.await();
299+
300+
if (!hasNext.get()) {
301+
this.getState().setInQuery(false);
302+
this.stateManager.commit();
303+
return;
304+
}
305+
306+
} catch (InterruptedException e) {
307+
this.getState().setInQuery(false);
308+
this.stateManager.commit();
309+
310+
this.getConsoleLogger().error("获取结果失败!");
311+
} finally {
312+
SessionManager.getCurrentSession().getController().closeDialog();
313+
}
314+
}
275315
}
276316

277317

backend/framework/src/main/java/org/jumpserver/chen/framework/jms/acl/ACLResult.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.jumpserver.chen.framework.jms.acl;
22

33
import lombok.Data;
4-
import org.jumpserver.chen.wisp.Common;
4+
import org.jumpserver.wisp.Common;
55

66
@Data
77
public class ACLResult {
@@ -11,4 +11,6 @@ public class ACLResult {
1111

1212
private String CmdGroupId;
1313

14+
private boolean Notify = false;
15+
1416
}

backend/framework/src/main/java/org/jumpserver/chen/framework/jms/entity/CommandRecord.java

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

33
import lombok.Data;
44
import org.jumpserver.chen.framework.datasource.sql.SQLQueryResult;
5-
import org.jumpserver.chen.wisp.Common;
5+
import org.jumpserver.wisp.Common;
66

77
@Data
88
public class CommandRecord {

backend/framework/src/main/java/org/jumpserver/chen/framework/jms/impl/ACLFilterImpl.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
import org.jumpserver.chen.framework.session.SessionManager;
99
import org.jumpserver.chen.framework.session.controller.dialog.Button;
1010
import org.jumpserver.chen.framework.session.controller.dialog.Dialog;
11-
import org.jumpserver.chen.wisp.Common;
12-
import org.jumpserver.chen.wisp.ServiceGrpc;
13-
import org.jumpserver.chen.wisp.ServiceOuterClass;
11+
import org.jumpserver.wisp.Common;
12+
import org.jumpserver.wisp.ServiceGrpc;
13+
import org.jumpserver.wisp.ServiceOuterClass;
1414

1515
import java.sql.Connection;
1616
import java.util.List;
@@ -55,6 +55,10 @@ public ACLResult commandACLFilter(String command, Connection connection) {
5555
case Warning -> {
5656
result.setRiskLevel(Common.RiskLevel.Warning);
5757
}
58+
case NotifyWarning -> {
59+
result.setRiskLevel(Common.RiskLevel.Warning);
60+
result.setNotify(true);
61+
}
5862
case Reject -> {
5963
result.setRiskLevel(Common.RiskLevel.Reject);
6064
}

backend/framework/src/main/java/org/jumpserver/chen/framework/jms/impl/CommandHandlerImpl.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import lombok.extern.slf4j.Slf4j;
44
import org.jumpserver.chen.framework.jms.CommandHandler;
55
import org.jumpserver.chen.framework.jms.entity.CommandRecord;
6-
import org.jumpserver.chen.wisp.Common;
7-
import org.jumpserver.chen.wisp.ServiceGrpc;
8-
import org.jumpserver.chen.wisp.ServiceOuterClass;
6+
import org.jumpserver.wisp.Common;
7+
import org.jumpserver.wisp.ServiceGrpc;
8+
import org.jumpserver.wisp.ServiceOuterClass;
99
import org.springframework.scheduling.annotation.Async;
1010

1111
@Slf4j

backend/framework/src/main/java/org/jumpserver/chen/framework/jms/impl/ReplayHandlerImpl.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
import org.jumpserver.chen.framework.jms.ReplayHandler;
55
import org.jumpserver.chen.framework.jms.asciinema.AsciinemaWriter;
66
import org.jumpserver.chen.framework.jms.exception.ReplayException;
7-
import org.jumpserver.chen.wisp.Common;
8-
import org.jumpserver.chen.wisp.ServiceGrpc;
9-
import org.jumpserver.chen.wisp.ServiceOuterClass;
7+
import org.jumpserver.wisp.Common;
8+
import org.jumpserver.wisp.ServiceGrpc;
9+
import org.jumpserver.wisp.ServiceOuterClass;
1010

1111
import java.io.File;
1212
import java.io.FileWriter;

backend/framework/src/main/java/org/jumpserver/chen/framework/session/impl/JMSSession.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
import org.jumpserver.chen.framework.session.controller.message.MessageLevel;
2222
import org.jumpserver.chen.framework.session.exception.SessionException;
2323
import org.jumpserver.chen.framework.ws.io.PacketIO;
24-
import org.jumpserver.chen.wisp.Common;
25-
import org.jumpserver.chen.wisp.ServiceGrpc;
26-
import org.jumpserver.chen.wisp.ServiceOuterClass;
24+
import org.jumpserver.wisp.Common;
25+
import org.jumpserver.wisp.ServiceGrpc;
26+
import org.jumpserver.wisp.ServiceOuterClass;
2727

2828
import java.sql.Connection;
2929
import java.sql.SQLException;

backend/web/src/main/java/org/jumpserver/chen/web/hook/RegisterJMSEvent.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import org.jumpserver.chen.framework.session.SessionManager;
88
import org.jumpserver.chen.framework.session.impl.JMSSession;
99
import org.jumpserver.chen.web.config.MockConfig;
10-
import org.jumpserver.chen.wisp.ServiceGrpc;
11-
import org.jumpserver.chen.wisp.ServiceOuterClass;
10+
import org.jumpserver.wisp.ServiceGrpc;
11+
import org.jumpserver.wisp.ServiceOuterClass;
1212
import org.springframework.beans.factory.annotation.Autowired;
1313
import org.springframework.scheduling.annotation.Async;
1414
import org.springframework.stereotype.Component;

backend/web/src/main/java/org/jumpserver/chen/web/service/impl/JmsSessionService.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
import org.jumpserver.chen.framework.session.Session;
99
import org.jumpserver.chen.framework.session.impl.JMSSession;
1010
import org.jumpserver.chen.web.service.SessionService;
11-
import org.jumpserver.chen.wisp.Common;
12-
import org.jumpserver.chen.wisp.ServiceGrpc;
13-
import org.jumpserver.chen.wisp.ServiceOuterClass;
11+
import org.jumpserver.wisp.Common;
12+
import org.jumpserver.wisp.ServiceGrpc;
13+
import org.jumpserver.wisp.ServiceOuterClass;
1414
import org.springframework.stereotype.Service;
1515

1616
import java.time.Instant;

backend/wisp/pom.xml

+5
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
<artifactId>grpc-all</artifactId>
1818
<version>1.55.1</version>
1919
</dependency>
20+
<dependency>
21+
<groupId>com.google.protobuf</groupId>
22+
<artifactId>protobuf-java</artifactId>
23+
<version>4.28.0</version>
24+
</dependency>
2025
<dependency>
2126
<groupId>org.springframework</groupId>
2227
<artifactId>spring-context</artifactId>

0 commit comments

Comments
 (0)