Add option to allow to set custom HTTP passwords It was only possible for administrators to set custom passwords for serviceusers. However, there might be a legitimate reason for owners of a serviceuser to do so, instead of only generating a password. This change adds an option that allows serviceuser owners to set a custom HTTP password. This was made optional, since allowing this might not be compliant with all security standards. Change-Id: Id674fcbe312f7d912790e0b7fecaa9fd093a085b
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetConfig.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetConfig.java index 16e200a..c4aa9e1 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetConfig.java +++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetConfig.java
@@ -67,6 +67,7 @@ info.onSuccess = Strings.emptyToNull(cfg.getString("onSuccessMessage")); info.allowEmail = toBoolean(cfg.getBoolean("allowEmail", false)); info.allowHttpPassword = toBoolean(cfg.getBoolean("allowHttpPassword", false)); + info.allowCustomHttpPassword = toBoolean(cfg.getBoolean("allowCustomHttpPassword", false)); info.allowOwner = toBoolean(cfg.getBoolean("allowOwner", false)); info.createNotes = toBoolean(cfg.getBoolean("createNotes", true)); info.createNotesAsync = toBoolean(cfg.getBoolean("createNotesAsync", false)); @@ -100,6 +101,7 @@ public String onSuccess; public Boolean allowEmail; public Boolean allowHttpPassword; + public Boolean allowCustomHttpPassword; public Boolean allowOwner; public Boolean createNotes; public Boolean createNotesAsync;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutHttpPassword.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutHttpPassword.java index 4ff0525..16cfab8 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutHttpPassword.java +++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutHttpPassword.java
@@ -28,6 +28,7 @@ import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; +import com.googlesource.gerrit.plugins.serviceuser.GetConfig.ConfigInfo; import com.googlesource.gerrit.plugins.serviceuser.PutHttpPassword.Input; import java.io.IOException; import org.eclipse.jgit.errors.ConfigInvalidException; @@ -65,19 +66,19 @@ } input.httpPassword = Strings.emptyToNull(input.httpPassword); - Boolean httpPasswordAllowed; + ConfigInfo config; try { - httpPasswordAllowed = getConfig.get().apply(new ConfigResource()).value().allowHttpPassword; + config = getConfig.get().apply(new ConfigResource()).value(); } catch (Exception e) { throw asRestApiException("Cannot get configuration", e); } - if (input.generate || input.httpPassword == null) { - if ((httpPasswordAllowed == null || !httpPasswordAllowed)) { + if ((config.allowHttpPassword == null || !config.allowHttpPassword)) { + permissionBackend.user(self.get()).check(ADMINISTRATE_SERVER); + } else if (!input.generate && input.httpPassword != null) { + if ((config.allowCustomHttpPassword == null || !config.allowCustomHttpPassword)) { permissionBackend.user(self.get()).check(ADMINISTRATE_SERVER); } - } else { - permissionBackend.user(self.get()).check(ADMINISTRATE_SERVER); } String newPassword = input.generate ? generate() : input.httpPassword;
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md index aa2e4b5..b66c181 100644 --- a/src/main/resources/Documentation/config.md +++ b/src/main/resources/Documentation/config.md
@@ -59,6 +59,15 @@ passwords for any service user. By default false. +<a id="allowCustomHttpPassword"></a> +`plugin.@PLUGIN@.allowCustomHttpPassword` +: Whether it is allowed for service user owners to set custom HTTP + passwords for their service users. This option requires + `plugin.@PLUGIN@.allowHttpPassword` to be true. Independent of this + setting Gerrit administrators are always able to set custom HTTP + passwords for any service user. + By default false. + <a id="allowOwner"></a> `plugin.@PLUGIN@.allowOwner` : Whether it is allowed to set an owner group for a service user.