Fix call to S3

This commit is contained in:
Maksim Tereshin 2024-12-03 14:50:19 +01:00
parent e14353a565
commit ba679d80e2
No known key found for this signature in database
2 changed files with 10 additions and 9 deletions

View file

@ -8,18 +8,16 @@ import javax.crypto.spec.SecretKeySpec;
import java.net.URI; import java.net.URI;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.time.ZoneOffset;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.Base64; import java.util.Base64;
/**
* @author Maksim Tereshin
*/
public class S3HttpConnection { public class S3HttpConnection {
public static HttpRequest buildHttpRequest(S3Request request, String file) throws Exception { public static HttpRequest buildHttpRequest(S3Request request, String file) throws Exception {
S3ConnectionParams connectionParams = request.getS3ConnectionParams(); S3ConnectionParams connectionParams = request.getS3ConnectionParams();
String host = connectionParams.getHost() + ":" + connectionParams.getPort(); String host = connectionParams.getProtocol() + "://" + connectionParams.getHost() + ":" + connectionParams.getPort();
String s3Key = connectionParams.getS3Key(); String s3Key = connectionParams.getS3Key();
String s3Secret = connectionParams.getS3Secret(); String s3Secret = connectionParams.getS3Secret();
String method = connectionParams.getMethod().toUpperCase(); String method = connectionParams.getMethod().toUpperCase();
@ -27,12 +25,12 @@ public class S3HttpConnection {
String resource = "/" + file; String resource = "/" + file;
String contentType = connectionParams.getContentType(); String contentType = connectionParams.getContentType();
String date = ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME); String date = ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss'Z'"));
String signature = generateSignature(method, contentType, date, resource, s3Secret); String signature = generateSignature(method, contentType, date, resource, s3Secret);
HttpRequest.Builder requestBuilder = HttpRequest.newBuilder() HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
.uri(URI.create("http://" + host + resource)) .uri(URI.create(host + resource))
.header("Date", date) .header("Date", date)
.header("Content-Type", contentType) .header("Content-Type", contentType)
.header("Authorization", "AWS " + s3Key + ":" + signature); .header("Authorization", "AWS " + s3Key + ":" + signature);

View file

@ -3,14 +3,12 @@ package org.micord.models.requests;
import jakarta.xml.bind.annotation.XmlElement; import jakarta.xml.bind.annotation.XmlElement;
import lombok.Setter; import lombok.Setter;
/**
* @author Maksim Tereshin
*/
@Setter @Setter
public class S3ConnectionParams { public class S3ConnectionParams {
private String s3Key; private String s3Key;
private String s3Secret; private String s3Secret;
private String protocol;
private String host; private String host;
private String port; private String port;
private String contentType; private String contentType;
@ -27,6 +25,11 @@ public class S3ConnectionParams {
return s3Secret; return s3Secret;
} }
@XmlElement(name = "Protocol")
public String getProtocol() {
return protocol;
}
@XmlElement(name = "Host") @XmlElement(name = "Host")
public String getHost() { public String getHost() {
return host; return host;