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

acosentino pushed a commit to branch camel-2.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-2.x by this push:
     new d523a9f  CAMEL-13747: Added basic auth support to camel-solr
d523a9f is described below

commit d523a9fca3613054f9585a19bac6d5f194566ad7
Author: Soner Koksal <soner.kok...@arvato.com>
AuthorDate: Thu Jul 11 16:14:20 2019 +0300

    CAMEL-13747: Added basic auth support to camel-solr
---
 .../camel-solr/src/main/docs/solr-component.adoc   |  4 +-
 .../apache/camel/component/solr/SolrEndpoint.java  | 26 ++++++++++++
 .../apache/camel/component/solr/SolrProducer.java  | 47 +++++++++++++++++-----
 .../camel/component/solr/InitSolrEndpointTest.java |  3 +-
 .../component/solr/SolrComponentTestSupport.java   |  5 ++-
 .../apache/camel/component/solr/SolrFixtures.java  | 26 +++++++-----
 .../src/test/resources/solr/security.json          | 13 ++++++
 7 files changed, 99 insertions(+), 25 deletions(-)

diff --git a/components/camel-solr/src/main/docs/solr-component.adoc 
b/components/camel-solr/src/main/docs/solr-component.adoc
index 453836e..4e67e14 100644
--- a/components/camel-solr/src/main/docs/solr-component.adoc
+++ b/components/camel-solr/src/main/docs/solr-component.adoc
@@ -59,7 +59,7 @@ with the following path and query parameters:
 |===
 
 
-==== Query Parameters (13 parameters):
+==== Query Parameters (15 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -76,6 +76,8 @@ with the following path and query parameters:
 | *streamingQueueSize* (producer) | Set the queue size for the 
StreamingUpdateSolrServer | 10 | int
 | *streamingThreadCount* (producer) | Set the number of threads for the 
StreamingUpdateSolrServer | 2 | int
 | *synchronous* (advanced) | Sets whether synchronous processing should be 
strictly used, or Camel is allowed to use asynchronous processing (if 
supported). | false | boolean
+| *password* (security) | Sets password for basic auth plugin enabled servers 
|  | String
+| *username* (security) | Sets username for basic auth plugin enabled servers 
|  | String
 | *collection* (solrCloud) | Set the collection name which the solrCloud 
server could use |  | String
 | *zkHost* (solrCloud) | Set the ZooKeeper host information which the 
solrCloud could use, such as zkhost=localhost:8123. |  | String
 |===
diff --git 
a/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrEndpoint.java
 
b/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrEndpoint.java
index 57cbeb2..4abc62d 100644
--- 
a/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrEndpoint.java
+++ 
b/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrEndpoint.java
@@ -67,6 +67,10 @@ public class SolrEndpoint extends DefaultEndpoint {
     private String collection;
     @UriParam
     private String requestHandler;
+    @UriParam(label = "security", secret = true)
+    private String username;
+    @UriParam(label = "security", secret = true)
+    private String password;
 
     public SolrEndpoint(String endpointUri, SolrComponent component, String 
address) throws Exception {
         super(endpointUri, component);
@@ -278,4 +282,26 @@ public class SolrEndpoint extends DefaultEndpoint {
         this.allowCompression = allowCompression;
     }
 
+    public String getUsername() {
+        return username;
+    }
+
+    /**
+     * Sets username for basic auth plugin enabled servers
+     */
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    /**
+     * Sets password for basic auth plugin enabled servers
+     */
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
 }
diff --git 
a/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java
 
b/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java
index 2a662d6..97c24d9 100644
--- 
a/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java
+++ 
b/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java
@@ -20,7 +20,7 @@ import java.io.File;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
-
+import java.util.stream.Collectors;
 import javax.activation.MimetypesFileTypeMap;
 
 import org.apache.camel.Exchange;
@@ -28,6 +28,7 @@ import org.apache.camel.WrappedFile;
 import org.apache.camel.impl.DefaultProducer;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.request.AbstractUpdateRequest.ACTION;
 import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest;
 import org.apache.solr.client.solrj.request.DirectXmlRequest;
 import org.apache.solr.client.solrj.request.UpdateRequest;
@@ -76,19 +77,34 @@ public class SolrProducer extends DefaultProducer {
         } else if 
(operation.equalsIgnoreCase(SolrConstants.OPERATION_INSERT_STREAMING)) {
             insert(exchange, serverToUse);
         } else if 
(operation.equalsIgnoreCase(SolrConstants.OPERATION_DELETE_BY_ID)) {
-            serverToUse.deleteById(exchange.getIn().getBody(String.class));
+            UpdateRequest updateRequest = createUpdateRequest();
+            updateRequest.deleteById(exchange.getIn().getBody(String.class));
+            updateRequest.process(serverToUse);
         } else if 
(operation.equalsIgnoreCase(SolrConstants.OPERATION_DELETE_BY_QUERY)) {
-            serverToUse.deleteByQuery(exchange.getIn().getBody(String.class));
+            UpdateRequest updateRequest = createUpdateRequest();
+            
updateRequest.deleteByQuery(exchange.getIn().getBody(String.class));
+            updateRequest.process(serverToUse);
         } else if 
(operation.equalsIgnoreCase(SolrConstants.OPERATION_ADD_BEAN)) {
-            serverToUse.addBean(exchange.getIn().getBody());
+            UpdateRequest updateRequest = createUpdateRequest();
+            
updateRequest.add(serverToUse.getBinder().toSolrInputDocument(exchange.getIn().getBody()));
+            updateRequest.process(serverToUse);
         } else if 
(operation.equalsIgnoreCase(SolrConstants.OPERATION_ADD_BEANS)) {
-            serverToUse.addBeans(exchange.getIn().getBody(Collection.class));
+            UpdateRequest updateRequest = createUpdateRequest();
+            Collection<Object> body = 
exchange.getIn().getBody(Collection.class);
+            
updateRequest.add(body.stream().map(serverToUse.getBinder()::toSolrInputDocument).collect(Collectors.toList()));
+            updateRequest.process(serverToUse);
         } else if (operation.equalsIgnoreCase(SolrConstants.OPERATION_COMMIT)) 
{
-            serverToUse.commit();
+            UpdateRequest updateRequest = createUpdateRequest();
+            updateRequest.setAction(ACTION.COMMIT, true, true);
+            updateRequest.process(serverToUse);
         } else if 
(operation.equalsIgnoreCase(SolrConstants.OPERATION_ROLLBACK)) {
-            serverToUse.rollback();
+            UpdateRequest updateRequest = createUpdateRequest();
+            updateRequest.rollback();
+            updateRequest.process(serverToUse);
         } else if 
(operation.equalsIgnoreCase(SolrConstants.OPERATION_OPTIMIZE)) {
-            serverToUse.optimize();
+            UpdateRequest updateRequest = createUpdateRequest();
+            updateRequest.setAction(ACTION.OPTIMIZE, true, true, 1);
+            updateRequest.process(serverToUse);
         } else {
             throw new IllegalArgumentException(
                     SolrConstants.OPERATION + " header value '" + operation + 
"' is not supported");
@@ -105,6 +121,7 @@ public class SolrProducer extends DefaultProducer {
         if 
(ObjectHelper.isNotEmpty(exchange.getIn().getHeader(Exchange.CONTENT_TYPE, 
String.class))) {
             String mimeType = 
exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class);
             ContentStreamUpdateRequest updateRequest = new 
ContentStreamUpdateRequest(getRequestHandler());
+            updateRequest.setBasicAuthCredentials(getEndpoint().getUsername(), 
getEndpoint().getPassword());
             updateRequest.addFile((File) body, mimeType);
 
             for (Map.Entry<String, Object> entry : 
exchange.getIn().getHeaders().entrySet()) {
@@ -121,6 +138,7 @@ public class SolrProducer extends DefaultProducer {
                 MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();
                 String mimeType = mimeTypesMap.getContentType((File) body);
                 ContentStreamUpdateRequest updateRequest = new 
ContentStreamUpdateRequest(getRequestHandler());
+                
updateRequest.setBasicAuthCredentials(getEndpoint().getUsername(), 
getEndpoint().getPassword());
                 updateRequest.addFile((File) body, mimeType);
 
                 for (Map.Entry<String, Object> entry : 
exchange.getIn().getHeaders().entrySet()) {
@@ -134,7 +152,7 @@ public class SolrProducer extends DefaultProducer {
 
             } else if (body instanceof SolrInputDocument) {
 
-                UpdateRequest updateRequest = new 
UpdateRequest(getRequestHandler());
+                UpdateRequest updateRequest = createUpdateRequest();
                 updateRequest.add((SolrInputDocument) body);
 
                 for (Map.Entry<String, Object> entry : 
exchange.getIn().getHeaders().entrySet()) {
@@ -150,7 +168,7 @@ public class SolrProducer extends DefaultProducer {
                 List<?> list = (List<?>) body;
 
                 if (list.size() > 0 && list.get(0) instanceof 
SolrInputDocument) {
-                    UpdateRequest updateRequest = new 
UpdateRequest(getRequestHandler());
+                    UpdateRequest updateRequest = createUpdateRequest();
                     updateRequest.add((List<SolrInputDocument>) list);
 
                     for (Map.Entry<String, Object> entry : 
exchange.getIn().getHeaders().entrySet()) {
@@ -177,7 +195,7 @@ public class SolrProducer extends DefaultProducer {
 
                 if (hasSolrHeaders) {
 
-                    UpdateRequest updateRequest = new 
UpdateRequest(getRequestHandler());
+                    UpdateRequest updateRequest = createUpdateRequest();
 
                     SolrInputDocument doc = new SolrInputDocument();
                     for (Map.Entry<String, Object> entry : 
exchange.getIn().getHeaders().entrySet()) {
@@ -198,6 +216,7 @@ public class SolrProducer extends DefaultProducer {
                     }
 
                     DirectXmlRequest xmlRequest = new 
DirectXmlRequest(getRequestHandler(), bodyAsString);
+                    
xmlRequest.setBasicAuthCredentials(getEndpoint().getUsername(), 
getEndpoint().getPassword());
 
                     solrServer.request(xmlRequest);
                 } else {
@@ -217,6 +236,12 @@ public class SolrProducer extends DefaultProducer {
         return (requestHandler == null) ? "/update" : requestHandler;
     }
 
+    private UpdateRequest createUpdateRequest() {
+        UpdateRequest updateRequest = new UpdateRequest(getRequestHandler());
+        updateRequest.setBasicAuthCredentials(getEndpoint().getUsername(), 
getEndpoint().getPassword());
+        return updateRequest;
+    }
+
     @Override
     public SolrEndpoint getEndpoint() {
         return (SolrEndpoint) super.getEndpoint();
diff --git 
a/components/camel-solr/src/test/java/org/apache/camel/component/solr/InitSolrEndpointTest.java
 
b/components/camel-solr/src/test/java/org/apache/camel/component/solr/InitSolrEndpointTest.java
index b00de3c..28aa221 100644
--- 
a/components/camel-solr/src/test/java/org/apache/camel/component/solr/InitSolrEndpointTest.java
+++ 
b/components/camel-solr/src/test/java/org/apache/camel/component/solr/InitSolrEndpointTest.java
@@ -49,6 +49,7 @@ public class InitSolrEndpointTest extends SolrTestSupport {
                 + "&maxRetries=1&soTimeout=100&connectionTimeout=100"
                 + "&defaultMaxConnectionsPerHost=100&maxTotalConnections=100"
                 + "&followRedirects=false&allowCompression=true"
-                + "&requestHandler=/update";
+                + "&requestHandler=/update"
+                + "&username=solr&password=SolrRocks";
     }
 }
diff --git 
a/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrComponentTestSupport.java
 
b/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrComponentTestSupport.java
index ece404e..fe3658e 100644
--- 
a/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrComponentTestSupport.java
+++ 
b/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrComponentTestSupport.java
@@ -26,6 +26,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -71,8 +72,10 @@ public abstract class SolrComponentTestSupport extends 
SolrTestSupport {
     protected QueryResponse executeSolrQuery(String query) throws 
SolrServerException, IOException {
         SolrQuery solrQuery = new SolrQuery();
         solrQuery.setQuery(query);
+        QueryRequest queryRequest = new QueryRequest(solrQuery);
+        queryRequest.setBasicAuthCredentials("solr", "SolrRocks");
         SolrClient solrServer = solrFixtures.getServer();
-        return solrServer.query("collection1", solrQuery);
+        return queryRequest.process(solrServer, "collection1");
     }
 
     @BeforeClass
diff --git 
a/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrFixtures.java
 
b/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrFixtures.java
index b9cdcf9..2de4b66 100644
--- 
a/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrFixtures.java
+++ 
b/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrFixtures.java
@@ -23,8 +23,9 @@ import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
-
-
+import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
+import org.apache.solr.client.solrj.request.AbstractUpdateRequest.ACTION;
+import org.apache.solr.client.solrj.request.UpdateRequest;
 
 public class SolrFixtures {
     static Logger log = Logger.getLogger(SolrFixtures.class);
@@ -50,13 +51,15 @@ public class SolrFixtures {
 
     String solrRouteUri() {
         if (serverType == TestServerType.USE_HTTPS) {
-            return "solrs://127.0.0.1:" + httpsPort + "/solr/collection1";
+            return "solrs://127.0.0.1:" + httpsPort + "/solr/collection1"
+                   + "?username=solr&password=SolrRocks";
         } else if (serverType == TestServerType.USE_CLOUD) {
             String zkAddrStr = 
cloudFixture.miniCluster.getZkServer().getZkAddress();
             return "solrCloud://localhost:" + httpsPort + "/solr?zkHost=" + 
zkAddrStr
-                   + "&collection=collection1";
+                   + 
"&collection=collection1&username=solr&password=SolrRocks";
         } else {
-            return "solr://localhost:" + port + "/solr/collection1";
+            return "solr://localhost:" + port + "/solr/collection1"
+                   + "?username=solr&password=SolrRocks";
         }
     }
 
@@ -99,18 +102,19 @@ public class SolrFixtures {
     }
 
     public static void clearIndex() throws SolrServerException, IOException {
+        UpdateRequest updateRequest = new UpdateRequest();
+        updateRequest.setBasicAuthCredentials("solr", "SolrRocks");
+        updateRequest.deleteByQuery("*:*");
+        updateRequest.setAction(ACTION.COMMIT, true, true);
         if (solrServer != null) {
             // Clear the Solr index.
-            solrServer.deleteByQuery("collection1", "*:*");
-            solrServer.commit("collection1");
+            updateRequest.process(solrServer, "collection1");
         }
         if (solrHttpsServer != null) {
-            solrHttpsServer.deleteByQuery("collection1", "*:*");
-            solrHttpsServer.commit("collection1");
+            updateRequest.process(solrHttpsServer, "collection1");
         }
         if (cloudFixture != null) {
-            cloudFixture.solrClient.deleteByQuery("*:*");
-            cloudFixture.solrClient.commit();
+            updateRequest.process(cloudFixture.solrClient);
         }
     }
 }
diff --git a/components/camel-solr/src/test/resources/solr/security.json 
b/components/camel-solr/src/test/resources/solr/security.json
new file mode 100644
index 0000000..bfaa8e1
--- /dev/null
+++ b/components/camel-solr/src/test/resources/solr/security.json
@@ -0,0 +1,13 @@
+{
+  "authentication":{
+    "blockUnknown": false,
+    "class":"solr.BasicAuthPlugin",
+    "credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= 
Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="},
+    "realm":"My Solr users"
+  },
+  "authorization":{
+    "class":"solr.RuleBasedAuthorizationPlugin",
+    "permissions":[{"name":"security-edit",
+      "role":"admin"}],
+    "user-role":{"solr":"admin"}
+  }}
\ No newline at end of file

Reply via email to