Skip to content

Instantly share code, notes, and snippets.

@eutkin
Created October 26, 2018 07:31
Show Gist options
  • Save eutkin/3a237416b48bf6f69e3b5e534268f8da to your computer and use it in GitHub Desktop.
Save eutkin/3a237416b48bf6f69e3b5e534268f8da to your computer and use it in GitHub Desktop.
add headers for HTTP Config Retriever
/*
* 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);
}
}
/*
* 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