This is an automated email from the ASF dual-hosted git repository.

lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/master by this push:
     new 1de2681  fix: Validate maven artifacts
1de2681 is described below

commit 1de2681fc8eada9ec0285954152fdeecda50ae29
Author: James Netherton <jamesnether...@gmail.com>
AuthorDate: Mon Jun 24 09:47:12 2019 +0100

    fix: Validate maven artifacts
    
    fixes #742
---
 pkg/cmd/install.go                    | 99 ++++++++++++++++++++---------------
 pkg/util/maven/maven_project.go       |  9 +++-
 pkg/util/maven/maven_project_test.go  | 18 +++++++
 pkg/util/maven/maven_settings_test.go | 10 ++--
 pkg/util/maven/maven_types.go         |  5 +-
 5 files changed, 91 insertions(+), 50 deletions(-)

diff --git a/pkg/cmd/install.go b/pkg/cmd/install.go
index f7e21a3..885fb0a 100644
--- a/pkg/cmd/install.go
+++ b/pkg/cmd/install.go
@@ -212,58 +212,62 @@ func (o *installCmdOptions) install(_ *cobra.Command, _ 
[]string) error {
                        platform.Spec.Build.Timeout.Duration = d
                }
 
-               if len(o.mavenRepositories) > 0 {
-                       o.mavenSettings = 
fmt.Sprintf("configmap:%s-maven-settings/settings.xml", platform.Name)
+               o.mavenSettings = 
fmt.Sprintf("configmap:%s-maven-settings/settings.xml", platform.Name)
 
-                       settings := maven.NewSettings()
-                       repositories := make([]maven.Repository, 0, 
len(o.mavenRepositories))
+               settings := maven.NewSettings()
+               repositories := make([]maven.Repository, 0, 
len(o.mavenRepositories))
 
-                       for i, r := range o.mavenRepositories {
-                               repository := maven.NewRepository(r)
-                               if repository.ID == "" {
-                                       repository.ID = 
fmt.Sprintf("repository-%03d", i)
-                               }
-
-                               repositories = append(repositories, repository)
+               for i, r := range o.mavenRepositories {
+                       repository := maven.NewRepository(r)
+                       if repository.ID == "" {
+                               repository.ID = fmt.Sprintf("repository-%03d", 
i)
                        }
 
-                       settings.Profiles = []maven.Profile{
-                               {
-                                       ID: "maven-settings",
-                                       Activation: maven.Activation{
-                                               ActiveByDefault: true,
-                                       },
-                                       Repositories:       repositories,
-                                       PluginRepositories: repositories,
-                               },
-                       }
+                       repositories = append(repositories, repository)
+               }
 
-                       data, err := util.EncodeXML(settings)
-                       if err != nil {
-                               return err
-                       }
+               // Enables strict checksums for Maven central if not already 
configured
+               if !containsMvnCentral(repositories) {
+                       repository := 
maven.NewRepository("https://repo.maven.apache.org/maven2@id=central";)
+                       repositories = append([]maven.Repository{repository}, 
repositories...)
+               }
 
-                       cm := corev1.ConfigMap{
-                               TypeMeta: metav1.TypeMeta{
-                                       Kind:       "ConfigMap",
-                                       APIVersion: "v1",
-                               },
-                               ObjectMeta: metav1.ObjectMeta{
-                                       Name:      platform.Name + 
"-maven-settings",
-                                       Namespace: namespace,
-                                       Labels: map[string]string{
-                                               "app": "camel-k",
-                                       },
+               settings.Profiles = []maven.Profile{
+                       {
+                               ID: "maven-settings",
+                               Activation: maven.Activation{
+                                       ActiveByDefault: true,
                                },
-                               Data: map[string]string{
-                                       "settings.xml": string(data),
+                               Repositories:       repositories,
+                               PluginRepositories: repositories,
+                       },
+               }
+
+               data, err := util.EncodeXML(settings)
+               if err != nil {
+                       return err
+               }
+
+               cm := corev1.ConfigMap{
+                       TypeMeta: metav1.TypeMeta{
+                               Kind:       "ConfigMap",
+                               APIVersion: "v1",
+                       },
+                       ObjectMeta: metav1.ObjectMeta{
+                               Name:      platform.Name + "-maven-settings",
+                               Namespace: namespace,
+                               Labels: map[string]string{
+                                       "app": "camel-k",
                                },
-                       }
+                       },
+                       Data: map[string]string{
+                               "settings.xml": string(data),
+                       },
+               }
 
-                       err = install.RuntimeObjectOrCollect(o.Context, c, 
namespace, collection, &cm)
-                       if err != nil {
-                               return err
-                       }
+               err = install.RuntimeObjectOrCollect(o.Context, c, namespace, 
collection, &cm)
+               if err != nil {
+                       return err
                }
 
                if o.mavenSettings != "" {
@@ -434,3 +438,12 @@ func decodeMavenSettings(mavenSettings string) 
(v1alpha1.ValueSource, error) {
 
        return v1alpha1.ValueSource{}, fmt.Errorf("illegal maven setting 
definition, syntax: configmap|secret:resource-name[/settings path]")
 }
+
+func containsMvnCentral(repositories []maven.Repository) bool {
+       for _, r := range repositories {
+               if r.ID == "central" {
+                       return true
+               }
+       }
+       return false
+}
diff --git a/pkg/util/maven/maven_project.go b/pkg/util/maven/maven_project.go
index 541414f..db4ea04 100644
--- a/pkg/util/maven/maven_project.go
+++ b/pkg/util/maven/maven_project.go
@@ -166,10 +166,12 @@ func NewRepository(repo string) Repository {
        r := Repository{
                URL: repo,
                Releases: RepositoryPolicy{
-                       Enabled: true,
+                       Enabled:        true,
+                       ChecksumPolicy: "fail",
                },
                Snapshots: RepositoryPolicy{
-                       Enabled: false,
+                       Enabled:        false,
+                       ChecksumPolicy: "fail",
                },
        }
 
@@ -184,6 +186,9 @@ func NewRepository(repo string) Repository {
                                r.Releases.Enabled = false
                        case strings.HasPrefix(attribute, "id="):
                                r.ID = attribute[3:]
+                       case strings.HasPrefix(attribute, "checksumpolicy="):
+                               r.Snapshots.ChecksumPolicy = attribute[15:]
+                               r.Releases.ChecksumPolicy = attribute[15:]
                        }
                }
        }
diff --git a/pkg/util/maven/maven_project_test.go 
b/pkg/util/maven/maven_project_test.go
index 6c8e980..d717d7f 100644
--- a/pkg/util/maven/maven_project_test.go
+++ b/pkg/util/maven/maven_project_test.go
@@ -187,6 +187,8 @@ func TestNewRepository(t *testing.T) {
        assert.Equal(t, "http://nexus/public";, r.URL)
        assert.True(t, r.Releases.Enabled)
        assert.False(t, r.Snapshots.Enabled)
+       assert.Equal(t, "fail", r.Releases.ChecksumPolicy)
+       assert.Equal(t, "fail", r.Snapshots.ChecksumPolicy)
 }
 
 func TestNewRepositoryWithSnapshots(t *testing.T) {
@@ -195,6 +197,8 @@ func TestNewRepositoryWithSnapshots(t *testing.T) {
        assert.Equal(t, "http://nexus/public";, r.URL)
        assert.True(t, r.Releases.Enabled)
        assert.True(t, r.Snapshots.Enabled)
+       assert.Equal(t, "fail", r.Releases.ChecksumPolicy)
+       assert.Equal(t, "fail", r.Snapshots.ChecksumPolicy)
 }
 
 func TestNewRepositoryWithSnapshotsAndID(t *testing.T) {
@@ -203,6 +207,8 @@ func TestNewRepositoryWithSnapshotsAndID(t *testing.T) {
        assert.Equal(t, "http://nexus/public";, r.URL)
        assert.True(t, r.Releases.Enabled)
        assert.True(t, r.Snapshots.Enabled)
+       assert.Equal(t, "fail", r.Releases.ChecksumPolicy)
+       assert.Equal(t, "fail", r.Snapshots.ChecksumPolicy)
 }
 
 func TestNewRepositoryWithID(t *testing.T) {
@@ -211,4 +217,16 @@ func TestNewRepositoryWithID(t *testing.T) {
        assert.Equal(t, "http://nexus/public";, r.URL)
        assert.True(t, r.Releases.Enabled)
        assert.False(t, r.Snapshots.Enabled)
+       assert.Equal(t, "fail", r.Releases.ChecksumPolicy)
+       assert.Equal(t, "fail", r.Snapshots.ChecksumPolicy)
+}
+
+func TestNewRepositoryWithChecksumPolicy(t *testing.T) {
+       r := NewRepository("http://nexus/public@checksumpolicy=warn";)
+       assert.Equal(t, "", r.ID)
+       assert.Equal(t, "http://nexus/public";, r.URL)
+       assert.True(t, r.Releases.Enabled)
+       assert.False(t, r.Snapshots.Enabled)
+       assert.Equal(t, "warn", r.Releases.ChecksumPolicy)
+       assert.Equal(t, "warn", r.Snapshots.ChecksumPolicy)
 }
diff --git a/pkg/util/maven/maven_settings_test.go 
b/pkg/util/maven/maven_settings_test.go
index ef1df7f..75d2a20 100644
--- a/pkg/util/maven/maven_settings_test.go
+++ b/pkg/util/maven/maven_settings_test.go
@@ -40,10 +40,12 @@ const expectedSettings = `<?xml version="1.0" 
encoding="UTF-8"?>
           <url>https://repo.maven.apache.org/maven2</url>
           <snapshots>
             <enabled>false</enabled>
+            <checksumPolicy>warn</checksumPolicy>
           </snapshots>
           <releases>
             <enabled>true</enabled>
             <updatePolicy>never</updatePolicy>
+            <checksumPolicy>fail</checksumPolicy>
           </releases>
         </repository>
       </repositories>
@@ -66,11 +68,13 @@ func TestSettingsGeneration(t *testing.T) {
                                        ID:  "central",
                                        URL: 
"https://repo.maven.apache.org/maven2";,
                                        Snapshots: RepositoryPolicy{
-                                               Enabled: false,
+                                               Enabled:        false,
+                                               ChecksumPolicy: "warn",
                                        },
                                        Releases: RepositoryPolicy{
-                                               Enabled:      true,
-                                               UpdatePolicy: "never",
+                                               Enabled:        true,
+                                               UpdatePolicy:   "never",
+                                               ChecksumPolicy: "fail",
                                        },
                                },
                        },
diff --git a/pkg/util/maven/maven_types.go b/pkg/util/maven/maven_types.go
index 26e5b3c..6adbd06 100644
--- a/pkg/util/maven/maven_types.go
+++ b/pkg/util/maven/maven_types.go
@@ -35,8 +35,9 @@ type Repository struct {
 
 // RepositoryPolicy --
 type RepositoryPolicy struct {
-       Enabled      bool   `xml:"enabled"`
-       UpdatePolicy string `xml:"updatePolicy,omitempty"`
+       Enabled        bool   `xml:"enabled"`
+       UpdatePolicy   string `xml:"updatePolicy,omitempty"`
+       ChecksumPolicy string `xml:"checksumPolicy,omitempty"`
 }
 
 // Build --

Reply via email to