diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/UploadValidationListener.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/UploadValidationListener.java index 971f455b1c..82ed65826a 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/UploadValidationListener.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/UploadValidationListener.java @@ -39,6 +39,7 @@ public interface UploadValidationListener { * @param repository The repository * @param project The project * @param remoteHost Remote address/hostname of the user + * @param up the UploadPack instance being processed * @param wants The list of wanted objects. These may be RevObject or RevCommit if the processor * parsed them. Implementors should not rely on the values being parsed. * @param haves The list of common objects. Empty on an initial clone request. These may be @@ -47,12 +48,34 @@ public interface UploadValidationListener { * @throws ValidationException to block the upload and send a message back to the end-user over * the client's protocol connection. */ - void onPreUpload( + default void onPreUpload( Repository repository, Project project, String remoteHost, UploadPack up, Collection wants, Collection haves) - throws ValidationException; + throws ValidationException {} + + /** + * Invoked before negotiation round is started. + * + * @param repository The repository + * @param project The project + * @param remoteHost Remote address/hostname of the user + * @param up the UploadPack instance being processed + * @param wants The list of wanted objects. These may be RevObject or RevCommit if the processor + * parsed them. Implementors should not rely on the values being parsed. + * @param cntOffered number of objects the client has offered. + * @throws ValidationException to block the upload and send a message back to the end-user over + * the client's protocol connection. + */ + default void onBeginNegotiate( + Repository repository, + Project project, + String remoteHost, + UploadPack up, + Collection wants, + int cntOffered) + throws ValidationException {} } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/UploadValidators.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/UploadValidators.java index 52b76e8559..84d4586aaa 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/UploadValidators.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/UploadValidators.java @@ -65,7 +65,15 @@ public class UploadValidators implements PreUploadHook { @Override public void onBeginNegotiateRound( UploadPack up, Collection wants, int cntOffered) - throws ServiceMayNotContinueException {} + throws ServiceMayNotContinueException { + for (UploadValidationListener validator : uploadValidationListeners) { + try { + validator.onBeginNegotiate(repository, project, remoteHost, up, wants, cntOffered); + } catch (ValidationException e) { + throw new UploadValidationException(e.getMessage()); + } + } + } @Override public void onEndNegotiateRound(