You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gg...@apache.org on 2017/06/21 13:27:25 UTC

[12/12] karaf git commit: [KARAF-5008] maven:http-proxy and maven:http-proxy-list commands

[KARAF-5008] maven:http-proxy and maven:http-proxy-list commands


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/e517bad1
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/e517bad1
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/e517bad1

Branch: refs/heads/master-maven-commands
Commit: e517bad1a274ed3c5fba8cec9663b002a5da591d
Parents: df8f292
Author: Grzegorz Grzybek <gr...@gmail.com>
Authored: Wed Jun 21 15:26:45 2017 +0200
Committer: Grzegorz Grzybek <gr...@gmail.com>
Committed: Wed Jun 21 15:26:45 2017 +0200

----------------------------------------------------------------------
 .../karaf/maven/command/HttpProxyCommand.java   | 126 ++++++++++++++-----
 .../maven/command/HttpProxyListCommand.java     |  70 +++++++++++
 .../src/test/resources/reference-settings.xml   |   1 +
 3 files changed, 168 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/e517bad1/maven/core/src/main/java/org/apache/karaf/maven/command/HttpProxyCommand.java
----------------------------------------------------------------------
diff --git a/maven/core/src/main/java/org/apache/karaf/maven/command/HttpProxyCommand.java b/maven/core/src/main/java/org/apache/karaf/maven/command/HttpProxyCommand.java
index 129aca5..d7a3bfa 100644
--- a/maven/core/src/main/java/org/apache/karaf/maven/command/HttpProxyCommand.java
+++ b/maven/core/src/main/java/org/apache/karaf/maven/command/HttpProxyCommand.java
@@ -17,13 +17,17 @@
 package org.apache.karaf.maven.command;
 
 import java.util.Dictionary;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
+import org.apache.karaf.shell.api.action.Argument;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.Option;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
-import org.apache.karaf.shell.support.table.Row;
-import org.apache.karaf.shell.support.table.ShellTable;
 import org.apache.maven.settings.Proxy;
+import org.osgi.service.cm.Configuration;
 
 @Command(scope = "maven", name = "http-proxy", description = "Manage HTTP proxy configuration for Maven remote repositories")
 @Service
@@ -32,53 +36,117 @@ public class HttpProxyCommand extends MavenSecuritySupport {
     @Option(name = "--add", description = "Adds HTTP proxy configuration to Maven settings", required = false, multiValued = false)
     boolean add;
 
+    @Option(name = "--change", description = "Changes HTTP proxy configuration in Maven settings", required = false, multiValued = false)
+    boolean change;
+
     @Option(name = "--remove", description = "Removes HTTP proxy configuration from Maven settings", required = false, multiValued = false)
     boolean remove;
 
+    @Option(name = "-id", description = "Identifier of HTTP proxy", required = true, multiValued = false)
+    String id;
+
+    @Option(name = "-f", aliases = { "--force" }, description = "Do not ask for confirmation", required = false, multiValued = false)
+    boolean force = false;
+
+    @Option(name = "-u", aliases = { "--username" }, description = "Username for remote repository", required = false, multiValued = false)
+    String username;
+
+    @Option(name = "-p", aliases = { "--password" }, description = "Password for remote repository (may be encrypted, see \"maven:password -ep\")", required = false, multiValued = false)
+    String password;
+
+    @Option(name = "-n", aliases = { "--non-proxy-hosts" }, description = "Non-proxied hosts (in the format '192.168.*|localhost|...')", required = false, multiValued = false)
+    String nonProxyHosts;
+
+    @Argument(description = "host:port of HTTP proxy", required = false, multiValued = false)
+    String hostPort;
+
     @Override
     public void doAction(String prefix, Dictionary<String, Object> config) throws Exception {
-        if (add && remove) {
-            System.err.println("Please specify only one of --add and --remove");
+        if (add && (change || remove) || change && remove) {
+            System.err.println("Please specify only one of --add/--change/--remove");
             return;
         }
 
+        if (id == null || "".equals(id.trim())) {
+            System.err.println("Please specify ID of HTTP proxy");
+            return;
+        }
+
+        if (mavenSettings.getProxies() == null) {
+            mavenSettings.setProxies(new LinkedList<>());
+        }
+        Optional<Proxy> existingProxy = mavenSettings.getProxies().stream()
+                .filter((p) -> id.equals(p.getId())).findAny();
+
         if (add) {
-            // add
+            if (hostPort == null || "".equals(hostPort.trim())) {
+                System.err.println("Please specify host:port of new HTTP proxy");
+                return;
+            }
+            if (existingProxy.isPresent()) {
+                System.err.printf("HTTP proxy with ID \"%s\" is already configured\n", id);
+                return;
+            }
+        } else if (!existingProxy.isPresent()) {
+            System.err.printf("Can't find HTTP proxy with ID \"%s\"\n", id);
+            return;
         }
 
-        if (remove) {
+        boolean hasUsername = username != null && !"".equals(username.trim());
+        boolean hasPassword = password != null && !"".equals(password.trim());
+        boolean hasCredentials = hasUsername && hasPassword;
+
+        if ((hasUsername && !hasPassword) || (!hasUsername && hasPassword)) {
+            System.err.println("Please specify both username and password");
+            return;
+        }
+
+        Proxy proxy = null;
+        if (add) {
+            proxy = new Proxy();
+            proxy.setId(id);
+            mavenSettings.getProxies().add(proxy);
+        } else if (change) {
+            proxy = existingProxy.get(); // should be there
+        } else /*if (remove)*/ {
             // remove
+            List<Proxy> newProxies = mavenSettings.getProxies().stream()
+                    .filter((p) -> !id.equals(p.getId())).collect(Collectors.toList());
+            mavenSettings.setProxies(newProxies);
         }
 
-        // list (also after --add or --remove)
-        System.out.println();
-        if (mavenSettings != null && mavenSettings.getProxies() != null && mavenSettings.getProxies().size() > 0) {
-            ShellTable table = new ShellTable();
-            table.column("ID");
-            table.column("Host");
-            table.column("Port");
-            table.column("Username");
-            if (showPasswords) {
-                table.column("Password");
+        if (add || change) {
+            proxy.setActive(true);
+            proxy.setProtocol("http");
+            if (nonProxyHosts != null && !"".equals(nonProxyHosts.trim())) {
+                proxy.setNonProxyHosts(nonProxyHosts);
             }
-            for (Proxy proxy : mavenSettings.getProxies()) {
-                Row row = table.addRow();
-                row.addContent(proxy.getId(), proxy.getHost(), proxy.getPort());
-                row.addContent(proxy.getUsername() != null ? proxy.getUsername() : "");
-                if (showPasswords) {
-                    addPasswordInfo(row, proxyPasswords, proxy.getId(), proxy.getPassword());
+            if (hostPort != null && !"".equals(hostPort.trim())) {
+                if (hostPort.contains(":")) {
+                    proxy.setHost(hostPort.substring(0, hostPort.indexOf(':')));
+                    proxy.setPort(Integer.parseInt(hostPort.substring(hostPort.indexOf(':') + 1)));
+                } else {
+                    proxy.setHost(hostPort);
+                    proxy.setPort(3128);
                 }
             }
-            table.print(System.out);
-        } else {
-            System.out.print("No HTTP proxies configured");
-            if (settings != null && settings.value != null) {
-                System.out.print(" in " + settings.value);
+            if (hasCredentials) {
+                proxy.setUsername(username);
+                proxy.setPassword(password);
             }
-            System.out.println();
         }
 
-        System.out.println();
+        updateSettings(prefix, config);
+
+        Configuration cmConfig = cm.getConfiguration(PID);
+        cmConfig.update(config);
+
+        // list (also after --add or --remove)
+        if (showPasswords) {
+            session.execute("maven:http-proxy-list -x");
+        } else {
+            session.execute("maven:http-proxy-list");
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/e517bad1/maven/core/src/main/java/org/apache/karaf/maven/command/HttpProxyListCommand.java
----------------------------------------------------------------------
diff --git a/maven/core/src/main/java/org/apache/karaf/maven/command/HttpProxyListCommand.java b/maven/core/src/main/java/org/apache/karaf/maven/command/HttpProxyListCommand.java
new file mode 100644
index 0000000..799b0da
--- /dev/null
+++ b/maven/core/src/main/java/org/apache/karaf/maven/command/HttpProxyListCommand.java
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ */
+package org.apache.karaf.maven.command;
+
+import java.util.Dictionary;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.Row;
+import org.apache.karaf.shell.support.table.ShellTable;
+import org.apache.maven.settings.Proxy;
+
+@Command(scope = "maven", name = "http-proxy-list", description = "Lists HTTP proxy configurations for Maven remote repositories")
+@Service
+public class HttpProxyListCommand extends MavenSecuritySupport {
+
+    @Override
+    public void doAction(String prefix, Dictionary<String, Object> config) throws Exception {
+        System.out.println();
+        if (mavenSettings != null && mavenSettings.getProxies() != null && mavenSettings.getProxies().size() > 0) {
+            ShellTable table = new ShellTable();
+            table.column("ID");
+            table.column("Host");
+            table.column("Port");
+            table.column("Non-proxy hosts");
+            table.column("Username");
+            if (showPasswords) {
+                table.column("Password");
+            }
+            for (Proxy _p : mavenSettings.getProxies()) {
+                Row row = table.addRow();
+                row.addContent(_p.getId(), _p.getHost(), _p.getPort(), _p.getNonProxyHosts());
+                row.addContent(_p.getUsername() != null ? _p.getUsername() : "");
+                if (showPasswords) {
+                    addPasswordInfo(row, proxyPasswords, _p.getId(), _p.getPassword());
+                }
+            }
+            table.print(System.out);
+        } else {
+            System.out.print("No HTTP proxies configured");
+            if (settings != null && settings.value != null) {
+                System.out.print(" in " + settings.value);
+            }
+            System.out.println();
+        }
+
+        System.out.println();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e517bad1/maven/core/src/test/resources/reference-settings.xml
----------------------------------------------------------------------
diff --git a/maven/core/src/test/resources/reference-settings.xml b/maven/core/src/test/resources/reference-settings.xml
index 25b58fb..979ab11 100644
--- a/maven/core/src/test/resources/reference-settings.xml
+++ b/maven/core/src/test/resources/reference-settings.xml
@@ -29,6 +29,7 @@
             <protocol>http</protocol>
             <username>username</username>
             <password>password</password>
+            <nonProxyHosts></nonProxyHosts>
         </proxy>
     </proxies>