import java.util.stream.Collectors;
import org.onap.cli.fw.cmd.OnapCommand;
+import org.onap.cli.fw.cmd.OnapCommandType;
import org.onap.cli.fw.conf.OnapCommandConfig;
import org.onap.cli.fw.conf.OnapCommandConstants;
import org.onap.cli.fw.error.OnapCommandException;
public class OnapCommandSchemaHttpLoader {
+ private static final String ATTRIBUTE = "Attribute '";
+
+ private OnapCommandSchemaHttpLoader() {
+ // to follow standards !
+ }
+
public static List<String> loadHttpSchema(OnapHttpCommand cmd, String schemaName, boolean includeDefault,
boolean validateSchema) throws OnapCommandException {
try {
List<String> errors = new ArrayList<>();
if (includeDefault) {
- Map<String, ?> defaultParameterMap = includeDefault ?
- OnapCommandSchemaLoader.validateSchemaVersion(OnapCommandHttpConstants.DEFAULT_PARAMETER_HTTP_FILE_NAME, cmd.getSchemaVersion()) : new HashMap<>();
+ Map<String, ?> defaultParameterMap = OnapCommandSchemaLoader.validateSchemaVersion(OnapCommandHttpConstants.DEFAULT_PARAMETER_HTTP_FILE_NAME, cmd.getSchemaVersion());
//mrkanag default_parameter is supported only for parameters.
if (defaultParameterMap.containsKey(OnapCommandConstants.INFO)) {
* @throws OnapCommandException
* on error
*/
- static ArrayList<String> parseHttpSchema(OnapHttpCommand cmd,
+ public static ArrayList<String> parseHttpSchema(OnapHttpCommand cmd,
final Map<String, ?> values,
boolean validate) throws OnapCommandException {
ArrayList<String> errorList = new ArrayList<>();
if (valMap != null) {
if (validate) {
OnapCommandUtils.validateTags(errorList, valMap, OnapCommandConfig.getCommaSeparatedList(OnapCommandHttpConstants.HTTP_SECTIONS),
- OnapCommandConfig.getCommaSeparatedList(OnapCommandHttpConstants.HTTP_MANDATORY_SECTIONS), OnapCommandConstants.PARAMETERS);
+ OnapCommandConfig.getCommaSeparatedList(OnapCommandHttpConstants.HTTP_MANDATORY_SECTIONS), OnapCommandHttpConstants.HTTP);
errorList.addAll(validateHttpSchemaSection(values));
}
for (Map.Entry<String, ?> entry1 : valMap.entrySet()) {
Map<String, String> query = (Map<String, String>) map.get(key2);
cmd.getInput().setReqQueries(query);
+ break;
+ case OnapCommandHttpConstants.CONTEXT:
+ Map<String, Object> context = (Map<String, Object>) map.get(key2);
+
+ for (String key: context.keySet()) {
+ switch (key) {
+ case OnapCommandHttpConstants.CONTEXT_REMOVE_EMPTY_JSON_NODES:
+ Boolean flag = (Boolean) context.get(OnapCommandHttpConstants.CONTEXT_REMOVE_EMPTY_JSON_NODES);
+ cmd.getInput().getContext().put(OnapCommandHttpConstants.CONTEXT_REMOVE_EMPTY_JSON_NODES, flag.toString());
+ break;
+ }
+ }
+
+
break;
case OnapCommandHttpConstants.MULTIPART_ENTITY_NAME:
Object multipartEntityName = map.get(key2);
if (serviceMap.containsKey(secKey)) {
Object obj = serviceMap.get(secKey);
if (obj == null) {
- errorList.add("Attribute '" + secKey + "' under '" + OnapCommandHttpConstants.SERVICE + "' is empty");
+ errorList.add(ATTRIBUTE + secKey + "' under '" + OnapCommandHttpConstants.SERVICE + "' is empty");
} else {
String value = String.valueOf(obj);
if (!OnapCommandConfig.getCommaSeparatedList(validationMap.get(secKey)).contains(value)) {
- errorList.add("Attribute '" + secKey + "' contains invalid value. Valide values are "
+ errorList.add(ATTRIBUTE + secKey + "' contains invalid value. Valide values are "
+ OnapCommandConfig.getCommaSeparatedList(validationMap.get(key1))); //
}
}
case OnapCommandHttpConstants.AUTH:
Object obj = serviceMap.get(key);
srv.setAuthType(obj.toString());
-
- //On None type, username, password and no_auth are invalid
- if (srv.isNoAuth()) {
- cmd.getParametersMap().get(OnapCommandHttpConstants.DEAFULT_PARAMETER_USERNAME).setInclude(false);
- cmd.getParametersMap().get(OnapCommandHttpConstants.DEAFULT_PARAMETER_PASSWORD).setInclude(false);
- cmd.getParametersMap().get(OnapCommandHttpConstants.DEFAULT_PARAMETER_NO_AUTH).setInclude(false);
- }
break;
- //mrkanag: from auth command, add the parameters to the command's parameters list
-
case OnapCommandHttpConstants.MODE:
Object mode = serviceMap.get(key);
srv.setMode(mode.toString());
break;
}
}
+
cmd.setService(srv);
}
break;
OnapCommandUtils.throwOrCollect(e, errorList, validate);
}
- //Handle the parameters for auth
+ //Handle the parameters for auth:
+ // for commands, copy params from login command to this command
if (!cmd.getService().isNoAuth()) {
- OnapCommand login = OnapCommandSchemaHttpLoader.findAuthCommand(cmd, "login");
- OnapCommandUtils.copyParamSchemasFrom(login, cmd);
+ if (cmd.getInfo().getCommandType().equals(OnapCommandType.AUTH)) {
+ OnapCommandUtils.throwOrCollect(new OnapCommandInvalidSchema(
+ cmd.getSchemaName(), "For auth type commands, http->service->auth should be none"),
+ errorList,
+ validate);
+ } else {
+ OnapCommand login = OnapCommandSchemaHttpLoader.findAuthCommand(cmd, "login");
+ OnapCommandUtils.copyParamSchemasFrom(login, cmd);
+ }
+ } else {
+ //with service->auth: none,
+ //normal cmd: ignore all auth parms
+ if (!cmd.getInfo().getCommandType().equals(OnapCommandType.AUTH)) {
+ cmd.getParametersMap().get(OnapCommandHttpConstants.DEAFULT_PARAMETER_USERNAME).setInclude(false);
+ cmd.getParametersMap().get(OnapCommandHttpConstants.DEAFULT_PARAMETER_PASSWORD).setInclude(false);
+ cmd.getParametersMap().get(OnapCommandHttpConstants.DEFAULT_PARAMETER_NO_AUTH).setInclude(false);
+ } else {
+ //auth: login and logout commands, ignore no-auth
+ cmd.getParametersMap().get(OnapCommandHttpConstants.DEFAULT_PARAMETER_NO_AUTH).setInclude(false);
+ //auth: only for logout commands, ignore username and password too
+ if (!cmd.getName().endsWith(OnapCommandHttpConstants.AUTH_SERVICE_LOGIN)) {
+ cmd.getParametersMap().get(OnapCommandHttpConstants.DEAFULT_PARAMETER_USERNAME).setInclude(false);
+ cmd.getParametersMap().get(OnapCommandHttpConstants.DEAFULT_PARAMETER_PASSWORD).setInclude(false);
+ }
+ }
}
return errorList;
String method = (String) requestMap.get(OnapCommandHttpConstants.METHOD);
if (method != null && !method.isEmpty()) {
if (!OnapCommandConfig.getCommaSeparatedList(OnapCommandHttpConstants.HTTP_METHODS).contains(method.toLowerCase())) {
- errorList.add("Attribute '" + OnapCommandHttpConstants.METHOD + "' under '" + OnapCommandHttpConstants.REQUEST + "' is invalid, correct types are "
+ errorList.add(ATTRIBUTE + OnapCommandHttpConstants.METHOD + "' under '" + OnapCommandHttpConstants.REQUEST + "' is invalid, correct types are "
+ OnapCommandConfig.getCommaSeparatedList(OnapCommandHttpConstants.HTTP_METHODS).toString());
}
} else {
List<String> invaliResultMapParams = resultMapParams.stream()
.filter(p -> !resultAttNames.contains(p)).collect(Collectors.toList());
+ List<String> attributesMissing = resultAttNames.stream()
+ .filter(p -> !resultMapParams.contains(p)).collect(Collectors.toList());
+ invaliResultMapParams.addAll(attributesMissing);
if (!invaliResultMapParams.isEmpty()) {
OnapCommandUtils.throwOrCollect(new OnapCommandHttpInvalidResultMap(invaliResultMapParams), errorList, true);
}
String body = String.valueOf(bodyString);
- JSONObject obj = null;
- try {
- obj = new ObjectMapper().readValue(body, JSONObject.class);
- } catch (IOException e1) { // NOSONAR
- errorList.add(OnapCommandHttpConstants.HTTP_BODY_FAILED_PARSING);
- }
- if (obj == null || "".equals(obj.toString())) {
+
+ if (body == null || "".equals(body)) {
errorList.add(OnapCommandHttpConstants.HTTP_BODY_JSON_EMPTY);
+ } else {
+ try {
+ new ObjectMapper().readValue(body, JSONObject.class);
+ } catch (IOException e1) { // NOSONAR
+ errorList.add(OnapCommandHttpConstants.HTTP_BODY_FAILED_PARSING);
+ }
}
+
OnapCommandUtils.parseParameters(body, bodyParamNames);
return bodyParamNames;
forCmd.getInfo().getService() + "-" +
forCmd.getService().getAuthType() + "-" + authAction,
forCmd.getInfo().getProduct());
- } catch (OnapCommandNotFound e) {
+ } catch (OnapCommandNotFound e) { // NOSONAR
auth = OnapCommandRegistrar.getRegistrar().get(
forCmd.getService().getAuthType() + "-" + authAction,
forCmd.getInfo().getProduct());