[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/6a676630
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/6a676630
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/6a676630

Branch: refs/heads/master
Commit: 6a6766303030ac9437ba3920d98a4abea1edb605
Parents: 32d5c7b
Author: Grzegorz Grzybek <[email protected]>
Authored: Wed Jun 21 15:26:45 2017 +0200
Committer: Grzegorz Grzybek <[email protected]>
Committed: Wed Jun 21 15:31:54 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/6a676630/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/6a676630/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/6a676630/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>
 

Reply via email to