-
-
Save eutkin/3a237416b48bf6f69e3b5e534268f8da to your computer and use it in GitHub Desktop.
add headers for HTTP Config Retriever
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright (c) 2014 Red Hat, Inc. and others | |
* | |
* Red Hat 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 io.vertx.config.impl.spi; | |
import io.vertx.config.spi.ConfigStore; | |
import io.vertx.core.AsyncResult; | |
import io.vertx.core.Future; | |
import io.vertx.core.Handler; | |
import io.vertx.core.MultiMap; | |
import io.vertx.core.buffer.Buffer; | |
import io.vertx.core.http.HttpClient; | |
import io.vertx.core.http.HttpClientRequest; | |
/** | |
* A configuration store retrieving the configuration from a HTTP location | |
* | |
* @author <a href="http://escoffier.me">Clement Escoffier</a> | |
*/ | |
public class HttpConfigStore implements ConfigStore { | |
private final String host; | |
private final int port; | |
private final String path; | |
private final HttpClient client; | |
private final MultiMap headers; | |
public HttpConfigStore(String host, int port, String path, HttpClient client, MultiMap headers) { | |
this.host = host; | |
this.port = port; | |
this.path = path; | |
this.client = client; | |
this.headers = headers; | |
} | |
@Override | |
public void get(Handler<AsyncResult<Buffer>> completionHandler) { | |
HttpClientRequest request = client.get(port, host, path, response -> | |
response | |
.exceptionHandler(t -> completionHandler.handle(Future.failedFuture(t))) | |
.bodyHandler(buffer -> completionHandler.handle(Future.succeededFuture(buffer))) | |
); | |
request.headers().addAll(headers); | |
request | |
.exceptionHandler(t -> completionHandler.handle(Future.failedFuture(t))) | |
.end(); | |
} | |
@Override | |
public void close(Handler<Void> completionHandler) { | |
this.client.close(); | |
completionHandler.handle(null); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright (c) 2014 Red Hat, Inc. and others | |
* | |
* Red Hat 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 io.vertx.config.impl.spi; | |
import io.vertx.config.spi.ConfigStore; | |
import io.vertx.config.spi.ConfigStoreFactory; | |
import io.vertx.core.MultiMap; | |
import io.vertx.core.Vertx; | |
import io.vertx.core.http.HttpClient; | |
import io.vertx.core.http.HttpClientOptions; | |
import io.vertx.core.json.JsonObject; | |
import java.util.Objects; | |
/** | |
* The factory creating Json File configuration stores. | |
* | |
* @author <a href="http://escoffier.me">Clement Escoffier</a> | |
*/ | |
public class HttpConfigStoreFactory implements ConfigStoreFactory { | |
@Override | |
public String name() { | |
return "http"; | |
} | |
@Override | |
public ConfigStore create(Vertx vertx, JsonObject configuration) { | |
HttpClient client = vertx.createHttpClient(new HttpClientOptions(configuration)); | |
String host = configuration.getString("host"); | |
int port = configuration.getInteger("port", 80); | |
String path = configuration.getString("path", "/"); | |
/* | |
{ | |
"headers" : { | |
"Content-Type" : "application/json", | |
"Cookie" : "value" | |
} | |
*/ | |
MultiMap headers = MultiMap.caseInsensitiveMultiMap(); | |
JsonObject headersAsJson = configuration.getJsonObject("headers", new JsonObject()); | |
headersAsJson.fieldNames().forEach(headerName -> { | |
String headerValue = headersAsJson.getString(headerName, "").trim(); | |
if (!headerValue.isEmpty()) { | |
headers.add(headerName, headerValue); | |
} | |
}); | |
Objects.requireNonNull(host); | |
return new HttpConfigStore(host, port, path, client, headers); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment