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);