Check that project exists when setting default project
Change-Id: I0a22cb77765f6daa16f7aae50dab55d5d5ad821c
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/PutConfig.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/PutConfig.java
index 45b30dc..693fb4f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/PutConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/PutConfig.java
@@ -21,9 +21,12 @@
import com.google.gerrit.extensions.annotations.RequiresCapability;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestModifyView;
+import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
+import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.config.ConfigResource;
import com.google.gerrit.server.config.PluginConfigFactory;
import com.google.gerrit.server.config.SitePaths;
+import com.google.gerrit.server.project.ProjectCache;
import com.google.inject.Inject;
import com.googlesource.gerrit.plugins.imagare.PutConfig.Input;
@@ -44,18 +47,21 @@
private final PluginConfigFactory cfgFactory;
private final SitePaths sitePaths;
private final String pluginName;
+ private final ProjectCache projectCache;
@Inject
PutConfig(PluginConfigFactory cfgFactory, SitePaths sitePaths,
- @PluginName String pluginName) throws IOException, ConfigInvalidException {
+ @PluginName String pluginName, ProjectCache projectCache)
+ throws IOException, ConfigInvalidException {
this.cfgFactory = cfgFactory;
this.sitePaths = sitePaths;
this.pluginName = pluginName;
+ this.projectCache = projectCache;
}
@Override
public Response<String> apply(ConfigResource rsrc, Input input)
- throws IOException, ConfigInvalidException {
+ throws IOException, ConfigInvalidException, UnprocessableEntityException {
if (input == null) {
input = new Input();
}
@@ -63,6 +69,10 @@
new FileBasedConfig(sitePaths.gerrit_config, FS.DETECTED);
cfg.load();
if (input.defaultProject != null) {
+ if (projectCache.get(new Project.NameKey(input.defaultProject)) == null) {
+ throw new UnprocessableEntityException("project '"
+ + input.defaultProject + "' does not exist");
+ }
cfg.setString("plugin", pluginName, "defaultProject",
Strings.emptyToNull(input.defaultProject));
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/PutPreference.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/PutPreference.java
index 38cc7f4..467287f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/PutPreference.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/PutPreference.java
@@ -23,6 +23,8 @@
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestModifyView;
+import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
+import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.account.AccountResource;
import com.google.gerrit.server.git.MetaDataUpdate;
@@ -55,7 +57,8 @@
@Override
public Response<String> apply(AccountResource rsrc, Input input)
- throws AuthException, RepositoryNotFoundException, IOException {
+ throws AuthException, RepositoryNotFoundException, IOException,
+ UnprocessableEntityException {
if (self.get() != rsrc.getUser()
&& !self.get().getCapabilities().canAdministrateServer()) {
throw new AuthException("not allowed to change preference");
@@ -73,6 +76,10 @@
String defaultProject = db.getString(PREFERENCE, username, KEY_DEFAULT_PROJECT);
if (Strings.emptyToNull(input.defaultProject) != null) {
+ if (projectCache.get(new Project.NameKey(input.defaultProject)) == null) {
+ throw new UnprocessableEntityException("project '"
+ + input.defaultProject + "' does not exist");
+ }
if (!input.defaultProject.equals(defaultProject)) {
db.setString(PREFERENCE, username, KEY_DEFAULT_PROJECT,
input.defaultProject);