Skip to content

Commit ad94311

Browse files
authored
Merge pull request #175 from zzq996/master
Version 3.25.4 New features: 支持设置okhttp的callTimeout 支持crr配置中的DeleteData 支持自定义域名相关配置 Resolved issues: 优化了校验ContentType的逻辑
2 parents 6f76962 + 8f41a46 commit ad94311

27 files changed

+510
-55
lines changed

README-Android.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
Version 3.25.4
2+
New features:
3+
1. Added logic to set okhttp callTimeout
4+
2. Added DeleteData of crr configuration
5+
3. Added custom domain configuration
6+
Resolved issues:
7+
1. Optimised logic of verifying ContentType
8+
-----------------------------------------------------------------------------------
19
Version 3.24.12
210
New features:
311
1. Added bpa feature

README-Java.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
Version 3.25.4
2+
New features:
3+
1. Added logic to set okhttp callTimeout
4+
2. Added DeleteData of crr configuration
5+
3. Added custom domain configuration
6+
Resolved issues:
7+
1. Optimised logic of verifying ContentType
8+
-----------------------------------------------------------------------------------
19
Version 3.24.12
210
New features:
311
1. Added bpa feature

README.MD

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
Version 3.25.4
2+
New features:
3+
1. Added logic to set okhttp callTimeout
4+
2. Added DeleteData of crr configuration
5+
3. Added custom domain configuration
6+
Resolved issues:
7+
1. Optimised logic of verifying ContentType
8+
-----------------------------------------------------------------------------------
19
Version 3.24.12
210
New features:
311
1. Added bpa feature

README_CN.MD

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
Version 3.25.4
2+
New features:
3+
1. 支持设置okhttp的callTimeout
4+
2. 支持crr配置中的DeleteData
5+
3. 支持自定义域名相关配置
6+
Resolved issues:
7+
1. 优化了校验ContentType的逻辑
8+
-----------------------------------------------------------------------------------
19
Version 3.24.12
210
New features:
311
1. 支持bpa特性

app/src/main/java/com/obs/services/AbstractBucketClient.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import com.obs.services.model.CreateBucketRequest;
3737
import com.obs.services.model.CreateVirtualBucketRequest;
3838
import com.obs.services.model.CreateVirtualBucketResult;
39+
import com.obs.services.model.CustomDomainCertificateConfig;
3940
import com.obs.services.model.DeleteBucketCustomDomainRequest;
4041
import com.obs.services.model.GetBucketCustomDomainRequest;
4142
import com.obs.services.model.HeaderResponse;
@@ -60,6 +61,7 @@
6061
import com.obs.services.model.inventory.GetInventoryConfigurationResult;
6162
import com.obs.services.model.inventory.ListInventoryConfigurationResult;
6263

64+
6365
public abstract class AbstractBucketClient extends AbstractDeprecatedBucketClient {
6466
/*
6567
* (non-Javadoc)
@@ -908,12 +910,14 @@ public BucketCustomDomainInfo action() throws ServiceException {
908910
public HeaderResponse setBucketCustomDomain(String bucketName, String domainName) throws ObsException {
909911
return setBucketCustomDomain(new SetBucketCustomDomainRequest(bucketName, domainName));
910912
}
911-
913+
912914
@Override
913915
public HeaderResponse setBucketCustomDomain(SetBucketCustomDomainRequest request) throws ObsException {
914-
ServiceUtils.assertParameterNotNull(request, "request is null");
915-
ServiceUtils.assertParameterNotNull(request.getBucketName(), "bucketName is null");
916-
ServiceUtils.assertParameterNotNull2(request.getDomainName(), "domainName is null");
916+
ServiceUtils.assertParameterNotNull(request, "Request is null");
917+
ServiceUtils.assertParameterNotNull(request.getBucketName(), "Bucket name is null");
918+
ServiceUtils.assertParameterNotNull2(request.getDomainName(), "Domain name is null");
919+
920+
CustomDomainCertificateConfig.checkCertificateConfig(request.getCustomDomainCertificateConfig());
917921

918922
return this.doActionWithResult("setBucketCustomDomain", request.getBucketName(),
919923
new ActionCallbackWithResult<HeaderResponse>() {

app/src/main/java/com/obs/services/ObsConfiguration.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ public class ObsConfiguration implements Cloneable {
112112

113113
private SSLContext sslContext;
114114

115+
private int callTimeout;
116+
115117
/**
116118
* Constructor
117119
*/
@@ -148,6 +150,7 @@ public ObsConfiguration() {
148150
this.secureRandom = new SecureRandom();
149151
this.localTimeUtil = new LocalTimeUtil();
150152
this.sslContext = null;
153+
this.callTimeout = ObsConstraint.HTTP_CALL_TIMEOUT_VALUE;
151154
}
152155

153156
public String getDelimiter() {
@@ -973,5 +976,12 @@ public void setSslContext(SSLContext sslContext) {
973976
this.sslContext = sslContext;
974977
}
975978

979+
public int getCallTimeout() {
980+
return callTimeout;
981+
}
982+
983+
public void setCallTimeout(int callTimeout) {
984+
this.callTimeout = callTimeout;
985+
}
976986

977987
}

app/src/main/java/com/obs/services/internal/Constants.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.TimeZone;
2727

2828
import com.obs.services.internal.utils.AbstractAuthentication;
29+
import com.obs.services.internal.utils.Mimetypes;
2930
import com.obs.services.internal.utils.ObsAuthentication;
3031
import com.obs.services.internal.utils.V2Authentication;
3132
import com.obs.services.model.AuthTypeEnum;
@@ -142,6 +143,23 @@ public static class ObsRequestParams {
142143
public static final String READAHEAD = "readAhead";
143144
public static final String X_CACHE_CONTROL = "x-cache-control";
144145
public static final String TASKID = "taskID";
146+
147+
}
148+
149+
public static class ObsBucketReplicationRequestParams {
150+
public static final String REPLICATION_CONFIGURATION = "ReplicationConfiguration";
151+
public static final String RULE = "Rule";
152+
153+
public static final String ID = "ID";
154+
public static final String HISTORICAL_OBJECT_REPLICATION = "HistoricalObjectReplication";
155+
public static final String DESTINATION = "Destination";
156+
public static final String STORAGE_CLASS = "StorageClass";
157+
public static final String DELETE_DATA = "DeleteData";
158+
public static final String STATUS = "Status";
159+
public static final String BUCKET = "Bucket";
160+
public static final String AGENCY = "Agency";
161+
public static final String PREFIX = "Prefix";
162+
145163
}
146164

147165
public static final Map<AuthTypeEnum, IHeaders> HEADERS_MAP;
@@ -221,7 +239,7 @@ public static class ObsRequestParams {
221239

222240
public static final TimeZone GMT_TIMEZONE = TimeZone.getTimeZone("GMT");
223241

224-
public static final String OBS_SDK_VERSION = "3.24.12";
242+
public static final String OBS_SDK_VERSION = "3.25.4";
225243

226244
public static final String USER_AGENT_VALUE = "obs-sdk-java/" + Constants.OBS_SDK_VERSION;
227245

@@ -272,13 +290,24 @@ public static class ObsRequestParams {
272290

273291
public static final String CONTENT_SHA256 = "content-sha256";
274292

293+
public static final String HTTPS_PREFIX = "https://";
294+
275295
public static final long MAX_PART_SIZE = 5 * 1024 * 1024 * 1024L;
276296

297+
public static final int KB_CONVERSION_FACTOR = 1024;
298+
277299
public static final long MIN_PART_SIZE = 100 * 1024L;
278300
public static final String REQUEST_TIME_TOO_SKEWED_CODE = "RequestTimeTooSkewed";
279301
public static final String ERROR_CODE_HEADER_OBS = "x-obs-error-code";
280302
public static final String ERROR_CODE_HEADER_AMZ = "x-amz-error-code";
281303

304+
public static final List<String> ALLOWED_RESPONSE_HTTP_CONTENT_TYPES_FOR_XML = Collections.unmodifiableList(
305+
Arrays.asList(
306+
Mimetypes.MIMETYPE_XML,
307+
Mimetypes.MIMETYPE_TEXT_XML,
308+
Mimetypes.MIMETYPE_XML_WITH_CHAR_SET_UTF8
309+
));
310+
282311
public static final List<String> ALLOWED_RESPONSE_HTTP_HEADER_METADATA_NAMES = Collections.unmodifiableList(
283312
Arrays.asList("content-type", "content-md5", "content-length", "content-language", "expires", "origin",
284313
"cache-control", "content-disposition", "content-encoding", "x-default-storage-class", "location",

app/src/main/java/com/obs/services/internal/ObsConstraint.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ public class ObsConstraint {
5858
*/
5959
public static final String HTTP_CONNECT_TIMEOUT = "httpclient.connection-timeout-ms";
6060

61+
/**
62+
* 整个http请求的超时时间
63+
*/
64+
public static final String HTTP_CALL_TIMEOUT = "httpclient.call-timeout-ms";
65+
6166
/**
6267
* SOCKET的超时时间
6368
*/
@@ -71,6 +76,8 @@ public class ObsConstraint {
7176

7277
public static final int HTTP_CONNECT_TIMEOUT_VALUE = 20000;
7378

79+
public static final int HTTP_CALL_TIMEOUT_VALUE = 0;
80+
7481
public static final int HTTP_MAX_CONNECT_VALUE = 1000;
7582

7683
public static final int HTTP_RETRY_MAX_VALUE = 3;
@@ -85,6 +92,8 @@ public class ObsConstraint {
8592

8693
public static final int DEFAULT_CHUNK_SIZE = 4096;
8794

95+
public static final double KB_PER_MB = 1024.0;
96+
8897
public static final String DEFAULT_BUCKET_LOCATION_VALUE = "region";
8998

9099
// public static final int DEFAULT_BUFFER_STREAM = 512 * 1024;// 512KB
@@ -165,4 +174,26 @@ public class ObsConstraint {
165174

166175
public static final String OBS_XML_DOC_BUILDER_FACTORY_CLASS =
167176
"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl";
177+
178+
public static final String CUSTOM_DOMAIN_CERTIFICATE_CONFIG = "CustomDomainConfiguration";
179+
public static final String CERTIFICATE_NAME = "Name";
180+
public static final String CERTIFICATE_ID = "CertificateId";
181+
public static final String CERTIFICATE = "Certificate";
182+
public static final String CERTIFICATE_CHAIN = "CertificateChain";
183+
public static final String CERTIFICATE_PRIVATE_KEY = "PrivateKey";
184+
public static class ObsBucketXMLElements {
185+
public static final String CREATE_TIME = "CreateTime";
186+
public static final String DOMAINS = "Domains";
187+
}
188+
189+
/**
190+
* Constants for CustomDomainCertificateConfig validation
191+
*/
192+
public static final int CUSTOM_DOMAIN_NAME_MIN_LENGTH = 3;
193+
public static final int CUSTOM_DOMAIN_NAME_MAX_LENGTH = 63;
194+
public static final int CUSTOM_DOMAIN_MAX_SIZE_KB = 40;
195+
public static final int CUSTOM_DOMAIN_CERTIFICATE_ID_MIN_LENGTH = 16;
196+
public static final int CUSTOM_DOMAIN_CERTIFICATE_ID_MAX_LENGTH = 16;
197+
public static final int CUSTOM_DOMAIN_CERTIFICATE_MAX_XML_BODY_SIZE_BY_KB = 40;
198+
168199
}

app/src/main/java/com/obs/services/internal/ObsConvertor.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -227,27 +227,31 @@ public String transBucketNotificationConfiguration(BucketNotificationConfigurati
227227
public String transReplicationConfiguration(ReplicationConfiguration replicationConfiguration)
228228
throws ServiceException {
229229
try {
230-
OBSXMLBuilder builder = OBSXMLBuilder.create("ReplicationConfiguration").e("Agency")
230+
OBSXMLBuilder builder = OBSXMLBuilder.create(Constants.ObsBucketReplicationRequestParams.REPLICATION_CONFIGURATION).e(Constants.ObsBucketReplicationRequestParams.AGENCY)
231231
.t(ServiceUtils.toValid(replicationConfiguration.getAgency())).up();
232232
for (ReplicationConfiguration.Rule rule : replicationConfiguration.getRules()) {
233-
builder = builder.e("Rule");
233+
builder = builder.e(Constants.ObsBucketReplicationRequestParams.RULE);
234234
if (rule.getId() != null) {
235-
builder.e("ID").t(rule.getId());
235+
builder.e(Constants.ObsBucketReplicationRequestParams.ID).t(rule.getId());
236236
}
237-
builder.e("Prefix").t(ServiceUtils.toValid(rule.getPrefix()));
237+
builder.e(Constants.ObsBucketReplicationRequestParams.PREFIX).t(ServiceUtils.toValid(rule.getPrefix()));
238238
if (rule.getStatus() != null) {
239-
builder.e("Status").t(rule.getStatus().getCode());
239+
builder.e(Constants.ObsBucketReplicationRequestParams.STATUS).t(rule.getStatus().getCode());
240240
}
241241
if (rule.getHistoricalObjectReplication() != null) {
242-
builder.e("HistoricalObjectReplication").t(rule.getHistoricalObjectReplication().getCode());
242+
builder.e(Constants.ObsBucketReplicationRequestParams.HISTORICAL_OBJECT_REPLICATION).t(rule.getHistoricalObjectReplication().getCode());
243243
}
244244
if (rule.getDestination() != null) {
245245
String bucketName = ServiceUtils.toValid(rule.getDestination().getBucket());
246-
builder = builder.e("Destination").e("Bucket").t(bucketName).up();
246+
builder = builder.e(Constants.ObsBucketReplicationRequestParams.DESTINATION).e(Constants.ObsBucketReplicationRequestParams.BUCKET).t(bucketName).up();
247247
if (rule.getDestination().getObjectStorageClass() != null) {
248-
builder.e("StorageClass")
248+
builder.e(Constants.ObsBucketReplicationRequestParams.STORAGE_CLASS)
249249
.t(this.transStorageClass(rule.getDestination().getObjectStorageClass()));
250250
}
251+
if (rule.getDestination().getDeleteData() != null) {
252+
builder.e(Constants.ObsBucketReplicationRequestParams.DELETE_DATA)
253+
.t(rule.getDestination().getDeleteData().getCode());
254+
}
251255
builder = builder.up();
252256
}
253257
builder = builder.up();

app/src/main/java/com/obs/services/internal/RestStorageService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,11 @@ protected Response performRequest(NewTransResult result, boolean needSignature,
412412
result.getUserHeaders().forEach(builder::addHeader);
413413
}
414414
Request request = builder.build();
415+
if (result.hasCertificate()) {
416+
ServiceUtils.checkParameterStartsWith(request.url().toString(),
417+
Constants.HTTPS_PREFIX,
418+
"Only '" + Constants.HTTPS_PREFIX + "' URLs are allowed for sending certificate details to ensure secure transmission.");
419+
}
415420
RequestInfo requestInfo = new RequestInfo(request, new InterfaceLogBean("performRequest", "", ""));
416421
try {
417422
tryRequest(result.getParams(), result.getBucketName(), needSignature,

0 commit comments

Comments
 (0)