/*
* Copyright 2014 Baidu, Inc.
*
* Licensed 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 com.baidubce.services.bos.model;
import com.baidubce.auth.BceCredentials;
import com.baidubce.http.HttpMethodName;
import com.baidubce.model.AbstractBceRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Contains options to generate a pre-signed URL for an Baidu BOS resource.
*
* <p>
* Pre-signed URLs allow clients to form a URL for an Baidu BOS resource and
* sign it with the current BCE security credentials.
* A pre-signed URL may be passed around for other users to access
* the resource without providing them
* access to an account's BCE security credentials.
*/
public class GeneratePresignedUrlRequest extends AbstractBceRequest {
/**
* The HTTP method (GET, PUT, DELETE, HEAD) to be used in this request and when the pre-signed URL is used
*/
private HttpMethodName method;
/**
* The name of the bucket involved in this request
*/
private String bucketName;
/**
* The key of the object involved in this request
*/
private String key;
/**
* The optional Content-Type header that will be sent when the presigned URL is accessed
*/
private String contentType;
/**
* The optional Content-MD5 header that will be sent when the presigned URL is accessed
*/
private String contentMd5;
/**
* An optional expiration after which point the generated pre-signed URL
* will no longer be accepted by BOS. If not specified, a default
* value will be supplied.
*/
private int expirationInSeconds = -1;
/**
* An optional map of additional parameters to include in the pre-signed
* URL. Adding additional request parameters enables more advanced
* pre-signed URLs, such as accessing BOS's torrent resource for an
* object, or for specifying a version ID when accessing an object.
*/
private Map<String, String> requestParameters = new HashMap<String, String>();
/**
* An optional map of additional headers to include in the pre-signed URL.
*/
private Map<String, String> requestHeaders = new HashMap<String, String>();
/**
* Optional field that overrides headers on the response.
*/
private ResponseHeaderOverrides responseHeaders;
/**
* Creates a new request for generating a pre-signed URL that can be used as
* part of an HTTP GET request to access the BOS object stored under
* the specified key in the specified bucket.
*
* @param bucketName The name of the bucket containing the desired BOS
* object.
* @param key The key under which the desired BOS object is stored.
*/
public GeneratePresignedUrlRequest(String bucketName, String key) {
this(bucketName, key, HttpMethodName.GET);
}
/**
* Creates a new request for generating a pre-signed URL that can be used as
* part of an HTTP request to access the specified BOS resource.
*
* <p>
* When specifying an HTTP method, you <b>must</b> send the pre-signed URL
* with the same HTTP method in order to successfully use the pre-signed
* URL.
*
* @param bucketName The name of the BOS bucket involved in the operation.
* @param key The key of the BOS object involved in the operation.
* @param method The HTTP method (GET, PUT, DELETE, HEAD) to be used in the
* request when the pre-signed URL is used.
*/
public GeneratePresignedUrlRequest(String bucketName, String key, HttpMethodName method) {
this.bucketName = bucketName;
this.key = key;
this.method = method;
}
/**
* The HTTP method (GET, PUT, DELETE, HEAD) to be used in this request. The
* same HTTP method <b>must</b> be used in the request when the pre-signed
* URL is used.
*
* @return The HTTP method (GET, PUT, DELETE, HEAD) to be used in this
* request and when the pre-signed URL is used.
*/
public HttpMethodName getMethod() {
return method;
}
/**
* Sets the HTTP method (GET, PUT, DELETE, HEAD) to be used in this request.
* The same HTTP method <b>must</b> be used in the request when the
* pre-signed URL is used.
*
* @param method The HTTP method (GET, PUT, DELETE, HEAD) to be used in this request.
*/
public void setMethod(HttpMethodName method) {
this.method = method;
}
/**
* Sets the HTTP method (GET, PUT, DELETE, HEAD) to be used in this request,
* and returns this request object to enable additional method calls to be
* chained together.
*
* <p>
* The same HTTP method <b>must</b> be used in the request when the
* pre-signed URL is used.
*
* @param method The HTTP method (GET, PUT, DELETE, HEAD) to be used in this request.
* @return The updated request object, so that additional method calls can
* be chained together.
*/
public GeneratePresignedUrlRequest withMethod(HttpMethodName method) {
setMethod(method);
return this;
}
/**
* Returns the name of the bucket involved in this request.
*
* @return the name of the bucket involved in this request.
*/
public String getBucketName() {
return bucketName;
}
/**
* Sets the name of the bucket involved in this request.
*
* @param bucketName the name of the bucket involved in this request.
*/
public void setBucketName(String bucketName) {
this.bucketName = bucketName;
}
/**
* Sets the name of the bucket involved in this request, and returns this
* request object to enable additional method calls to be chained together.
*
* @param bucketName the name of the bucket involved in this request.
* @return The updated request object, so that additional method calls can be chained together.
*/
public GeneratePresignedUrlRequest withBucketName(String bucketName) {
this.setBucketName(bucketName);
return this;
}
/**
* Returns the key of the object involved in this request.
*
* @return The key of the object involved in this request.
*/
public String getKey() {
return key;
}
/**
* Sets the key of the object involved in this request.
*
* @param key the key of the object involved in this request.
*/
public void setKey(String key) {
this.key = key;
}
/**
* Sets the key of the object involved in this request, and returns this
* request object to enable additional method calls to be chained together.
*
* @param key the key of the object involved in this request.
* @return The updated request object, so that additional method calls can be chained together.
*/
public GeneratePresignedUrlRequest withKey(String key) {
setKey(key);
return this;
}
/**
* The expiration after which point the new pre-signed URL will no longer
* be accepted by BOS. If not specified, a default value will be supplied.
*
* @return The expiration date at which point the new pre-signed URL will no
* longer be accepted by BOS.
*/
public int getExpiration() {
return expirationInSeconds;
}
/**
* Sets the expiration after which point the new pre-signed URL will no
* longer be accepted by BOS. If not specified, a default value will be supplied.
*
* @param expirationInSeconds The expiration after which point the new pre-signed URL will
* no longer be accepted by BOS.
*/
public void setExpiration(int expirationInSeconds) {
this.expirationInSeconds = expirationInSeconds;
}
/**
* Sets the expiration after which point the new pre-signed URL will no
* longer be accepted by BOS, and returns this request object to
* enable additional method calls to be chained together.
*
* <p>
* If not specified, a default value will be supplied.
*
* @param expirationInSeconds The expiration after which point the new pre-signed URL will
* no longer be accepted by BOS.
* @return The updated request object, so that additional method calls can
* be chained together.
*/
public GeneratePresignedUrlRequest withExpiration(int expirationInSeconds) {
setExpiration(expirationInSeconds);
return this;
}
/**
* Adds an additional request parameter to be included in the pre-signed
* URL. Adding additional request parameters enables more advanced
* pre-signed URLs, such as accessing BOS's torrent resource for an
* object, or for specifying a version ID when accessing an object.
*
* @param key The name of the request parameter, as it appears in the URL's query string.
* @param value The (optional) value of the request parameter being added.
*/
public void addRequestParameter(String key, String value) {
requestParameters.put(key, value);
}
/**
* Returns the complete map of additional request parameters to be included
* in the pre-signed URL.
*
* @return The complete map of additional request parameters to be included
* in the pre-signed URL.
*/
public Map<String, String> getRequestParameters() {
return requestParameters;
}
/**
* Returns the headers to be overridden in the service response.
*
* @return the headers to be overridden in the service response.
*/
public ResponseHeaderOverrides getResponseHeaders() {
return responseHeaders;
}
/**
* Sets the headers to be overridden in the service response.
*
* @param responseHeaders The headers to be overridden in the service response.
*/
public void setResponseHeaders(ResponseHeaderOverrides responseHeaders) {
this.responseHeaders = responseHeaders;
}
/**
* Sets the headers to be overridden in the service response and returns
* this object, for method chaining.
*
* @param responseHeaders The headers to be overridden in the service response.
* @return This {@link GeneratePresignedUrlRequest} for method chaining.
*/
public GeneratePresignedUrlRequest withResponseHeaders(ResponseHeaderOverrides responseHeaders) {
setResponseHeaders(responseHeaders);
return this;
}
/**
* Adds an additional request header to be included in the pre-signed URL.
*
* @param key The name of the request header, as it appears in the URL's header.
* @param value The (optional) value of the request header being added.
*/
public void addRequestHeaders(String key, String value) {
requestHeaders.put(key, value);
}
/**
* Returns the complete map of additional request headers to be included
* in the pre-signed URL.
*
* @return The complete map of additional request headers to be included
* in the pre-signed URL.
*/
public Map<String, String> getRequestHeaders() {
return requestHeaders;
}
/**
* Gets the expected content-type of the request. The content-type is included in
* the signature.
*
* @return The expected content-type
*/
public String getContentType() {
return contentType;
}
/**
* Sets the expected content-type of the request. The content-type is included in
* the signature.
*
* @param contentType The expected content-type
*/
public void setContentType(String contentType) {
this.contentType = contentType;
}
/**
* Sets the expected content-type of the request and returns
* this object, for method chaining.
*
* @param contentType The expected content-type
* @return This {@link GeneratePresignedUrlRequest} for method chaining.
*/
public GeneratePresignedUrlRequest withContentType(String contentType) {
setContentType(contentType);
return this;
}
/**
* Gets the expected content-md5 header of the request. This header value
* will be included when calculating the signature, and future requests must
* include the same content-md5 header value to access the presigned URL.
*
* @return The expected content-md5 header value.
*/
public String getContentMd5() {
return contentMd5;
}
/**
* Sets the expected content-md5 header of the request. This header value
* will be included when calculating the signature, and future requests must
* include the same content-md5 header value to access the presigned URL.
*
* @param contentMd5 The expected content-md5 header value.
*/
public void setContentMd5(String contentMd5) {
this.contentMd5 = contentMd5;
}
/**
* Sets the expected content-md5 header of the request and returns this
* object, for method chaining.
*
* @param contentMd5 The expected content-md5 header value.
* @return This {@link GeneratePresignedUrlRequest} for method chaining.
*/
public GeneratePresignedUrlRequest withContentMd5(String contentMd5) {
this.contentMd5 = contentMd5;
return this;
}
@Override
public GeneratePresignedUrlRequest withRequestCredentials(BceCredentials credentials) {
this.setRequestCredentials(credentials);
return this;
}
}