PushCertificateChecker: Convert to a builder pattern

Change-Id: Ic32ad26ea89b5cbe9c0c4bfa33ace23d09a35750
This commit is contained in:
Dave Borowitz
2015-10-20 13:20:23 -04:00
parent 2737821ae3
commit 674844faf6
5 changed files with 20 additions and 13 deletions

View File

@@ -26,8 +26,7 @@ import java.io.IOException;
public class GerritPushCertificateChecker extends PushCertificateChecker { public class GerritPushCertificateChecker extends PushCertificateChecker {
public interface Factory { public interface Factory {
GerritPushCertificateChecker create(IdentifiedUser expectedUser, GerritPushCertificateChecker create(IdentifiedUser expectedUser);
boolean checkNonce);
} }
private final GitRepositoryManager repoManager; private final GitRepositoryManager repoManager;
@@ -38,9 +37,8 @@ public class GerritPushCertificateChecker extends PushCertificateChecker {
GerritPublicKeyChecker.Factory keyCheckerFactory, GerritPublicKeyChecker.Factory keyCheckerFactory,
GitRepositoryManager repoManager, GitRepositoryManager repoManager,
AllUsersName allUsers, AllUsersName allUsers,
@Assisted IdentifiedUser expectedUser, @Assisted IdentifiedUser expectedUser) {
@Assisted boolean checkNonce) { super(keyCheckerFactory.create().setExpectedUser(expectedUser));
super(keyCheckerFactory.create().setExpectedUser(expectedUser), checkNonce);
this.repoManager = repoManager; this.repoManager = repoManager;
this.allUsers = allUsers; this.allUsers = allUsers;
} }

View File

@@ -67,12 +67,18 @@ public abstract class PushCertificateChecker {
} }
private final PublicKeyChecker publicKeyChecker; private final PublicKeyChecker publicKeyChecker;
private final boolean checkNonce;
protected PushCertificateChecker(PublicKeyChecker publicKeyChecker, private boolean checkNonce;
boolean checkNonce) {
protected PushCertificateChecker(PublicKeyChecker publicKeyChecker) {
this.publicKeyChecker = publicKeyChecker; this.publicKeyChecker = publicKeyChecker;
checkNonce = true;
}
/** Set whether to check the status of the nonce; defaults to true. */
public PushCertificateChecker setCheckNonce(boolean checkNonce) {
this.checkNonce = checkNonce; this.checkNonce = checkNonce;
return this;
} }
/** /**

View File

@@ -54,7 +54,8 @@ public class SignedPushPreReceiveHook implements PreReceiveHook {
if (cert == null) { if (cert == null) {
return; return;
} }
CheckResult result = checkerFactory.create(user.get(), true) CheckResult result = checkerFactory.create(user.get())
.setCheckNonce(true)
.check(cert) .check(cert)
.getCheckResult(); .getCheckResult();
if (!isAllowed(result, commands)) { if (!isAllowed(result, commands)) {

View File

@@ -95,8 +95,10 @@ public class GpgApiAdapterImpl implements GpgApiAdapter {
IdentifiedUser expectedUser) throws GpgException { IdentifiedUser expectedUser) throws GpgException {
try { try {
PushCertificate cert = PushCertificateParser.fromString(certStr); PushCertificate cert = PushCertificateParser.fromString(certStr);
PushCertificateChecker.Result result = PushCertificateChecker.Result result = pushCertCheckerFactory
pushCertCheckerFactory.create(expectedUser, false).check(cert); .create(expectedUser)
.setCheckNonce(false)
.check(cert);
PushCertificateInfo info = new PushCertificateInfo(); PushCertificateInfo info = new PushCertificateInfo();
info.certificate = certStr; info.certificate = certStr;
info.key = GpgKeys.toJson(result.getPublicKey(), result.getCheckResult()); info.key = GpgKeys.toJson(result.getPublicKey(), result.getCheckResult());

View File

@@ -72,7 +72,7 @@ public class PushCertificateCheckerTest {
} }
private PushCertificateChecker newChecker(boolean checkNonce) { private PushCertificateChecker newChecker(boolean checkNonce) {
return new PushCertificateChecker(new PublicKeyChecker(), checkNonce) { return new PushCertificateChecker(new PublicKeyChecker()) {
@Override @Override
protected Repository getRepository() { protected Repository getRepository() {
return tr.getRepository(); return tr.getRepository();
@@ -82,7 +82,7 @@ public class PushCertificateCheckerTest {
protected boolean shouldClose(Repository repo) { protected boolean shouldClose(Repository repo) {
return false; return false;
} }
}; }.setCheckNonce(checkNonce);
} }
@Test @Test