[ 
https://issues.apache.org/jira/browse/MRESOLVER-276?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17611857#comment-17611857
 ] 

ASF GitHub Bot commented on MRESOLVER-276:
------------------------------------------

michael-o commented on code in PR #200:
URL: https://github.com/apache/maven-resolver/pull/200#discussion_r985080021


##########
maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java:
##########
@@ -117,7 +122,8 @@ public DefaultArtifactResolver()
                              VersionResolver versionResolver, 
UpdateCheckManager updateCheckManager,
                              RepositoryConnectorProvider 
repositoryConnectorProvider,
                              RemoteRepositoryManager remoteRepositoryManager, 
SyncContextFactory syncContextFactory,
-                             OfflineController offlineController )
+                             OfflineController offlineController,
+                             Map<String, ArtifactResolverPostProcessor> 
artifactResolverPostProcessors )

Review Comment:
   Do we really need the key here?



##########
maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/resolution/ArtifactResolverPostProcessorSupport.java:
##########
@@ -0,0 +1,67 @@
+package org.eclipse.aether.internal.impl.resolution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.spi.resolution.ArtifactResolverPostProcessor;
+import org.eclipse.aether.util.ConfigUtils;
+
+import static java.util.Objects.requireNonNull;
+
+/**
+ * Support class to implement {@link ArtifactResolverPostProcessor}.
+ *
+ * @since TBD
+ */
+public abstract class ArtifactResolverPostProcessorSupport
+        implements ArtifactResolverPostProcessor
+{
+    private static final String CONFIG_PROP_PREFIX = 
"aether.artifactResolver.postProcessor.";
+
+    private static final String CONF_NAME_ENABLED = "enabled";

Review Comment:
   So the post processors aren't auto enabled when discovered by DI?



##########
maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java:
##########
@@ -426,6 +442,14 @@ else if ( local.getFile() != null )
             }
         }
 
+        for ( ArtifactResolverPostProcessor artifactResolverPostProcessor : 
artifactResolverPostProcessors.values() )
+        {
+            if ( artifactResolverPostProcessor.postProcess( session, results ) 
)
+            {
+                failures = true;
+            }

Review Comment:
   This is not fail fast, right?



##########
maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/resolution/ChecksumArtifactResolverPostProcessor.java:
##########
@@ -0,0 +1,89 @@
+package org.eclipse.aether.internal.impl.resolution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import java.util.List;
+
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.repository.ArtifactRepository;
+import org.eclipse.aether.resolution.ArtifactResult;
+import 
org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactorySelector;
+import org.eclipse.aether.spi.connector.checksum.ProvidedChecksumsSource;
+
+import static java.util.Objects.requireNonNull;
+
+/**
+ * Artifact resolver processor that verifies the checksums all the resolved 
artifacts against trusted (provided)
+ * checksums.
+ *
+ * @since TBD
+ */
+@Singleton
+@Named( ChecksumArtifactResolverPostProcessor.NAME )
+public final class ChecksumArtifactResolverPostProcessor
+        extends ArtifactResolverPostProcessorSupport
+{
+    public static final String NAME = "checksum";
+
+    private final ChecksumAlgorithmFactorySelector 
checksumAlgorithmFactorySelector;
+
+    private final List<ProvidedChecksumsSource> providedChecksumsSources;
+
+    @Inject
+    public ChecksumArtifactResolverPostProcessor( 
ChecksumAlgorithmFactorySelector checksumAlgorithmFactorySelector,
+                                                  
List<ProvidedChecksumsSource> providedChecksumsSources )
+    {
+        super( NAME );
+        this.checksumAlgorithmFactorySelector = requireNonNull( 
checksumAlgorithmFactorySelector );
+        this.providedChecksumsSources = requireNonNull( 
providedChecksumsSources );
+    }
+
+    @Override
+    protected boolean doProcess( RepositorySystemSession session, 
List<ArtifactResult> artifactResults )
+    {
+        boolean failures = false;
+        for ( ArtifactResult artifactResult : artifactResults )
+        {
+            Artifact artifact = artifactResult.getArtifact();
+            if ( artifact != null && artifact.getFile() != null )
+            {
+                if ( !validateArtifactChecksums( session, artifactResult ) )
+                {
+                    failures = true;
+                }
+            }
+        }
+        return failures;
+    }
+
+    private boolean validateArtifactChecksums( RepositorySystemSession 
session, ArtifactResult artifactResult )
+    {
+        Artifact artifact = artifactResult.getArtifact();
+        ArtifactRepository artifactRepository = artifactResult.getRepository();
+
+        // MRESOLVER-259 PR: use trusted checksum source here as this is NOT 
transport related!

Review Comment:
   This statement contradicts the constructor args.



##########
maven-resolver-spi/src/main/java/org/eclipse/aether/spi/resolution/ArtifactResolverPostProcessor.java:
##########
@@ -0,0 +1,44 @@
+package org.eclipse.aether.spi.resolution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.resolution.ArtifactResult;
+
+/**
+ * Artifact resolver post-resolution processor, is able to hook into resolver 
and post-process the resolved artifact
+ * results, if needed even produce resolution failure.
+ *
+ * @since TBD
+ */
+public interface ArtifactResolverPostProcessor
+{
+    /**
+     * Receives resolver results just before it would return it to caller. Is 
able to signal "resolution failure"
+     * by returning {@code true}. When signaling "failure", the passed in 
{@link ArtifactResult}s should be properly
+     * augmented using {@link ArtifactResult#addException(Exception)} calls.

Review Comment:
   The boolean logic seems inverted here, no? The method name says `postProcess 
` so a `true` signals that it has been post-processed, no?



##########
maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/resolution/ChecksumArtifactResolverPostProcessor.java:
##########
@@ -0,0 +1,89 @@
+package org.eclipse.aether.internal.impl.resolution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import java.util.List;
+
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.repository.ArtifactRepository;
+import org.eclipse.aether.resolution.ArtifactResult;
+import 
org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactorySelector;
+import org.eclipse.aether.spi.connector.checksum.ProvidedChecksumsSource;
+
+import static java.util.Objects.requireNonNull;
+
+/**
+ * Artifact resolver processor that verifies the checksums all the resolved 
artifacts against trusted (provided)
+ * checksums.
+ *
+ * @since TBD
+ */
+@Singleton
+@Named( ChecksumArtifactResolverPostProcessor.NAME )
+public final class ChecksumArtifactResolverPostProcessor
+        extends ArtifactResolverPostProcessorSupport
+{

Review Comment:
   So without this the provided checksums are useless? This is named provided 
since the Trusted to Provided Adapter supplies them?





> Resolver post-processor
> -----------------------
>
>                 Key: MRESOLVER-276
>                 URL: https://issues.apache.org/jira/browse/MRESOLVER-276
>             Project: Maven Resolver
>          Issue Type: Improvement
>          Components: Resolver
>            Reporter: Tamás Cservenák
>            Assignee: Tamás Cservenák
>            Priority: Major
>             Fix For: resolver-next
>
>
> Introduce new feature, resolver post-processor that is able to post process 
> resolution results just before artifact resolver returns them to caller. Post 
> processor should be able to signal resolution failure (along with errors) 
> just like existing resolution may fail.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to