Skip to content

Commit a9b1feb

Browse files
committed
refactor optimize tty auth
1 parent 6f49b4c commit a9b1feb

File tree

4 files changed

+52
-55
lines changed

4 files changed

+52
-55
lines changed

core/src/main/java/com/flowci/core/auth/service/AuthServiceImpl.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,16 @@
2525
import com.flowci.core.common.manager.SessionManager;
2626
import com.flowci.core.user.domain.User;
2727
import com.flowci.core.user.service.UserService;
28-
import com.flowci.exception.ArgumentException;
2928
import com.flowci.exception.AuthenticationException;
3029
import com.flowci.util.HashingHelper;
31-
import java.util.Objects;
32-
import java.util.Optional;
33-
3430
import lombok.extern.log4j.Log4j2;
3531
import org.springframework.beans.factory.annotation.Autowired;
3632
import org.springframework.cache.Cache;
3733
import org.springframework.stereotype.Service;
3834

35+
import java.util.Objects;
36+
import java.util.Optional;
37+
3938
@Log4j2
4039
@Service
4140
public class AuthServiceImpl implements AuthService {
@@ -68,7 +67,7 @@ public Tokens login(String email, String passwordOnMd5) {
6867
User user = userService.getByEmail(email);
6968

7069
if (!Objects.equals(user.getPasswordOnMd5(), passwordOnMd5)) {
71-
throw new ArgumentException("Invalid password");
70+
throw new AuthenticationException("Invalid password");
7271
}
7372

7473
// create token
Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.flowci.core.job.controller;
22

3+
import com.flowci.core.agent.domain.TtyCmd;
34
import com.flowci.core.auth.WebAuth;
5+
import com.flowci.core.common.manager.SpringEventManager;
6+
import com.flowci.core.job.event.TtyStatusUpdateEvent;
47
import com.flowci.core.job.service.TtyService;
58
import com.flowci.core.user.domain.User;
69
import com.flowci.exception.AuthenticationException;
@@ -11,7 +14,6 @@
1114
import org.springframework.messaging.handler.annotation.MessageExceptionHandler;
1215
import org.springframework.messaging.handler.annotation.MessageMapping;
1316
import org.springframework.messaging.handler.annotation.Payload;
14-
import org.springframework.messaging.simp.annotation.SendToUser;
1517
import org.springframework.stereotype.Controller;
1618

1719
@Log4j2
@@ -21,37 +23,65 @@ public class TtyController {
2123
@Autowired
2224
private WebAuth webAuth;
2325

26+
@Autowired
27+
private SpringEventManager eventManager;
28+
2429
@Autowired
2530
private TtyService ttyService;
2631

2732
@MessageExceptionHandler(AuthenticationException.class)
28-
@SendToUser("/topic/tty/errors")
29-
public Exception handleExceptions(AuthenticationException e) {
30-
return e;
33+
public void onAuthException(AuthenticationException e) {
34+
TtyCmd.In in = (TtyCmd.In) e.getExtra();
35+
36+
TtyCmd.Out out = new TtyCmd.Out()
37+
.setId(in.getId())
38+
.setAction(in.getAction())
39+
.setSuccess(false)
40+
.setError(e.getMessage());
41+
42+
eventManager.publish(new TtyStatusUpdateEvent(this, out));
3143
}
3244

3345
@MessageMapping("/tty/{jobId}/open")
3446
public void open(@DestinationVariable String jobId, MessageHeaders headers) {
35-
validate(headers);
36-
ttyService.open(jobId);
47+
TtyCmd.In in = new TtyCmd.In()
48+
.setId(jobId)
49+
.setAction(TtyCmd.Action.OPEN);
50+
51+
validate(in, headers);
52+
ttyService.execute(in);
3753
}
3854

3955
@MessageMapping("/tty/{jobId}/shell")
4056
public void shell(@DestinationVariable String jobId, @Payload String script, MessageHeaders headers) {
41-
validate(headers);
42-
ttyService.shell(jobId, script);
57+
TtyCmd.In in = new TtyCmd.In()
58+
.setId(jobId)
59+
.setAction(TtyCmd.Action.SHELL)
60+
.setInput(script);
61+
62+
validate(in, headers);
63+
ttyService.execute(in);
4364
}
4465

4566
@MessageMapping("/tty/{jobId}/close")
4667
public void close(@DestinationVariable String jobId, MessageHeaders headers) {
47-
validate(headers);
48-
ttyService.close(jobId);
68+
TtyCmd.In in = new TtyCmd.In()
69+
.setId(jobId)
70+
.setAction(TtyCmd.Action.CLOSE);
71+
72+
validate(in, headers);
73+
ttyService.execute(in);
4974
}
5075

51-
private void validate(MessageHeaders headers) {
52-
User user = webAuth.validate(headers);
53-
if (!user.isAdmin()) {
54-
throw new AuthenticationException("Admin permission is required");
76+
private void validate(TtyCmd.In in, MessageHeaders headers) {
77+
try {
78+
User user = webAuth.validate(headers);
79+
if (!user.isAdmin()) {
80+
throw new AuthenticationException("Admin permission is required");
81+
}
82+
} catch (AuthenticationException e) {
83+
e.setExtra(in);
84+
throw e;
5585
}
5686
}
5787
}
Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
11
package com.flowci.core.job.service;
22

3+
import com.flowci.core.agent.domain.TtyCmd;
4+
35
/**
46
* @author yang
57
*/
68
public interface TtyService {
79

8-
/**
9-
* Send 'Open' to current agent to open tty session
10-
*/
11-
void open(String jobId);
12-
13-
/**
14-
* Send shell script to agent
15-
*/
16-
void shell(String jobId, String script);
17-
18-
/**
19-
* Close current tty session
20-
*/
21-
void close(String jobId);
10+
void execute(TtyCmd.In in);
2211
}

core/src/main/java/com/flowci/core/job/service/TtyServiceImpl.java

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,7 @@ public class TtyServiceImpl implements TtyService {
2626
private SpringEventManager eventManager;
2727

2828
@Override
29-
public void open(String jobId) {
30-
dispatch(new TtyCmd.In()
31-
.setId(jobId)
32-
.setAction(TtyCmd.Action.OPEN));
33-
}
34-
35-
@Override
36-
public void shell(String jobId, String script) {
37-
dispatch(new TtyCmd.In()
38-
.setId(jobId)
39-
.setAction(TtyCmd.Action.SHELL)
40-
.setInput(script));
41-
}
42-
43-
@Override
44-
public void close(String jobId) {
45-
dispatch(new TtyCmd.In()
46-
.setId(jobId)
47-
.setAction(TtyCmd.Action.CLOSE));
48-
}
49-
50-
private void dispatch(TtyCmd.In in) {
29+
public void execute(TtyCmd.In in) {
5130
try {
5231
Agent agent = getAgent(in.getId());
5332

0 commit comments

Comments
 (0)