Skip to content

Commit 1b8f3e1

Browse files
committed
support list get and delete for git config
1 parent 06595b5 commit 1b8f3e1

File tree

12 files changed

+170
-91
lines changed

12 files changed

+170
-91
lines changed

core/src/main/java/com/flowci/core/auth/config/AuthConfig.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@
2222
import com.flowci.core.common.domain.Settings;
2323
import com.flowci.core.config.domain.ConfigAction;
2424
import com.flowci.core.flow.domain.FlowAction;
25+
import com.flowci.core.git.controller.GitActions;
2526
import com.flowci.core.job.domain.JobAction;
26-
import com.flowci.core.trigger.domain.TriggerOperations;
27-
import com.flowci.core.secret.domain.SecretAction;
27+
import com.flowci.core.trigger.domain.TriggerActions;
28+
import com.flowci.core.secret.controller.SecretActions;
2829
import com.flowci.core.user.domain.User;
2930
import com.flowci.core.user.domain.UserAction;
3031
import org.springframework.context.annotation.Bean;
@@ -43,19 +44,20 @@ public PermissionMap actionMap() {
4344
// admin
4445
permissionMap.add(User.Role.Admin, FlowAction.ALL);
4546
permissionMap.add(User.Role.Admin, JobAction.ALL);
46-
permissionMap.add(User.Role.Admin, SecretAction.ALL);
47+
permissionMap.add(User.Role.Admin, SecretActions.ALL);
4748
permissionMap.add(User.Role.Admin, AgentAction.ALL);
4849
permissionMap.add(User.Role.Admin, AgentHostAction.ALL);
4950
permissionMap.add(User.Role.Admin, UserAction.ALL);
5051
permissionMap.add(User.Role.Admin, ConfigAction.ALL);
51-
permissionMap.add(User.Role.Admin, TriggerOperations.ALL);
52+
permissionMap.add(User.Role.Admin, TriggerActions.ALL);
53+
permissionMap.add(User.Role.Admin, GitActions.ALL);
5254
permissionMap.add(User.Role.Admin, Settings.Action.ALL);
5355

5456
// developer
5557
permissionMap.add(User.Role.Developer,
5658
FlowAction.GET, FlowAction.LIST, FlowAction.LIST_BRANCH, FlowAction.GET, FlowAction.GET_YML);
5759
permissionMap.add(User.Role.Developer, JobAction.ALL);
58-
permissionMap.add(User.Role.Developer, SecretAction.LIST_NAME);
60+
permissionMap.add(User.Role.Developer, SecretActions.LIST_NAME);
5961
permissionMap.add(User.Role.Developer, AgentAction.GET, AgentAction.LIST);
6062
permissionMap.add(User.Role.Developer, AgentHostAction.GET, AgentHostAction.LIST);
6163
permissionMap.add(User.Role.Developer, UserAction.CHANGE_PASSWORD, UserAction.UPDATE_AVATAR);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.flowci.core.git.controller;
2+
3+
import com.google.common.collect.ImmutableList;
4+
5+
import java.util.List;
6+
7+
public abstract class GitActions {
8+
9+
public static final String LIST = "list_git_config";
10+
11+
public static final String GET = "get_git_config";
12+
13+
public static final String SAVE = "save_git_config";
14+
15+
public static final String DELETE = "delete_git_config";
16+
17+
public static final List<String> ALL = ImmutableList.of(
18+
LIST,
19+
GET,
20+
SAVE,
21+
DELETE
22+
);
23+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.flowci.core.git.controller;
2+
3+
import com.flowci.core.auth.annotation.Action;
4+
import com.flowci.core.common.domain.GitSource;
5+
import com.flowci.core.git.domain.GitConfig;
6+
import com.flowci.core.git.service.GitService;
7+
import lombok.extern.log4j.Log4j2;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.web.bind.annotation.*;
10+
11+
import java.util.List;
12+
13+
@Log4j2
14+
@RestController
15+
@RequestMapping("/gitsettings")
16+
public class GitConfigController {
17+
18+
@Autowired
19+
private GitService gitService;
20+
21+
@Action(GitActions.LIST)
22+
@GetMapping
23+
public List<GitConfig> list() {
24+
return gitService.list();
25+
}
26+
27+
@Action(GitActions.GET)
28+
@GetMapping("/{source}")
29+
public GitConfig get(@PathVariable String source) {
30+
return gitService.get(GitSource.valueOf(source.toUpperCase()));
31+
}
32+
33+
@Action(GitActions.SAVE)
34+
@PostMapping()
35+
public GitConfig save(@RequestBody Request.SaveOptions options) {
36+
return gitService.save(options.toGitConfig());
37+
}
38+
39+
@Action(GitActions.DELETE)
40+
@DeleteMapping("/{source}")
41+
public void delete(@PathVariable String source) {
42+
gitService.delete(GitSource.valueOf(source.toUpperCase()));
43+
}
44+
}

core/src/main/java/com/flowci/core/git/controller/GitSettingsController.java

Lines changed: 0 additions & 30 deletions
This file was deleted.

core/src/main/java/com/flowci/core/git/controller/Request.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.flowci.core.git.controller;
22

33
import com.flowci.core.common.domain.GitSource;
4+
import com.flowci.core.git.domain.GitConfig;
45
import lombok.Getter;
56
import lombok.Setter;
67

@@ -19,6 +20,9 @@ public static class SaveOptions {
1920
@NotEmpty
2021
private String secret;
2122

23+
public GitConfig toGitConfig() {
24+
return new GitConfig(source, secret);
25+
}
2226
}
2327

2428
}

core/src/main/java/com/flowci/core/git/dao/GitConfigDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@
1111
public interface GitConfigDao extends MongoRepository<GitConfig, String> {
1212

1313
Optional<GitConfig> findBySource(GitSource source);
14+
15+
void deleteBySource(GitSource source);
1416
}
Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
package com.flowci.core.git.service;
22

3+
import com.flowci.core.common.domain.GitSource;
34
import com.flowci.core.git.domain.GitConfig;
45

6+
import java.util.List;
7+
58
public interface GitService {
69

7-
GitConfig saveGithubSecret(String secret);
10+
List<GitConfig> list();
11+
12+
GitConfig save(GitConfig config);
13+
14+
GitConfig get(GitSource source);
15+
16+
void delete(GitSource source);
817
}

core/src/main/java/com/flowci/core/git/service/GitServiceImpl.java

Lines changed: 60 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.flowci.core.secret.event.GetSecretEvent;
1818
import com.flowci.exception.ArgumentException;
1919
import com.flowci.exception.NotFoundException;
20+
import com.flowci.exception.UnsupportedException;
2021
import com.flowci.util.StringHelper;
2122
import lombok.extern.log4j.Log4j2;
2223
import org.springframework.beans.factory.annotation.Autowired;
@@ -25,9 +26,7 @@
2526

2627
import javax.annotation.PostConstruct;
2728
import java.net.http.HttpClient;
28-
import java.util.HashMap;
29-
import java.util.Map;
30-
import java.util.Optional;
29+
import java.util.*;
3130

3231
@Log4j2
3332
@Service("gitService")
@@ -48,33 +47,36 @@ public class GitServiceImpl implements GitService {
4847
@Autowired
4948
private SessionManager sessionManager;
5049

51-
private final Map<GitSource, ActionHandler> actions = new HashMap<>(5);
50+
private final Map<GitSource, OperationHandler> handlers = new HashMap<>(5);
5251

5352
@PostConstruct
5453
public void init() {
55-
actions.put(GitSource.GITHUB, new GitHubActionHandler());
54+
handlers.put(GitSource.GITHUB, new GitHubOperationHandler());
5655
}
5756

5857
@Override
59-
public GitConfig saveGithubSecret(String secretName) {
60-
var event = eventManager.publish(new GetSecretEvent(this, secretName));
61-
Secret secret = event.getFetched();
62-
63-
if (!(secret instanceof TokenSecret)) {
64-
throw new ArgumentException("Token secret is required");
65-
}
58+
public List<GitConfig> list() {
59+
return gitConfigDao.findAll();
60+
}
6661

67-
var optional = gitConfigDao.findBySource(GitSource.GITHUB);
62+
@Override
63+
public GitConfig get(GitSource source) {
64+
Optional<GitConfig> optional = gitConfigDao.findBySource(source);
6865
if (optional.isEmpty()) {
69-
GitConfig c = new GitConfig(GitSource.GITHUB, secretName);
70-
c.setCreatedBy(sessionManager.getUserEmail());
71-
return gitConfigDao.save(c);
66+
throw new NotFoundException("Git config not found");
7267
}
68+
return optional.get();
69+
}
70+
71+
@Override
72+
public GitConfig save(GitConfig config) {
73+
OperationHandler handler = getHandler(config.getSource());
74+
return handler.save(config);
75+
}
7376

74-
GitConfig c = optional.get();
75-
c.setSecret(secretName);
76-
c.setUpdatedBy(sessionManager.getUserEmail());
77-
return gitConfigDao.save(c);
77+
@Override
78+
public void delete(GitSource source) {
79+
gitConfigDao.deleteBySource(source);
7880
}
7981

8082
@EventListener
@@ -88,12 +90,7 @@ public void onJobFinishEvent(JobFinishedEvent event) {
8890
}
8991

9092
try {
91-
var source = GitSource.valueOf(gitSourceStr);
92-
var handler = actions.get(source);
93-
94-
if (handler == null) {
95-
return;
96-
}
93+
var handler = getHandler(GitSource.valueOf(gitSourceStr));
9794

9895
var commit = new GitCommitStatus();
9996
commit.setId(JobContextHelper.getCommitId(job));
@@ -102,28 +99,57 @@ public void onJobFinishEvent(JobFinishedEvent event) {
10299
commit.setStatus(JobContextHelper.getStatus(job).name().toLowerCase());
103100
commit.setDesc(String.format("build %s from flow.ci", commit.getStatus()));
104101

105-
handler.write(commit);
102+
handler.writeCommit(commit);
106103
} catch (Throwable e) {
107104
log.warn(e.getMessage());
108105
}
109106
}
110107

111-
private interface ActionHandler {
112-
void write(GitCommitStatus commit);
108+
private OperationHandler getHandler(GitSource source) {
109+
OperationHandler handler = handlers.get(source);
110+
if (Objects.isNull(handler)) {
111+
throw new UnsupportedException("Unsupported git source");
112+
}
113+
return handler;
113114
}
114115

115-
private class GitHubActionHandler implements ActionHandler {
116+
private interface OperationHandler {
117+
118+
GitConfig save(GitConfig config);
119+
120+
void writeCommit(GitCommitStatus commit);
121+
}
122+
123+
private class GitHubOperationHandler implements OperationHandler {
116124

117125
private final GitAPIClient client = new GithubAPIClient(httpClient, objectMapper);
118126

119127
@Override
120-
public void write(GitCommitStatus commit) {
121-
Optional<GitConfig> optional = gitConfigDao.findBySource(GitSource.GITHUB);
128+
public GitConfig save(GitConfig config) {
129+
var event = eventManager.publish(new GetSecretEvent(this, config.getSecret()));
130+
Secret secret = event.getFetched();
131+
132+
if (!(secret instanceof TokenSecret)) {
133+
throw new ArgumentException("Token secret is required");
134+
}
135+
136+
var optional = gitConfigDao.findBySource(GitSource.GITHUB);
122137
if (optional.isEmpty()) {
123-
throw new NotFoundException("Github secret not found");
138+
GitConfig c = new GitConfig(GitSource.GITHUB, secret.getName());
139+
c.setCreatedBy(sessionManager.getUserEmail());
140+
return gitConfigDao.save(c);
124141
}
125142

126-
var event = eventManager.publish(new GetSecretEvent(GitServiceImpl.this, optional.get().getSecret()));
143+
GitConfig c = optional.get();
144+
c.setSecret(secret.getName());
145+
c.setUpdatedBy(sessionManager.getUserEmail());
146+
return gitConfigDao.save(c);
147+
}
148+
149+
@Override
150+
public void writeCommit(GitCommitStatus commit) {
151+
var c = get(GitSource.GITHUB);
152+
var event = eventManager.publish(new GetSecretEvent(GitServiceImpl.this, c.getSecret()));
127153
Secret secret = event.getFetched();
128154

129155
if (!(secret instanceof TokenSecret)) {

core/src/main/java/com/flowci/core/secret/domain/SecretAction.java renamed to core/src/main/java/com/flowci/core/secret/controller/SecretActions.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@
1515
*
1616
*/
1717

18-
package com.flowci.core.secret.domain;
18+
package com.flowci.core.secret.controller;
1919

2020
import com.google.common.collect.ImmutableList;
2121

2222
import java.util.List;
2323

24-
public abstract class SecretAction {
24+
public abstract class SecretActions {
2525

2626
public static final String LIST = "list_credential";
2727

0 commit comments

Comments
 (0)