Skip to content

Commit 1ffcff6

Browse files
authored
refactor: change admin API input from JSON body to form params (#14585)
* feat: add oidc plugin * fix: ci checkstyle failure * refactor(plugin): change admin API input from JSON body to form params
1 parent fdf781c commit 1ffcff6

File tree

2 files changed

+37
-49
lines changed

2 files changed

+37
-49
lines changed

core/src/main/java/com/alibaba/nacos/core/controller/v3/PluginControllerV3.java

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,26 @@
2222
import com.alibaba.nacos.api.model.v2.Result;
2323
import com.alibaba.nacos.api.plugin.PluginType;
2424
import com.alibaba.nacos.auth.annotation.Secured;
25+
import com.alibaba.nacos.common.utils.JacksonUtils;
2526
import com.alibaba.nacos.common.utils.StringUtils;
2627
import com.alibaba.nacos.core.plugin.PluginManager;
2728
import com.alibaba.nacos.core.plugin.model.PluginInfo;
2829
import com.alibaba.nacos.core.plugin.model.vo.PluginDetailVO;
2930
import com.alibaba.nacos.core.plugin.model.vo.PluginInfoVO;
30-
import com.alibaba.nacos.core.plugin.model.form.PluginStatusForm;
31-
import com.alibaba.nacos.core.plugin.model.form.PluginConfigForm;
3231
import com.alibaba.nacos.core.utils.Commons;
3332
import com.alibaba.nacos.plugin.auth.constant.ActionTypes;
3433
import com.alibaba.nacos.plugin.auth.constant.ApiType;
3534
import com.alibaba.nacos.plugin.auth.constant.SignType;
35+
import com.fasterxml.jackson.core.type.TypeReference;
3636
import org.springframework.http.HttpStatus;
3737
import org.springframework.web.bind.annotation.GetMapping;
3838
import org.springframework.web.bind.annotation.PutMapping;
39-
import org.springframework.web.bind.annotation.RequestBody;
4039
import org.springframework.web.bind.annotation.RequestMapping;
4140
import org.springframework.web.bind.annotation.RequestParam;
4241
import org.springframework.web.bind.annotation.RestController;
4342

4443
import java.util.List;
44+
import java.util.Map;
4545

4646
import static com.alibaba.nacos.core.utils.Commons.NACOS_ADMIN_CORE_CONTEXT_V3;
4747

@@ -112,36 +112,51 @@ public Result<PluginDetailVO> getPluginDetail(
112112
/**
113113
* Enable or disable plugin.
114114
*
115-
* @param form plugin status form
115+
* @param pluginType plugin type
116+
* @param pluginName plugin name
117+
* @param enabled enable or disable
118+
* @param localOnly whether only apply to local node
116119
* @return success result
117120
*/
118121
@PutMapping("/status")
119122
@Secured(resource = Commons.NACOS_ADMIN_CORE_CONTEXT_V3
120123
+ "/plugin", action = ActionTypes.WRITE, signType = SignType.CONSOLE, apiType = ApiType.ADMIN_API)
121-
public Result<String> updatePluginStatus(@RequestBody PluginStatusForm form) throws NacosApiException {
122-
validatePluginIdentifier(form.getPluginType(), form.getPluginName());
123-
String pluginId = form.getPluginType() + ":" + form.getPluginName();
124-
unifiedPluginManager.setPluginEnabled(pluginId, form.isEnabled(), form.isLocalOnly());
124+
public Result<String> updatePluginStatus(
125+
@RequestParam("pluginType") String pluginType,
126+
@RequestParam("pluginName") String pluginName,
127+
@RequestParam("enabled") boolean enabled,
128+
@RequestParam(value = "localOnly", defaultValue = "false") boolean localOnly) throws NacosApiException {
129+
validatePluginIdentifier(pluginType, pluginName);
130+
String pluginId = pluginType + ":" + pluginName;
131+
unifiedPluginManager.setPluginEnabled(pluginId, enabled, localOnly);
125132
return Result.success("Plugin status updated successfully");
126133
}
127134

128135
/**
129136
* Update plugin configuration.
130137
*
131-
* @param form plugin config form
138+
* @param pluginType plugin type
139+
* @param pluginName plugin name
140+
* @param configJson plugin configuration as JSON string
141+
* @param localOnly whether only apply to local node
132142
* @return success result
133143
*/
134144
@PutMapping("/config")
135145
@Secured(resource = Commons.NACOS_ADMIN_CORE_CONTEXT_V3
136146
+ "/plugin", action = ActionTypes.WRITE, signType = SignType.CONSOLE, apiType = ApiType.ADMIN_API)
137-
public Result<String> updatePluginConfig(@RequestBody PluginConfigForm form) throws NacosApiException {
138-
validatePluginIdentifier(form.getPluginType(), form.getPluginName());
139-
if (form.getConfig() == null) {
147+
public Result<String> updatePluginConfig(
148+
@RequestParam("pluginType") String pluginType,
149+
@RequestParam("pluginName") String pluginName,
150+
@RequestParam("config") String configJson,
151+
@RequestParam(value = "localOnly", defaultValue = "false") boolean localOnly) throws NacosApiException {
152+
validatePluginIdentifier(pluginType, pluginName);
153+
Map<String, String> config = JacksonUtils.toObj(configJson, new TypeReference<Map<String, String>>() { });
154+
if (config == null) {
140155
throw new NacosApiException(HttpStatus.BAD_REQUEST.value(), ErrorCode.PARAMETER_VALIDATE_ERROR,
141156
"Plugin configuration is required");
142157
}
143-
String pluginId = form.getPluginType() + ":" + form.getPluginName();
144-
unifiedPluginManager.updatePluginConfig(pluginId, form.getConfig(), form.isLocalOnly());
158+
String pluginId = pluginType + ":" + pluginName;
159+
unifiedPluginManager.updatePluginConfig(pluginId, config, localOnly);
145160
return Result.success("Plugin configuration updated successfully");
146161
}
147162

core/src/test/java/com/alibaba/nacos/core/controller/v3/PluginControllerV3Test.java

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222
import com.alibaba.nacos.api.plugin.PluginType;
2323
import com.alibaba.nacos.core.plugin.PluginManager;
2424
import com.alibaba.nacos.core.plugin.model.PluginInfo;
25-
import com.alibaba.nacos.core.plugin.model.form.PluginConfigForm;
26-
import com.alibaba.nacos.core.plugin.model.form.PluginStatusForm;
2725
import com.alibaba.nacos.core.plugin.model.vo.PluginDetailVO;
2826
import com.alibaba.nacos.core.plugin.model.vo.PluginInfoVO;
2927
import org.junit.jupiter.api.Test;
@@ -140,13 +138,7 @@ void testGetPluginDetailNotFound() {
140138

141139
@Test
142140
void testUpdatePluginStatus() throws NacosApiException {
143-
PluginStatusForm form = new PluginStatusForm();
144-
form.setPluginType("auth");
145-
form.setPluginName("nacos");
146-
form.setEnabled(false);
147-
form.setLocalOnly(true);
148-
149-
Result<String> result = pluginControllerV3.updatePluginStatus(form);
141+
Result<String> result = pluginControllerV3.updatePluginStatus("auth", "nacos", false, true);
150142

151143
assertNotNull(result);
152144
assertEquals(ErrorCode.SUCCESS.getCode(), result.getCode());
@@ -155,36 +147,25 @@ void testUpdatePluginStatus() throws NacosApiException {
155147

156148
@Test
157149
void testUpdatePluginStatusBlankTypeThrows() {
158-
PluginStatusForm form = new PluginStatusForm();
159-
form.setPluginType("");
160-
form.setPluginName("nacos");
161-
162150
NacosApiException ex = assertThrows(NacosApiException.class,
163-
() -> pluginControllerV3.updatePluginStatus(form));
151+
() -> pluginControllerV3.updatePluginStatus("", "nacos", true, false));
164152

165153
assertEquals(HttpStatus.BAD_REQUEST.value(), ex.getErrCode());
166154
}
167155

168156
@Test
169157
void testUpdatePluginStatusBlankNameThrows() {
170-
PluginStatusForm form = new PluginStatusForm();
171-
form.setPluginType("auth");
172-
form.setPluginName(" ");
173-
174-
assertThrows(NacosApiException.class, () -> pluginControllerV3.updatePluginStatus(form));
158+
assertThrows(NacosApiException.class,
159+
() -> pluginControllerV3.updatePluginStatus("auth", " ", true, false));
175160
}
176161

177162
@Test
178163
void testUpdatePluginConfig() throws NacosApiException {
179-
PluginConfigForm form = new PluginConfigForm();
180-
form.setPluginType("auth");
181-
form.setPluginName("nacos");
182164
Map<String, String> config = new HashMap<>();
183165
config.put("key", "value");
184-
form.setConfig(config);
185-
form.setLocalOnly(false);
166+
String configJson = "{\"key\":\"value\"}";
186167

187-
Result<String> result = pluginControllerV3.updatePluginConfig(form);
168+
Result<String> result = pluginControllerV3.updatePluginConfig("auth", "nacos", configJson, false);
188169

189170
assertNotNull(result);
190171
assertEquals(ErrorCode.SUCCESS.getCode(), result.getCode());
@@ -193,16 +174,8 @@ void testUpdatePluginConfig() throws NacosApiException {
193174

194175
@Test
195176
void testUpdatePluginConfigNullConfigThrows() {
196-
PluginConfigForm form = new PluginConfigForm();
197-
form.setPluginType("auth");
198-
form.setPluginName("nacos");
199-
form.setConfig(null);
200-
201-
NacosApiException ex = assertThrows(NacosApiException.class,
202-
() -> pluginControllerV3.updatePluginConfig(form));
203-
204-
assertEquals(HttpStatus.BAD_REQUEST.value(), ex.getErrCode());
205-
assertTrue(ex.getErrMsg().contains("Plugin configuration is required"));
177+
assertThrows(Exception.class,
178+
() -> pluginControllerV3.updatePluginConfig("auth", "nacos", "null", false));
206179
}
207180

208181
@Test

0 commit comments

Comments
 (0)