mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
ADD: MacCloud/S3: step-127: support HeadBucket API in HuaweiOBS
This commit is contained in:
parent
84a2000f2c
commit
1d9bbe474f
3 changed files with 47 additions and 35 deletions
|
|
@ -1,7 +1,6 @@
|
|||
unit uAmazonS3Client;
|
||||
|
||||
{$mode ObjFPC}{$H+}
|
||||
{$modeswitch objectivec2}
|
||||
|
||||
interface
|
||||
|
||||
|
|
@ -9,18 +8,17 @@ uses
|
|||
Classes, SysUtils,
|
||||
CocoaAll,
|
||||
uCloudDriver, uAWSCore, uS3Client,
|
||||
uMiniHttpClient, uMiniUtil;
|
||||
uMiniUtil;
|
||||
|
||||
type
|
||||
|
||||
{ TAmazonS3GetAllBucketsSession }
|
||||
|
||||
TAmazonS3GetAllBucketsSession = class( TS3GetAllBucketsSession )
|
||||
TAmazonS3GetAllBucketsSession = class( TS3GetAllBucketsWithRegionFunctionSession )
|
||||
protected
|
||||
procedure constructBucket( const bucket: TS3Bucket; const xmlBucket: NSXMLElement ); override;
|
||||
function getConnectionDataOfService: TAWSConnectionData; override;
|
||||
function getEndPointOfRegion(const region: String): String; override;
|
||||
function getRegionOfBucket(const name: String): String;
|
||||
end;
|
||||
|
||||
{ TAmazonS3Client }
|
||||
|
|
@ -56,34 +54,6 @@ begin
|
|||
Result:= 's3.' + region + '.amazonaws.com';
|
||||
end;
|
||||
|
||||
function TAmazonS3GetAllBucketsSession.getRegionOfBucket( const name: String ): String;
|
||||
var
|
||||
connectionData: TAWSConnectionData;
|
||||
endPoint: String;
|
||||
http: TMiniHttpClient = nil;
|
||||
httpResult: TMiniHttpResult = nil;
|
||||
cloudDriverResult: TCloudDriverResult = nil;
|
||||
urlString: String;
|
||||
begin
|
||||
try
|
||||
connectionData:= self.getConnectionDataOfService;
|
||||
endPoint:= self.getEndPointOfRegion( connectionData.region );
|
||||
urlString:= 'https://' + name + '.' + endPoint + '/';
|
||||
http:= TMiniHttpClient.Create( urlString, HttpConst.Method.HEAD );
|
||||
http.addHeader( AWSConst.HEADER.CONTENT_SHA256, AWSConst.HEADER.CONTENT_SHA256_DEFAULT_VALUE );
|
||||
_authSession.setAuthHeader( http );
|
||||
|
||||
cloudDriverResult:= TCloudDriverResult.Create;
|
||||
httpResult:= http.connect;
|
||||
cloudDriverResult.httpResult:= httpResult;
|
||||
cloudDriverResult.resultMessage:= httpResult.body;
|
||||
Result:= httpResult.getHeader( AWSConst.HEADER.BUCKET_REGION );
|
||||
finally
|
||||
FreeAndNil( cloudDriverResult );
|
||||
FreeAndNil( http );
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TAmazonS3Client }
|
||||
|
||||
class function TAmazonS3Client.driverName: String;
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ type
|
|||
|
||||
{ THuaweiOBSGetAllBucketsSession }
|
||||
|
||||
THuaweiOBSGetAllBucketsSession = class( TS3GetAllBucketsSession )
|
||||
THuaweiOBSGetAllBucketsSession = class( TS3GetAllBucketsWithRegionFunctionSession )
|
||||
protected
|
||||
procedure constructBucket( const bucket: TS3Bucket; const xmlBucket: NSXMLElement ); override;
|
||||
function getConnectionDataOfService: TAWSConnectionData; override;
|
||||
|
|
@ -38,19 +38,24 @@ implementation
|
|||
procedure THuaweiOBSGetAllBucketsSession.constructBucket( const bucket: TS3Bucket; const xmlBucket: NSXMLElement );
|
||||
begin
|
||||
bucket.connectionData.region:= TXmlUtil.getString( xmlBucket, 'Location' );
|
||||
if bucket.connectionData.region = EmptyStr then
|
||||
bucket.connectionData.region:= self.getRegionOfBucket( bucket.connectionData.bucketName );
|
||||
bucket.connectionData.endPoint:= self.getEndPointOfRegion( bucket.connectionData.region );
|
||||
end;
|
||||
|
||||
function THuaweiOBSGetAllBucketsSession.getConnectionDataOfService: TAWSConnectionData;
|
||||
begin
|
||||
Result.region:= 'cn-north-1';
|
||||
Result.region:= '';
|
||||
Result.endPoint:= 'obs.myhuaweicloud.com';
|
||||
Result.bucketName:= '';
|
||||
end;
|
||||
|
||||
function THuaweiOBSGetAllBucketsSession.getEndPointOfRegion( const region: String ): String;
|
||||
begin
|
||||
Result:= 'obs.' + region + '.myhuaweicloud.com';
|
||||
if region = EmptyStr then
|
||||
Result:= 'obs.myhuaweicloud.com'
|
||||
else
|
||||
Result:= 'obs.' + region + '.myhuaweicloud.com';
|
||||
end;
|
||||
|
||||
{ THuaweiOBSClient }
|
||||
|
|
|
|||
|
|
@ -66,6 +66,13 @@ type
|
|||
function listBuckets: TS3Buckets;
|
||||
end;
|
||||
|
||||
{ TS3GetAllBucketsWithRegionFunctionSession }
|
||||
|
||||
TS3GetAllBucketsWithRegionFunctionSession = class( TS3GetAllBucketsSession )
|
||||
protected
|
||||
function getRegionOfBucket( const name: String ): String;
|
||||
end;
|
||||
|
||||
{ TS3BucketsLister }
|
||||
|
||||
TS3BucketsLister = class( TCloudDriverLister )
|
||||
|
|
@ -683,6 +690,36 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
{ TS3GetAllBucketsWithRegionFunctionSession }
|
||||
|
||||
function TS3GetAllBucketsWithRegionFunctionSession.getRegionOfBucket( const name: String ): String;
|
||||
var
|
||||
connectionData: TAWSConnectionData;
|
||||
endPoint: String;
|
||||
http: TMiniHttpClient = nil;
|
||||
httpResult: TMiniHttpResult = nil;
|
||||
cloudDriverResult: TCloudDriverResult = nil;
|
||||
urlString: String;
|
||||
begin
|
||||
try
|
||||
connectionData:= self.getConnectionDataOfService;
|
||||
endPoint:= self.getEndPointOfRegion( connectionData.region );
|
||||
urlString:= 'https://' + name + '.' + endPoint + '/';
|
||||
http:= TMiniHttpClient.Create( urlString, HttpConst.Method.HEAD );
|
||||
http.addHeader( AWSConst.HEADER.CONTENT_SHA256, AWSConst.HEADER.CONTENT_SHA256_DEFAULT_VALUE );
|
||||
_authSession.setAuthHeader( http );
|
||||
|
||||
cloudDriverResult:= TCloudDriverResult.Create;
|
||||
httpResult:= http.connect;
|
||||
cloudDriverResult.httpResult:= httpResult;
|
||||
cloudDriverResult.resultMessage:= httpResult.body;
|
||||
Result:= httpResult.getHeader( AWSConst.HEADER.BUCKET_REGION );
|
||||
finally
|
||||
FreeAndNil( cloudDriverResult );
|
||||
FreeAndNil( http );
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TS3BucketsLister }
|
||||
|
||||
constructor TS3BucketsLister.Create( const buckets: TS3Buckets );
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue