Skip to content

Commit 645cb05

Browse files
cstamasslawekjaranowski
authored andcommitted
Add scope support for trusted checksums
Currently TC operated on all resolved artifacts, but this may not be what user wants. Add scope support with two values for now: "all" (as before, everything resolved is validated) or "project" (only project dependencies are validated). (cherry picked from commit 50587df)
1 parent af1a12a commit 645cb05

File tree

3 files changed

+132
-105
lines changed

3 files changed

+132
-105
lines changed

maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/resolution/TrustedChecksumsArtifactResolverPostProcessor.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,20 @@ public final class TrustedChecksumsArtifactResolverPostProcessor extends Artifac
8484
private static final String CONF_NAME_FAIL_IF_MISSING = "failIfMissing";
8585

8686
private static final String CONF_NAME_SNAPSHOTS = "snapshots";
87+
/**
88+
* The scope to apply during post-processing. Accepted values are {@code all} (is default and is what happened
89+
* before), and {@code project} when the scope of verification are project dependencies only (i.e. plugins are
90+
* not verified).
91+
*
92+
* @since 1.9.25
93+
*/
94+
public static final String CONFIG_PROP_SCOPE = "scope";
95+
96+
public static final String ALL_SCOPE = "all";
97+
98+
public static final String PROJECT_SCOPE = "project";
99+
100+
public static final String DEFAULT_SCOPE = ALL_SCOPE;
87101

88102
private static final String CONF_NAME_RECORD = "record";
89103

@@ -103,6 +117,18 @@ public TrustedChecksumsArtifactResolverPostProcessor(
103117
this.trustedChecksumsSources = requireNonNull(trustedChecksumsSources);
104118
}
105119

120+
private boolean inScope(RepositorySystemSession session, ArtifactResult artifactResult) {
121+
String scope = ConfigUtils.getString(session, DEFAULT_SCOPE, configPropKey(CONFIG_PROP_SCOPE));
122+
if (ALL_SCOPE.equals(scope)) {
123+
return artifactResult.isResolved();
124+
} else if (PROJECT_SCOPE.equals(scope)) {
125+
return artifactResult.isResolved()
126+
&& artifactResult.getRequest().getRequestContext().startsWith("project");
127+
} else {
128+
throw new IllegalArgumentException("Unknown value for configuration " + CONFIG_PROP_SCOPE + ": " + scope);
129+
}
130+
}
131+
106132
@SuppressWarnings("unchecked")
107133
@Override
108134
protected void doPostProcess(RepositorySystemSession session, List<ArtifactResult> artifactResults) {
@@ -123,7 +149,7 @@ final boolean record = ConfigUtils.getBoolean(session, false, configPropKey(CONF
123149
if (artifactResult.getRequest().getArtifact().isSnapshot() && !snapshots) {
124150
continue;
125151
}
126-
if (artifactResult.isResolved()) {
152+
if (inScope(session, artifactResult)) {
127153
if (record) {
128154
recordArtifactChecksums(session, artifactResult, checksumAlgorithms);
129155
} else if (!validateArtifactChecksums(session, artifactResult, checksumAlgorithms, failIfMissing)) {

maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/resolution/TrustedChecksumsArtifactResolverPostProcessorTest.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public Writer getTrustedArtifactChecksumsWriter(RepositorySystemSession session)
134134

135135
// -- TrustedChecksumsSource interface END
136136

137-
private ArtifactResult createArtifactResult(Artifact artifact) {
137+
private ArtifactResult createArtifactResult(Artifact artifact, String scope) {
138138
ArtifactResult artifactResult = new ArtifactResult(new ArtifactRequest().setArtifact(artifact));
139139
artifactResult.setArtifact(artifact);
140140
return artifactResult;
@@ -144,16 +144,16 @@ private ArtifactResult createArtifactResult(Artifact artifact) {
144144

145145
@Test
146146
public void unresolvedArtifact() {
147-
ArtifactResult artifactResult =
148-
createArtifactResult(artifactWithTrustedChecksum).setArtifact(null);
147+
ArtifactResult artifactResult = createArtifactResult(artifactWithTrustedChecksum, "project/compile")
148+
.setArtifact(null);
149149
assertThat(artifactResult.isResolved(), equalTo(false));
150150

151151
subject.postProcess(session, Collections.singletonList(artifactResult)); // no NPE
152152
}
153153

154154
@Test
155155
public void haveMatchingChecksumPass() {
156-
ArtifactResult artifactResult = createArtifactResult(artifactWithTrustedChecksum);
156+
ArtifactResult artifactResult = createArtifactResult(artifactWithTrustedChecksum, "project/compile");
157157
assertThat(artifactResult.isResolved(), equalTo(true));
158158

159159
subject.postProcess(session, Collections.singletonList(artifactResult));
@@ -162,7 +162,7 @@ public void haveMatchingChecksumPass() {
162162

163163
@Test
164164
public void haveNoChecksumPass() {
165-
ArtifactResult artifactResult = createArtifactResult(artifactWithoutTrustedChecksum);
165+
ArtifactResult artifactResult = createArtifactResult(artifactWithoutTrustedChecksum, "project/compile");
166166
assertThat(artifactResult.isResolved(), equalTo(true));
167167

168168
subject.postProcess(session, Collections.singletonList(artifactResult));
@@ -173,7 +173,7 @@ public void haveNoChecksumPass() {
173173
public void haveNoChecksumFailIfMissingEnabledFail() {
174174
session.setConfigProperty(
175175
"aether.artifactResolver.postProcessor.trustedChecksums.failIfMissing", Boolean.TRUE.toString());
176-
ArtifactResult artifactResult = createArtifactResult(artifactWithoutTrustedChecksum);
176+
ArtifactResult artifactResult = createArtifactResult(artifactWithoutTrustedChecksum, "plugin");
177177
assertThat(artifactResult.isResolved(), equalTo(true));
178178

179179
subject.postProcess(session, Collections.singletonList(artifactResult));
@@ -187,7 +187,7 @@ public void haveNoChecksumFailIfMissingEnabledFail() {
187187
@Test
188188
public void haveMismatchingChecksumFail() {
189189
artifactTrustedChecksum = "foobar";
190-
ArtifactResult artifactResult = createArtifactResult(artifactWithTrustedChecksum);
190+
ArtifactResult artifactResult = createArtifactResult(artifactWithTrustedChecksum, "project/compile");
191191
assertThat(artifactResult.isResolved(), equalTo(true));
192192

193193
subject.postProcess(session, Collections.singletonList(artifactResult));
@@ -214,7 +214,7 @@ public void addTrustedArtifactChecksums(
214214
};
215215
session.setConfigProperty(
216216
"aether.artifactResolver.postProcessor.trustedChecksums.record", Boolean.TRUE.toString());
217-
ArtifactResult artifactResult = createArtifactResult(artifactWithTrustedChecksum);
217+
ArtifactResult artifactResult = createArtifactResult(artifactWithTrustedChecksum, "project/compile");
218218
assertThat(artifactResult.isResolved(), equalTo(true));
219219

220220
subject.postProcess(session, Collections.singletonList(artifactResult));

0 commit comments

Comments
 (0)