use of com.linecorp.armeria.common.HttpHeaders in project curiostack by curioswitch.
the class StorageClient method createFile.
/**
* Create a new file for uploading data to cloud storage.
*/
public ListenableFuture<FileWriter> createFile(String filename, Map<String, String> metadata, RequestContext ctx) {
FileRequest request = ImmutableFileRequest.builder().name(filename).metadata(metadata).build();
ByteBuf buf = ctx.alloc().buffer();
try (ByteBufOutputStream os = new ByteBufOutputStream(buf)) {
OBJECT_MAPPER.writeValue((DataOutput) os, request);
} catch (IOException e) {
buf.release();
throw new UncheckedIOException("Could not serialize resource JSON to buffer.", e);
}
HttpData data = new ByteBufHttpData(buf, true);
HttpHeaders headers = HttpHeaders.of(HttpMethod.POST, uploadUrl).contentType(MediaType.JSON_UTF_8);
HttpResponse res = httpClient.execute(headers, data);
return CompletableFuturesExtra.toListenableFuture(res.aggregate(ctx.contextAwareEventLoop()).handle((msg, t) -> {
if (t != null) {
throw new RuntimeException("Unexpected error creating new file.", t);
}
HttpHeaders responseHeaders = msg.headers();
if (!responseHeaders.status().equals(HttpStatus.OK)) {
throw new RuntimeException("Non-successful response when creating new file: " + responseHeaders + "\n" + msg.content().toStringUtf8());
}
String location = responseHeaders.get(HttpHeaderNames.LOCATION);
String pathAndQuery = location.substring("https://www.googleapis.com/upload/storage/v1".length());
return new FileWriter(pathAndQuery, ctx, httpClient);
}));
}
use of com.linecorp.armeria.common.HttpHeaders in project curiostack by curioswitch.
the class GooglePublicKeysManager method refresh.
private CompletableFuture<CachedPublicKeys> refresh() {
return googleApisClient.get(CERTS_PATH).aggregate().handle((msg, t) -> {
if (t != null) {
throw new IllegalStateException("Failed to refresh Google public keys.", t);
}
if (!msg.status().equals(HttpStatus.OK)) {
throw new IllegalStateException("Non-200 status code when fetching certificates.");
}
// Do the same simple header parsing as the upstream library.
HttpHeaders headers = msg.headers();
String cacheControl = headers.get(HttpHeaderNames.CACHE_CONTROL);
long cacheTimeSecs = 0;
if (cacheControl != null) {
for (String arg : CACHE_CONTROL_SPLITTER.split(cacheControl)) {
Matcher m = MAX_AGE_PATTERN.matcher(arg);
if (m.matches()) {
cacheTimeSecs = Long.valueOf(m.group(1));
break;
}
}
}
cacheTimeSecs -= headers.getInt(HttpHeaderNames.AGE, 0);
cacheTimeSecs = Math.max(0, cacheTimeSecs);
Instant expirationTime = clock.instant().plusSeconds(cacheTimeSecs).minus(EXPIRATION_SKEW);
final JsonNode tree;
try {
tree = OBJECT_MAPPER.readTree(msg.content().array());
} catch (IOException e) {
throw new UncheckedIOException("Could not parse certificates.", e);
}
List<PublicKey> keys = Streams.stream(tree.elements()).map(valueNode -> {
try {
return CERTIFICATE_FACTORY.generateCertificate(new ByteArrayInputStream(valueNode.textValue().getBytes(StandardCharsets.UTF_8))).getPublicKey();
} catch (CertificateException e) {
throw new IllegalArgumentException("Could not decode certificate.", e);
}
}).collect(toImmutableList());
return ImmutableCachedPublicKeys.builder().expirationTime(expirationTime).addAllKeys(keys).build();
});
}
use of com.linecorp.armeria.common.HttpHeaders in project curiostack by curioswitch.
the class PublicKeysManager method refresh.
private CompletableFuture<CachedPublicKeys> refresh() {
return httpClient.get(path).aggregate().handle((msg, t) -> {
if (t != null) {
throw new IllegalStateException("Failed to refresh Google public keys.", t);
}
if (!msg.status().equals(HttpStatus.OK)) {
throw new IllegalStateException("Non-200 status code when fetching certificates.");
}
// Do the same simple header parsing as the upstream library.
HttpHeaders headers = msg.headers();
String cacheControl = headers.get(HttpHeaderNames.CACHE_CONTROL);
long cacheTimeSecs = 0;
if (cacheControl != null) {
for (String arg : CACHE_CONTROL_SPLITTER.split(cacheControl)) {
Matcher m = MAX_AGE_PATTERN.matcher(arg);
if (m.matches()) {
cacheTimeSecs = Long.valueOf(m.group(1));
break;
}
}
}
cacheTimeSecs -= headers.getInt(HttpHeaderNames.AGE, 0);
cacheTimeSecs = Math.max(0, cacheTimeSecs);
Instant expirationTime = clock.instant().plusSeconds(cacheTimeSecs).minus(EXPIRATION_SKEW);
final JsonNode tree;
try {
tree = OBJECT_MAPPER.readTree(msg.content().array());
} catch (IOException e) {
throw new UncheckedIOException("Could not parse certificates.", e);
}
Map<String, PublicKey> keys = Streams.stream(tree.fields()).map(entry -> {
byte[] publicKeyPem = entry.getValue().textValue().getBytes(StandardCharsets.UTF_8);
PublicKey publicKey = KeyUtil.loadPublicKey(publicKeyPem);
return new SimpleImmutableEntry<>(entry.getKey(), publicKey);
}).collect(toImmutableMap(Entry::getKey, Entry::getValue));
return ImmutableCachedPublicKeys.builder().expirationTime(expirationTime).putAllKeys(keys).build();
});
}
Aggregations