diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AWSSignatureProcessor.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AWSSignatureProcessor.java index d517154de802..2135d374af1f 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AWSSignatureProcessor.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AWSSignatureProcessor.java @@ -90,10 +90,7 @@ public SignatureInfo parseSignature() throws OS3Exception { } } if (signatureInfo == null) { - signatureInfo = new SignatureInfo( - Version.NONE, - "", "", "", "", "", "", "", false - ); + signatureInfo = new SignatureInfo.Builder(Version.NONE).build(); } signatureInfo.setUnfilteredURI( context.getUriInfo().getRequestUri().getPath()); diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthorizationV2HeaderParser.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthorizationV2HeaderParser.java index 13844560052c..1c3c15d20e1e 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthorizationV2HeaderParser.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthorizationV2HeaderParser.java @@ -66,16 +66,9 @@ public SignatureInfo parseSignature() throws MalformedResourceException { if (isBlank(accessKeyID) || isBlank(signature)) { throw new MalformedResourceException(authHeader); } - return new SignatureInfo( - Version.V2, - "", - "", - accessKeyID, - signature, - "", - "", - "", - false - ); + return new SignatureInfo.Builder(Version.V2) + .setAwsAccessId(accessKeyID) + .setSignature(signature) + .build(); } } diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthorizationV4HeaderParser.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthorizationV4HeaderParser.java index d4b648bd004d..df43948198a5 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthorizationV4HeaderParser.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthorizationV4HeaderParser.java @@ -91,17 +91,16 @@ public SignatureInfo parseSignature() throws MalformedResourceException { Credential credentialObj = parseCredentials(split[0]); String signedHeaders = parseSignedHeaders(split[1]); String signature = parseSignature(split[2]); - return new SignatureInfo( - Version.V4, - credentialObj.getDate(), - dateHeader, - credentialObj.getAccessKeyID(), - signature, - signedHeaders, - credentialObj.createScope(), - algorithm, - true - ); + return new SignatureInfo.Builder(Version.V4) + .setDate(credentialObj.getDate()) + .setDateTime(dateHeader) + .setAwsAccessId(credentialObj.getAccessKeyID()) + .setSignature(signature) + .setSignedHeaders(signedHeaders) + .setCredentialScope(credentialObj.createScope()) + .setAlgorithm(algorithm) + .setSignPayload(true) + .build(); } /** diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthorizationV4QueryParser.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthorizationV4QueryParser.java index 98e53fc570a7..0596af3953c7 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthorizationV4QueryParser.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthorizationV4QueryParser.java @@ -91,17 +91,16 @@ public SignatureInfo parseSignature() throws MalformedResourceException { validateSignedHeaders(); validateSignature(); - return new SignatureInfo( - Version.V4, - credential.getDate(), - queryParameters.get("X-Amz-Date"), - credential.getAccessKeyID(), - queryParameters.get("X-Amz-Signature"), - queryParameters.get("X-Amz-SignedHeaders"), - credential.createScope(), - queryParameters.get("X-Amz-Algorithm"), - false - ); + return new SignatureInfo.Builder(Version.V4) + .setDate(credential.getDate()) + .setDateTime(queryParameters.get("X-Amz-Date")) + .setAwsAccessId(credential.getAccessKeyID()) + .setSignature(queryParameters.get("X-Amz-Signature")) + .setSignedHeaders(queryParameters.get("X-Amz-SignedHeaders")) + .setCredentialScope(credential.createScope()) + .setAlgorithm(queryParameters.get("X-Amz-Algorithm")) + .setSignPayload(false) + .build(); } /** diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/SignatureInfo.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/SignatureInfo.java index d1db38a50aa5..e251ac46f7d3 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/SignatureInfo.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/SignatureInfo.java @@ -58,58 +58,36 @@ public class SignatureInfo { public SignatureInfo() { } - @SuppressWarnings("checkstyle:ParameterNumber") - public SignatureInfo( - Version version, - String date, - String dateTime, - String awsAccessId, - String signature, - String signedHeaders, - String credentialScope, - String algorithm, - boolean signPayload - ) { - initialize(version, date, dateTime, awsAccessId, signature, signedHeaders, - credentialScope, algorithm, signPayload, null, null); - } - - public void initialize( - SignatureInfo signatureInfo - ) { - initialize(signatureInfo.getVersion(), signatureInfo.getDate(), - signatureInfo.getDateTime(), signatureInfo.getAwsAccessId(), - signatureInfo.getSignature(), signatureInfo.getSignedHeaders(), - signatureInfo.getCredentialScope(), signatureInfo.getAlgorithm(), - signatureInfo.isSignPayload(), signatureInfo.getUnfilteredURI(), - signatureInfo.getStringToSign()); - } - - @SuppressWarnings({"checkstyle:ParameterNumber", "checkstyle:HiddenField"}) - public void initialize( - Version version, - String date, - String dateTime, - String awsAccessId, - String signature, - String signedHeaders, - String credentialScope, - String algorithm, - boolean signPayload, - String uri, - String stringToSign - ) { - this.version = version; - this.date = date; - this.dateTime = dateTime; - this.awsAccessId = awsAccessId; - this.signature = signature; - this.signedHeaders = signedHeaders; - this.credentialScope = credentialScope; - this.algorithm = algorithm; - this.signPayload = signPayload; - this.unfilteredURI = uri; - this.stringToSign = stringToSign; + private SignatureInfo(Builder b) { + initialize(b); + } + + public void initialize(SignatureInfo signatureInfo) { + initialize(new Builder(signatureInfo.getVersion()) + .setDate(signatureInfo.getDate()) + .setDateTime(signatureInfo.getDateTime()) + .setAwsAccessId(signatureInfo.getAwsAccessId()) + .setSignature(signatureInfo.getSignature()) + .setSignedHeaders(signatureInfo.getSignedHeaders()) + .setCredentialScope(signatureInfo.getCredentialScope()) + .setAlgorithm(signatureInfo.getAlgorithm()) + .setSignPayload(signatureInfo.isSignPayload()) + .setUnfilteredURI(signatureInfo.getUnfilteredURI()) + .setStringToSign(signatureInfo.getStringToSign())); + } + + private void initialize(Builder b) { + this.version = b.version; + this.date = b.date; + this.dateTime = b.dateTime; + this.awsAccessId = b.awsAccessId; + this.signature = b.signature; + this.signedHeaders = b.signedHeaders; + this.credentialScope = b.credentialScope; + this.algorithm = b.algorithm; + this.signPayload = b.signPayload; + this.unfilteredURI = b.unfilteredURI; + this.stringToSign = b.stringToSign; } public String getAwsAccessId() { @@ -170,4 +148,79 @@ public void setStrToSign(String strToSign) { public enum Version { NONE, V4, V2; } + + /** + * Builder class for SignatureInfo. + */ + public static class Builder { + private Version version; + private String date = ""; + private String dateTime = ""; + private String awsAccessId = ""; + private String signature = ""; + private String signedHeaders = ""; + private String credentialScope = ""; + private String algorithm = ""; + private boolean signPayload = true; + private String unfilteredURI = null; + private String stringToSign = null; + + public Builder(Version version) { + this.version = version; + } + + public Builder setDate(String date) { + this.date = date; + return this; + } + + public Builder setDateTime(String dateTime) { + this.dateTime = dateTime; + return this; + } + + public Builder setAwsAccessId(String awsAccessId) { + this.awsAccessId = awsAccessId; + return this; + } + + public Builder setSignature(String signature) { + this.signature = signature; + return this; + } + + public Builder setSignedHeaders(String signedHeaders) { + this.signedHeaders = signedHeaders; + return this; + } + + public Builder setCredentialScope(String credentialScope) { + this.credentialScope = credentialScope; + return this; + } + + public Builder setAlgorithm(String algorithm) { + this.algorithm = algorithm; + return this; + } + + public Builder setSignPayload(boolean signPayload) { + this.signPayload = signPayload; + return this; + } + + public Builder setUnfilteredURI(String uri) { + this.unfilteredURI = uri; + return this; + } + + public Builder setStringToSign(String stringToSign) { + this.stringToSign = stringToSign; + return this; + } + + public SignatureInfo build() { + return new SignatureInfo(this); + } + } }