Skip to content
Snippets Groups Projects
Commit c5e40886 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

Merge branch '575-integer-configuration-option-must-be-numeric' into 'devel_12.1.x'

Resolve "make sure that integer configuration option can be set to numeric value"

See merge request !503
parents 939b571f d16df47a
No related branches found
No related tags found
2 merge requests!541version 12.1.3 into master,!503Resolve "make sure that integer configuration option can be set to numeric value"
Pipeline #7446 passed
...@@ -23,6 +23,10 @@ public class QueryException extends Exception { ...@@ -23,6 +23,10 @@ public class QueryException extends Exception {
super(message); super(message);
} }
public QueryException(Exception e) {
super(e);
}
/** /**
* Constructor with error message and parent exception. * Constructor with error message and parent exception.
* *
......
...@@ -20,6 +20,7 @@ import com.fasterxml.jackson.core.JsonParseException; ...@@ -20,6 +20,7 @@ import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonMappingException;
import lcsb.mapviewer.api.BaseController; import lcsb.mapviewer.api.BaseController;
import lcsb.mapviewer.api.QueryException;
import lcsb.mapviewer.common.Configuration; import lcsb.mapviewer.common.Configuration;
import lcsb.mapviewer.services.SecurityException; import lcsb.mapviewer.services.SecurityException;
import lcsb.mapviewer.services.interfaces.IConfigurationService; import lcsb.mapviewer.services.interfaces.IConfigurationService;
...@@ -76,7 +77,7 @@ public class ConfigurationController extends BaseController { ...@@ -76,7 +77,7 @@ public class ConfigurationController extends BaseController {
@RequestBody String body, // @RequestBody String body, //
@CookieValue(value = Configuration.AUTH_TOKEN) String token, // @CookieValue(value = Configuration.AUTH_TOKEN) String token, //
@PathVariable(value = "option") String option // @PathVariable(value = "option") String option //
) throws SecurityException, JsonParseException, JsonMappingException, IOException { ) throws SecurityException, JsonParseException, JsonMappingException, IOException, QueryException {
Map<String, Object> node = parseBody(body); Map<String, Object> node = parseBody(body);
Map<String, Object> data = getData(node, "option"); Map<String, Object> data = getData(node, "option");
return configurationController.updateOption(token, option, data); return configurationController.updateOption(token, option, data);
......
...@@ -18,7 +18,9 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -18,7 +18,9 @@ import org.springframework.transaction.annotation.Transactional;
import lcsb.mapviewer.annotation.services.ModelAnnotator; import lcsb.mapviewer.annotation.services.ModelAnnotator;
import lcsb.mapviewer.annotation.services.annotators.ElementAnnotator; import lcsb.mapviewer.annotation.services.annotators.ElementAnnotator;
import lcsb.mapviewer.api.BaseRestImpl; import lcsb.mapviewer.api.BaseRestImpl;
import lcsb.mapviewer.api.QueryException;
import lcsb.mapviewer.common.Pair; import lcsb.mapviewer.common.Pair;
import lcsb.mapviewer.common.exception.InvalidArgumentException;
import lcsb.mapviewer.converter.IConverter; import lcsb.mapviewer.converter.IConverter;
import lcsb.mapviewer.converter.graphics.AbstractImageGenerator; import lcsb.mapviewer.converter.graphics.AbstractImageGenerator;
import lcsb.mapviewer.converter.graphics.ImageGenerators; import lcsb.mapviewer.converter.graphics.ImageGenerators;
...@@ -273,13 +275,17 @@ public class ConfigurationRestImpl extends BaseRestImpl { ...@@ -273,13 +275,17 @@ public class ConfigurationRestImpl extends BaseRestImpl {
} }
public Map<String, Object> updateOption(String token, String option, Map<String, Object> data) public Map<String, Object> updateOption(String token, String option, Map<String, Object> data)
throws SecurityException { throws SecurityException, QueryException {
if (!getUserService().userHasPrivilege(token, PrivilegeType.CONFIGURATION_MANAGE)) { if (!getUserService().userHasPrivilege(token, PrivilegeType.CONFIGURATION_MANAGE)) {
throw new SecurityException("Acces denied"); throw new SecurityException("Acces denied");
} }
ConfigurationElementType type = ConfigurationElementType.valueOf(option); ConfigurationElementType type = ConfigurationElementType.valueOf(option);
String value = (String) data.get("value"); String value = (String) data.get("value");
configurationService.setConfigurationValue(type, value); try {
configurationService.setConfigurationValue(type, value);
} catch (InvalidArgumentException e) {
throw new QueryException(e);
}
return optionToMap(configurationService.getValue(type)); return optionToMap(configurationService.getValue(type));
} }
......
...@@ -2,7 +2,9 @@ package lcsb.mapviewer.api.configuration; ...@@ -2,7 +2,9 @@ package lcsb.mapviewer.api.configuration;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
...@@ -14,10 +16,12 @@ import org.junit.Before; ...@@ -14,10 +16,12 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import lcsb.mapviewer.api.QueryException;
import lcsb.mapviewer.api.RestTestFunctions; import lcsb.mapviewer.api.RestTestFunctions;
import lcsb.mapviewer.model.map.MiriamType; import lcsb.mapviewer.model.map.MiriamType;
import lcsb.mapviewer.model.map.reaction.type.StateTransitionReaction; import lcsb.mapviewer.model.map.reaction.type.StateTransitionReaction;
import lcsb.mapviewer.model.map.species.GenericProtein; import lcsb.mapviewer.model.map.species.GenericProtein;
import lcsb.mapviewer.model.user.ConfigurationElementType;
public class ConfigurationRestImplTest extends RestTestFunctions { public class ConfigurationRestImplTest extends RestTestFunctions {
...@@ -50,6 +54,34 @@ public class ConfigurationRestImplTest extends RestTestFunctions { ...@@ -50,6 +54,34 @@ public class ConfigurationRestImplTest extends RestTestFunctions {
} }
} }
@Test
public void testSetSmtpPortToInvalid() throws Exception {
try {
Map<String, Object> data = new HashMap<>();
data.put("value", "not a number");
configurationRestImpl.updateOption(adminToken, ConfigurationElementType.EMAIL_SMTP_PORT.name(), data);
fail("Exception expected");
} catch (QueryException e) {
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
@Test
public void testSetSmtpPortToValid() throws Exception {
try {
Map<String, Object> data = new HashMap<>();
data.put("value", "255");
Map<String, Object> result = configurationRestImpl.updateOption(adminToken,
ConfigurationElementType.EMAIL_SMTP_PORT.name(), data);
assertNotNull(result);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
@Test @Test
public void testImageFormats() throws Exception { public void testImageFormats() throws Exception {
try { try {
......
...@@ -10,6 +10,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -10,6 +10,7 @@ import org.springframework.transaction.annotation.Transactional;
import lcsb.mapviewer.common.Configuration; import lcsb.mapviewer.common.Configuration;
import lcsb.mapviewer.common.FrameworkVersion; import lcsb.mapviewer.common.FrameworkVersion;
import lcsb.mapviewer.common.exception.InvalidArgumentException;
import lcsb.mapviewer.model.user.ConfigurationElementType; import lcsb.mapviewer.model.user.ConfigurationElementType;
import lcsb.mapviewer.model.user.ConfigurationOption; import lcsb.mapviewer.model.user.ConfigurationOption;
import lcsb.mapviewer.model.user.PrivilegeType; import lcsb.mapviewer.model.user.PrivilegeType;
...@@ -57,6 +58,17 @@ public class ConfigurationService implements IConfigurationService { ...@@ -57,6 +58,17 @@ public class ConfigurationService implements IConfigurationService {
@Override @Override
public void setConfigurationValue(ConfigurationElementType type, String value) { public void setConfigurationValue(ConfigurationElementType type, String value) {
if (value == null) {
throw new InvalidArgumentException("null is not a proper value");
}
switch (type.getEditType()) {
case INTEGER:
if (!value.matches("-?\\d+")) {
throw new InvalidArgumentException("Expected integer value but got: " + value);
}
break;
default:
}
ConfigurationOption configuration = configurationDao.getByType(type); ConfigurationOption configuration = configurationDao.getByType(type);
if (configuration == null) { if (configuration == null) {
configuration = new ConfigurationOption(); configuration = new ConfigurationOption();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment