1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-01-14 04:35:49 +02:00

Main build (Jenkins)

This commit is contained in:
Vitaly the Alpaca (bot) 2024-12-04 16:33:15 +03:00
parent bd79958e60
commit b715f60a2d
13 changed files with 5958 additions and 5864 deletions

File diff suppressed because it is too large Load Diff

View File

@ -60,12 +60,14 @@
// Structure of KeyAndValue - Basic request data structure
Function GetBasicDataStructure(Val URL, Val AccessKey, Val SecretKey, Val Region, Val Service = "s3") Export
String_ = "String";
AuthStructure = New Structure;
OPI_Tools.AddField("URL" , URL , "String", AuthStructure);
OPI_Tools.AddField("AccessKey", AccessKey, "String", AuthStructure);
OPI_Tools.AddField("SecretKey", SecretKey, "String", AuthStructure);
OPI_Tools.AddField("Region" , Region , "String", AuthStructure);
OPI_Tools.AddField("Service" , Service , "String", AuthStructure);
OPI_Tools.AddField("URL" , URL , String_, AuthStructure);
OPI_Tools.AddField("AccessKey", AccessKey, String_, AuthStructure);
OPI_Tools.AddField("SecretKey", SecretKey, String_, AuthStructure);
OPI_Tools.AddField("Region" , Region , String_, AuthStructure);
OPI_Tools.AddField("Service" , Service , String_, AuthStructure);
Return AuthStructure;
@ -502,13 +504,15 @@ Function ListBuckets(Val BasicData
, Val PageToken = ""
, Val Headers = Undefined) Export
String_ = "String";
BasicData_ = OPI_Tools.CopyCollection(BasicData);
Parameters = New Map;
OPI_Tools.AddField("bucket-region" , Region , "String", Parameters);
OPI_Tools.AddField("continuation-token", PageToken, "String", Parameters);
OPI_Tools.AddField("max-buckets" , 250 , "String", Parameters);
OPI_Tools.AddField("prefix" , Prefix , "String", Parameters);
OPI_Tools.AddField("bucket-region" , Region , String_, Parameters);
OPI_Tools.AddField("continuation-token", PageToken, String_, Parameters);
OPI_Tools.AddField("max-buckets" , 250 , String_, Parameters);
OPI_Tools.AddField("prefix" , Prefix , String_, Parameters);
URL = GetServiceURL(BasicData_);
URL = URL + OPI_Tools.RequestParametersToString(Parameters);
@ -555,7 +559,8 @@ Function PutObject(Val Name
OPI_TypeConversion.GetBinaryData(Entity);
FileSize = GetContentSize(Entity);
MinPartSize = FileSize / 10000;
Divider = 10000;
MinPartSize = FileSize / Divider;
MinPartSize = Max(MinPartSize, 5242880);
If OPI_Tools.CollectionFieldExist(BasicData_, "ChunkSize") Then
@ -1107,16 +1112,18 @@ Function ListObjects(Val Bucket
, Val PageToken = ""
, Val Headers = Undefined) Export
String_ = "String";
BasicData_ = OPI_Tools.CopyCollection(BasicData);
URL = GetServiceURL(BasicData_);
URL = FormBucketURL(URL, Bucket, False);
Parameters = New Map;
OPI_Tools.AddField("list-type" , 2 , "String", Parameters);
OPI_Tools.AddField("max-keys" , 250 , "String", Parameters);
OPI_Tools.AddField("continuation-token", PageToken, "String", Parameters);
OPI_Tools.AddField("prefix" , Prefix , "String", Parameters);
OPI_Tools.AddField("list-type" , 2 , String_, Parameters);
OPI_Tools.AddField("max-keys" , 250 , String_, Parameters);
OPI_Tools.AddField("continuation-token", PageToken, String_, Parameters);
OPI_Tools.AddField("prefix" , Prefix , String_, Parameters);
URL = URL + OPI_Tools.RequestParametersToString(Parameters);
BasicData_.Insert("URL", URL);
@ -1148,6 +1155,8 @@ Function ListObjectVersions(Val Bucket
, Val Version = ""
, Val Headers = Undefined) Export
String_ = "String";
BasicData_ = OPI_Tools.CopyCollection(BasicData);
URL = GetServiceURL(BasicData_);
@ -1155,9 +1164,9 @@ Function ListObjectVersions(Val Bucket
URL = URL + "?versions";
Parameters = New Map;
OPI_Tools.AddField("max-keys" , 250 , "String", Parameters);
OPI_Tools.AddField("version-id-marker", Version , "String", Parameters);
OPI_Tools.AddField("prefix" , Prefix , "String", Parameters);
OPI_Tools.AddField("max-keys" , 250 , String_, Parameters);
OPI_Tools.AddField("version-id-marker", Version , String_, Parameters);
OPI_Tools.AddField("prefix" , Prefix , String_, Parameters);
URL = URL + OPI_Tools.RequestParametersToString(Parameters, , False);
BasicData_.Insert("URL", URL);
@ -1301,10 +1310,11 @@ Function CreateURLSignature(Val DataStructure, Val Name, Val Method, Val Expire,
ParametersString = OPI_Tools.RequestParametersToString(URLParameters);
ParametersString = Right(ParametersString, StrLen(ParametersString) - 1);
RequestTemplate = "";
PartsAmount = 6;
For N = 1 To 6 Do
For N = 1 To PartsAmount Do
RequestTemplate = RequestTemplate + "%" + String(N) + ?(N = 6, "", Chars.LF);
RequestTemplate = RequestTemplate + "%" + String(N) + ?(N = PartsAmount, "", Chars.LF);
EndDo;
@ -1382,12 +1392,13 @@ Function CreateCanonicalRequest(Val Request, Val Connection, Val Method)
RequestTemplate = "";
RequestBody = OPI_Tools.GetRequestBody(Request);
HashSum = OPI_Cryptography.Hash(RequestBody, HashFunction.SHA256);
PartsAmount = 6;
Request.Headers.Insert("x-amz-content-sha256", Lower(ПолучитьHexСтрокуИзДвоичныхДанных(HashSum)));
For N = 1 To 6 Do
For N = 1 To PartsAmount Do
RequestTemplate = RequestTemplate + "%" + String(N) + ?(N = 6, "", Chars.LF);
RequestTemplate = RequestTemplate + "%" + String(N) + ?(N = PartsAmount, "", Chars.LF);
EndDo;
@ -1432,14 +1443,15 @@ Function CreateSignatureString(Val CanonicalRequest, Val Scope, Val CurrentDate)
StringTemplate = "";
Algorithm = "AWS4-HMAC-SHA256";
DateISO = OPI_Tools.ISOTimestamp(CurrentDate);
PartsAmount = 4;
CanonicalRequest = ПолучитьДвоичныеДанныеИзСтроки(CanonicalRequest);
CanonicalRequest = OPI_Cryptography.Hash(CanonicalRequest, HashFunction.SHA256);
CanonicalRequest = Lower(ПолучитьHexСтрокуИзДвоичныхДанных(CanonicalRequest));
For N = 1 To 4 Do
For N = 1 To PartsAmount Do
StringTemplate = StringTemplate + "%" + String(N) + ?(N = 4, "", Chars.LF);
StringTemplate = StringTemplate + "%" + String(N) + ?(N = PartsAmount, "", Chars.LF);
EndDo;
@ -1658,6 +1670,7 @@ Function GetObjectInChunks(Val BasicData
ChunkSize = Sizes["chunk"];
HeaderTemplate = "bytes=%1-%2";
ChunkStart = 0;
Attempts = 3;
HeadersArray = New Array;
@ -1684,17 +1697,12 @@ Function GetObjectInChunks(Val BasicData
EndIf;
If ValueIsFilled(SavePath) Then
StreamOfFile = New FileStream(SavePath, FileOpenMode.Create);
Else
StreamOfFile = New MemoryStream();
EndIf;
FileWriter = New DataWriter(StreamOfFile);
StreamOfFile = OPI_Tools.CreateStream(SavePath);
FileWriter = New DataWriter(StreamOfFile);
For Each CurrentSet In HeadersArray Do
For N = 1 To 3 Do
For N = 1 To Attempts Do
Try
@ -1719,13 +1727,13 @@ Function GetObjectInChunks(Val BasicData
Except
If N = 3 Then
If N = Attempts Then
Message(ErrorDescription());
Raise "Failed to retrieve the file!";
Else
Message("Chunk upload error " + String(N) + "/3");
Message("Chunk upload error " + String(N) + "/" + String(Attempts));
Continue;
EndIf;
@ -1737,13 +1745,9 @@ Function GetObjectInChunks(Val BasicData
FileWriter.Close();
If TypeOf(StreamOfFile) = Type("MemoryStream") Then
Return StreamOfFile.CloseAndGetBinaryData();
Else
StreamOfFile.Close();
ResponseFile = New File(SavePath);
Return ResponseFile.FullName;
EndIf;
ReceivedObject = CloseStreamReceiveData(StreamOfFile, SavePath);
Return ReceivedObject;
EndFunction
@ -1781,7 +1785,6 @@ Function UploadObjectInParts(Val Name
BytesRead = 0;
PartNumber = 1;
If Not OPI_Tools.CollectionFieldExist(UploadStart, FieldID, UploadID) Then
Return UploadStart;
EndIf;
@ -1790,13 +1793,16 @@ Function UploadObjectInParts(Val Name
SourceStream = DataReader.SourceStream();
Response = New Map;
TagsArray = New Array;
Error = False;
Error = False;
Attempts = 3;
LastSuccessCode = 299;
WHile BytesRead < TotalSize Do
Try
For N = 1 To Attempts Do
For N = 1 To 3 Do
Try
Result = DataReader.Read(ChunkSize);
CurrentData = Result.GetBinaryData();
@ -1812,7 +1818,7 @@ Function UploadObjectInParts(Val Name
, PartNumber
, CurrentData);
If Response["status"] > 299 Then
If Response["status"] > LastSuccessCode Then
Raise "The server returned the status " + String(Response["status"]);
EndIf;
@ -1832,27 +1838,27 @@ Function UploadObjectInParts(Val Name
Break;
EndDo;
Except
Except
If N = Attempts Then
If N = 3 Then
Message(OPI_Tools.JSONString(Response));
Message("Failed to upload part of the file! Abort upload wiht ID:" + UploadID + "...");
Message(OPI_Tools.JSONString(Response));
Message("Failed to upload part of the file! Abort upload wiht ID:" + UploadID + "...");
Error = True;
Break;
Error = True;
Break;
Else
Else
Message("Chunk upload error " + String(N) + "/" + String(Attempts));
Message(ErrorDescription());
Continue;
Message("Chunk upload error " + String(N) + "/3");
Message(ErrorDescription());
Continue;
EndIf;
EndIf;
EndTry;
EndTry;
EndDo;
PartNumber = PartNumber + 1;
@ -1870,10 +1876,11 @@ EndFunction
Function FormResponse(Val Response, Val ExpectedBinary = False)
Status = Response.StatusCode;
Headers = Response.Headers;
Status = Response.StatusCode;
Headers = Response.Headers;
LastSuccessCode = 299;
If Not ExpectedBinary Or Status > 299 Then
If Not ExpectedBinary Or Status > LastSuccessCode Then
ResponseData = New Structure;
BodyData = New Structure;
@ -1909,12 +1916,14 @@ Function FormBucketURL(Val URL, Val Name, Val Directory)
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetBoolean(Directory);
Indication = "://";
If Directory Then
URL = URL + Name;
Else
If StrFind(URL, "://") Then
URL = StrReplace(URL, "://", "://" + Name + ".");
If StrFind(URL, Indication) Then
URL = StrReplace(URL, Indication, Indication + Name + ".");
Else
URL = Name + "." + URL;
EndIf;
@ -1995,6 +2004,18 @@ Function GetContentSize(Val Entity)
EndFunction
Function CloseStreamReceiveData(Val StreamOfFile, Val SavePath)
If TypeOf(StreamOfFile) = Type("MemoryStream") Then
Return StreamOfFile.CloseAndGetBinaryData();
Else
StreamOfFile.Close();
ResponseFile = New File(SavePath);
Return ResponseFile.FullName;
EndIf;
EndFunction
Procedure CheckBasicData(BasicData)
ErrorText = "Error of obtaining authorization data from the structure";

View File

@ -32,6 +32,7 @@
// BSLLS:UsingServiceTag-off
// BSLLS:ExecuteExternalCodeInCommonModule-off
// BSLLS:DuplicateStringLiteral-off
// BSLLS:MagicNumber-off
//@skip-check use-non-recommended-method
//@skip-check module-structure-top-region
@ -2046,6 +2047,7 @@ Function GetCommonModule(Val Name)
Return Module;
EndFunction
// BSLLS:CognitiveComplexity-off
Function GetCLIFormedValue(Val Value, Val Embedded = False)
CurrentType = TypeOf(Value);
@ -2081,8 +2083,12 @@ Function GetCLIFormedValue(Val Value, Val Embedded = False)
Else
// BSLLS:MissingTemporaryFileDeletion-off
//@skip-check missing-temporary-file-deletion
TFN = GetTempFileName("json");
// BSLLS:MissingTemporaryFileDeletion-on
Stream = New FileStream(TFN, FileOpenMode.Create);
JSONWriter.OpenStream(Stream);
@ -2118,6 +2124,7 @@ Function GetCLIFormedValue(Val Value, Val Embedded = False)
Return Value;
EndFunction
// BSLLS:CognitiveComplexity-on
Function FormOption(Val Value, Val Name, Val Embedded = False)

View File

@ -191,7 +191,11 @@ Function CreateRequest(Val Address, Val AdditionalHeaders = "", Val DataType = "
EndFunction
Function CreateConnection(Val Host, Val Safe = True, Val User = "", Val Password = "", Val Port = "") Export
Function CreateConnection(Val Host
, Val Safe = True
, Val User = ""
, Val Password = ""
, Val Port = "") Export
If Not ValueIsFilled(Port) Then
Port = ?(Safe, 443, 80);
@ -408,7 +412,10 @@ Function JsonToStructure(Val Text) Export
EndFunction
Function JSONString(Val Data, Val Escaping = "None", Val LineBreaks = True, Val DoubleQuotes = True) Export
Function JSONString(Val Data
, Val Escaping = "None"
, Val LineBreaks = True
, Val DoubleQuotes = True) Export
LineBreak = ?(LineBreaks, JSONLineBreak.Windows, JSONLineBreak.None);
@ -825,6 +832,18 @@ Function GetRequestBody(Val Request) Export
EndFunction
Function CreateStream(Val FilePath = Undefined) Export
If ValueIsFilled(FilePath) Then
StreamOfFile = New FileStream(FilePath, FileOpenMode.Create);
Else
StreamOfFile = New MemoryStream();
EndIf;
Return StreamOfFile;
EndFunction
Procedure ValueToArray(Value) Export
If TypeOf(Value) = Type("Array") Then

View File

@ -60,12 +60,14 @@
// Structure of KeyAndValue - Basic request data structure
Function GetBasicDataStructure(Val URL, Val AccessKey, Val SecretKey, Val Region, Val Service = "s3") Export
String_ = "String";
AuthStructure = New Structure;
OPI_Tools.AddField("URL" , URL , "String", AuthStructure);
OPI_Tools.AddField("AccessKey", AccessKey, "String", AuthStructure);
OPI_Tools.AddField("SecretKey", SecretKey, "String", AuthStructure);
OPI_Tools.AddField("Region" , Region , "String", AuthStructure);
OPI_Tools.AddField("Service" , Service , "String", AuthStructure);
OPI_Tools.AddField("URL" , URL , String_, AuthStructure);
OPI_Tools.AddField("AccessKey", AccessKey, String_, AuthStructure);
OPI_Tools.AddField("SecretKey", SecretKey, String_, AuthStructure);
OPI_Tools.AddField("Region" , Region , String_, AuthStructure);
OPI_Tools.AddField("Service" , Service , String_, AuthStructure);
Return AuthStructure;
@ -502,13 +504,15 @@ Function ListBuckets(Val BasicData
, Val PageToken = ""
, Val Headers = Undefined) Export
String_ = "String";
BasicData_ = OPI_Tools.CopyCollection(BasicData);
Parameters = New Map;
OPI_Tools.AddField("bucket-region" , Region , "String", Parameters);
OPI_Tools.AddField("continuation-token", PageToken, "String", Parameters);
OPI_Tools.AddField("max-buckets" , 250 , "String", Parameters);
OPI_Tools.AddField("prefix" , Prefix , "String", Parameters);
OPI_Tools.AddField("bucket-region" , Region , String_, Parameters);
OPI_Tools.AddField("continuation-token", PageToken, String_, Parameters);
OPI_Tools.AddField("max-buckets" , 250 , String_, Parameters);
OPI_Tools.AddField("prefix" , Prefix , String_, Parameters);
URL = GetServiceURL(BasicData_);
URL = URL + OPI_Tools.RequestParametersToString(Parameters);
@ -555,7 +559,8 @@ Function PutObject(Val Name
OPI_TypeConversion.GetBinaryData(Entity);
FileSize = GetContentSize(Entity);
MinPartSize = FileSize / 10000;
Divider = 10000;
MinPartSize = FileSize / Divider;
MinPartSize = Max(MinPartSize, 5242880);
If OPI_Tools.CollectionFieldExists(BasicData_, "ChunkSize") Then
@ -1107,16 +1112,18 @@ Function ListObjects(Val Bucket
, Val PageToken = ""
, Val Headers = Undefined) Export
String_ = "String";
BasicData_ = OPI_Tools.CopyCollection(BasicData);
URL = GetServiceURL(BasicData_);
URL = FormBucketURL(URL, Bucket, False);
Parameters = New Map;
OPI_Tools.AddField("list-type" , 2 , "String", Parameters);
OPI_Tools.AddField("max-keys" , 250 , "String", Parameters);
OPI_Tools.AddField("continuation-token", PageToken, "String", Parameters);
OPI_Tools.AddField("prefix" , Prefix , "String", Parameters);
OPI_Tools.AddField("list-type" , 2 , String_, Parameters);
OPI_Tools.AddField("max-keys" , 250 , String_, Parameters);
OPI_Tools.AddField("continuation-token", PageToken, String_, Parameters);
OPI_Tools.AddField("prefix" , Prefix , String_, Parameters);
URL = URL + OPI_Tools.RequestParametersToString(Parameters);
BasicData_.Insert("URL", URL);
@ -1148,6 +1155,8 @@ Function ListObjectVersions(Val Bucket
, Val Version = ""
, Val Headers = Undefined) Export
String_ = "String";
BasicData_ = OPI_Tools.CopyCollection(BasicData);
URL = GetServiceURL(BasicData_);
@ -1155,9 +1164,9 @@ Function ListObjectVersions(Val Bucket
URL = URL + "?versions";
Parameters = New Map;
OPI_Tools.AddField("max-keys" , 250 , "String", Parameters);
OPI_Tools.AddField("version-id-marker", Version , "String", Parameters);
OPI_Tools.AddField("prefix" , Prefix , "String", Parameters);
OPI_Tools.AddField("max-keys" , 250 , String_, Parameters);
OPI_Tools.AddField("version-id-marker", Version , String_, Parameters);
OPI_Tools.AddField("prefix" , Prefix , String_, Parameters);
URL = URL + OPI_Tools.RequestParametersToString(Parameters, , False);
BasicData_.Insert("URL", URL);
@ -1301,10 +1310,11 @@ Function CreateURLSignature(Val DataStructure, Val Name, Val Method, Val Expire,
ParametersString = OPI_Tools.RequestParametersToString(URLParameters);
ParametersString = Right(ParametersString, StrLen(ParametersString) - 1);
RequestTemplate = "";
PartsAmount = 6;
For N = 1 To 6 Do
For N = 1 To PartsAmount Do
RequestTemplate = RequestTemplate + "%" + String(N) + ?(N = 6, "", Chars.LF);
RequestTemplate = RequestTemplate + "%" + String(N) + ?(N = PartsAmount, "", Chars.LF);
EndDo;
@ -1382,12 +1392,13 @@ Function CreateCanonicalRequest(Val Request, Val Connection, Val Method)
RequestTemplate = "";
RequestBody = OPI_Tools.GetRequestBody(Request);
HashSum = OPI_Cryptography.Hash(RequestBody, HashFunction.SHA256);
PartsAmount = 6;
Request.Headers.Insert("x-amz-content-sha256", Lower(GetHexStringFromBinaryData(HashSum)));
For N = 1 To 6 Do
For N = 1 To PartsAmount Do
RequestTemplate = RequestTemplate + "%" + String(N) + ?(N = 6, "", Chars.LF);
RequestTemplate = RequestTemplate + "%" + String(N) + ?(N = PartsAmount, "", Chars.LF);
EndDo;
@ -1432,14 +1443,15 @@ Function CreateSignatureString(Val CanonicalRequest, Val Scope, Val CurrentDate)
StringTemplate = "";
Algorithm = "AWS4-HMAC-SHA256";
DateISO = OPI_Tools.ISOTimestamp(CurrentDate);
PartsAmount = 4;
CanonicalRequest = GetBinaryDataFromString(CanonicalRequest);
CanonicalRequest = OPI_Cryptography.Hash(CanonicalRequest, HashFunction.SHA256);
CanonicalRequest = Lower(GetHexStringFromBinaryData(CanonicalRequest));
For N = 1 To 4 Do
For N = 1 To PartsAmount Do
StringTemplate = StringTemplate + "%" + String(N) + ?(N = 4, "", Chars.LF);
StringTemplate = StringTemplate + "%" + String(N) + ?(N = PartsAmount, "", Chars.LF);
EndDo;
@ -1658,6 +1670,7 @@ Function GetObjectInChunks(Val BasicData
ChunkSize = Sizes["chunk"];
HeaderTemplate = "bytes=%1-%2";
ChunkStart = 0;
Attempts = 3;
HeadersArray = New Array;
@ -1684,17 +1697,12 @@ Function GetObjectInChunks(Val BasicData
EndIf;
If ValueIsFilled(SavePath) Then
StreamOfFile = New FileStream(SavePath, FileOpenMode.Create);
Else
StreamOfFile = New MemoryStream();
EndIf;
FileWriter = New DataWriter(StreamOfFile);
StreamOfFile = OPI_Tools.CreateStream(SavePath);
FileWriter = New DataWriter(StreamOfFile);
For Each CurrentSet In HeadersArray Do
For N = 1 To 3 Do
For N = 1 To Attempts Do
Try
@ -1719,13 +1727,13 @@ Function GetObjectInChunks(Val BasicData
Except
If N = 3 Then
If N = Attempts Then
// !OInt Message(ErrorDescription());
Raise "Failed to retrieve the file!";
Else
// !OInt Message("Chunk upload error " + String(N) + "/3");
// !OInt Message("Chunk upload error " + String(N) + "/" + String(Attempts));
Continue;
EndIf;
@ -1737,13 +1745,9 @@ Function GetObjectInChunks(Val BasicData
FileWriter.Close();
If TypeOf(StreamOfFile) = Type("MemoryStream") Then
Return StreamOfFile.CloseAndGetBinaryData();
Else
StreamOfFile.Close();
ResponseFile = New File(SavePath);
Return ResponseFile.FullName;
EndIf;
ReceivedObject = CloseStreamReceiveData(StreamOfFile, SavePath);
Return ReceivedObject;
EndFunction
@ -1781,7 +1785,6 @@ Function UploadObjectInParts(Val Name
BytesRead = 0;
PartNumber = 1;
If Not OPI_Tools.CollectionFieldExists(UploadStart, FieldID, UploadID) Then
Return UploadStart;
EndIf;
@ -1790,13 +1793,16 @@ Function UploadObjectInParts(Val Name
SourceStream = DataReader.SourceStream();
Response = New Map;
TagsArray = New Array;
Error = False;
Error = False;
Attempts = 3;
LastSuccessCode = 299;
WHile BytesRead < TotalSize Do
Try
For N = 1 To Attempts Do
For N = 1 To 3 Do
Try
Result = DataReader.Read(ChunkSize);
CurrentData = Result.GetBinaryData();
@ -1812,7 +1818,7 @@ Function UploadObjectInParts(Val Name
, PartNumber
, CurrentData);
If Response["status"] > 299 Then
If Response["status"] > LastSuccessCode Then
Raise "The server returned the status " + String(Response["status"]);
EndIf;
@ -1832,27 +1838,27 @@ Function UploadObjectInParts(Val Name
Break;
EndDo;
Except
Except
If N = Attempts Then
If N = 3 Then
// !OInt Message(OPI_Tools.JSONString(Response));
// !OInt Message("Failed to upload part of the file! Aborted upload wiht ID:" + UploadID + "...");
// !OInt Message(OPI_Tools.JSONString(Response));
// !OInt Message("Failed to upload part of the file! Aborted upload wiht ID:" + UploadID + "...");
Error = True;
Break;
Error = True;
Break;
Else
Else
// !OInt Message("Chunk upload error " + String(N) + "/" + String(Attempts));
// !OInt Message(ErrorDescription());
Continue;
// !OInt Message("Chunk upload error " + String(N) + "/3");
// !OInt Message(ErrorDescription());
Continue;
EndIf;
EndIf;
EndTry;
EndTry;
EndDo;
PartNumber = PartNumber + 1;
@ -1870,10 +1876,11 @@ EndFunction
Function FormResponse(Val Response, Val ExpectedBinary = False)
Status = Response.StatusCode;
Headers = Response.Headers;
Status = Response.StatusCode;
Headers = Response.Headers;
LastSuccessCode = 299;
If Not ExpectedBinary Or Status > 299 Then
If Not ExpectedBinary Or Status > LastSuccessCode Then
ResponseData = New Structure;
BodyData = New Structure;
@ -1909,12 +1916,14 @@ Function FormBucketURL(Val URL, Val Name, Val Directory)
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetBoolean(Directory);
Indication = "://";
If Directory Then
URL = URL + Name;
Else
If StrFind(URL, "://") Then
URL = StrReplace(URL, "://", "://" + Name + ".");
If StrFind(URL, Indication) Then
URL = StrReplace(URL, Indication, Indication + Name + ".");
Else
URL = Name + "." + URL;
EndIf;
@ -1995,6 +2004,18 @@ Function GetContentSize(Val Entity)
EndFunction
Function CloseStreamReceiveData(Val StreamOfFile, Val SavePath)
If TypeOf(StreamOfFile) = Type("MemoryStream") Then
Return StreamOfFile.CloseAndGetBinaryData();
Else
StreamOfFile.Close();
ResponseFile = New File(SavePath);
Return ResponseFile.FullName;
EndIf;
EndFunction
Procedure CheckBasicData(BasicData)
ErrorText = "Error of obtaining authorization data from the structure";

View File

@ -32,6 +32,7 @@
// BSLLS:UsingServiceTag-off
// BSLLS:ExecuteExternalCodeInCommonModule-off
// BSLLS:DuplicateStringLiteral-off
// BSLLS:MagicNumber-off
//@skip-check use-non-recommended-method
//@skip-check module-structure-top-region
@ -2046,6 +2047,7 @@ Function GetCommonModule(Val Name)
Return Module;
EndFunction
// BSLLS:CognitiveComplexity-off
Function GetCLIFormedValue(Val Value, Val Embedded = False)
CurrentType = TypeOf(Value);
@ -2081,8 +2083,12 @@ Function GetCLIFormedValue(Val Value, Val Embedded = False)
Else
// BSLLS:MissingTemporaryFileDeletion-off
//@skip-check missing-temporary-file-deletion
TFN = GetTempFileName("json");
// BSLLS:MissingTemporaryFileDeletion-on
Stream = New FileStream(TFN, FileOpenMode.Create);
JSONWriter.OpenStream(Stream);
@ -2118,6 +2124,7 @@ Function GetCLIFormedValue(Val Value, Val Embedded = False)
Return Value;
EndFunction
// BSLLS:CognitiveComplexity-on
Function FormOption(Val Value, Val Name, Val Embedded = False)

View File

@ -191,7 +191,11 @@ Function CreateRequest(Val Address, Val AdditionalHeaders = "", Val DataType = "
EndFunction
Function CreateConnection(Val Host, Val Safe = True, Val User = "", Val Password = "", Val Port = "") Export
Function CreateConnection(Val Host
, Val Safe = True
, Val User = ""
, Val Password = ""
, Val Port = "") Export
If Not ValueIsFilled(Port) Then
Port = ?(Safe, 443, 80);
@ -408,7 +412,10 @@ Function JsonToStructure(Val Text) Export
EndFunction
Function JSONString(Val Data, Val Escaping = "None", Val LineBreaks = True, Val DoubleQuotes = True) Export
Function JSONString(Val Data
, Val Escaping = "None"
, Val LineBreaks = True
, Val DoubleQuotes = True) Export
LineBreak = ?(LineBreaks, JSONLineBreak.Windows, JSONLineBreak.None);
@ -825,6 +832,18 @@ Function GetRequestBody(Val Request) Export
EndFunction
Function CreateStream(Val FilePath = Undefined) Export
If ValueIsFilled(FilePath) Then
StreamOfFile = New FileStream(FilePath, FileOpenMode.Create);
Else
StreamOfFile = New MemoryStream();
EndIf;
Return StreamOfFile;
EndFunction
Procedure ValueToArray(Value) Export
If TypeOf(Value) = Type("Array") Then

View File

@ -61,7 +61,7 @@
Функция ПолучитьСтруктуруДанных(Знач URL, Знач AccessKey, Знач SecretKey, Знач Region, Знач Service = "s3") Экспорт
Строка_ = "Строка";
СтруктураАвторизации = Новый Структура;
OPI_Инструменты.ДобавитьПоле("URL" , URL , Строка_, СтруктураАвторизации);
OPI_Инструменты.ДобавитьПоле("AccessKey", AccessKey, Строка_, СтруктураАвторизации);
@ -505,7 +505,7 @@
, Знач Заголовки = Неопределено) Экспорт
Строка_ = "Строка";
ОсновныеДанные_ = OPI_Инструменты.КопироватьКоллекцию(ОсновныеДанные);
Параметры = Новый Соответствие;
@ -1113,7 +1113,7 @@
, Знач Заголовки = Неопределено) Экспорт
Строка_ = "Строка";
ОсновныеДанные_ = OPI_Инструменты.КопироватьКоллекцию(ОсновныеДанные);
URL = ПолучитьURLСервиса(ОсновныеДанные_);
@ -1156,7 +1156,7 @@
, Знач Заголовки = Неопределено) Экспорт
Строка_ = "Строка";
ОсновныеДанные_ = OPI_Инструменты.КопироватьКоллекцию(ОсновныеДанные);
URL = ПолучитьURLСервиса(ОсновныеДанные_);
@ -1666,11 +1666,11 @@
, Знач ПутьСохранения
, Знач Размеры)
ОбщийРазмер = Размеры["object"];
РазмерУчастка = Размеры["chunk"];
ОбщийРазмер = Размеры["object"];
РазмерУчастка = Размеры["chunk"];
ШаблонЗаголовка = "bytes=%1-%2";
НачалоУчастка = 0;
Попытки = 3;
НачалоУчастка = 0;
Попытки = 3;
МассивЗаголовков = Новый Массив;
@ -1746,7 +1746,7 @@
ЗаписьФайла.Закрыть();
ПолученныйОбъект = ЗакрытьПотокИПолучитьДанные(ПотокФайла, ПутьСохранения);
Возврат ПолученныйОбъект;
КонецФункции
@ -1793,7 +1793,7 @@
ИсходныйПоток = ЧтениеДанных.ИсходныйПоток();
Ответ = Новый Соответствие;
МассивТегов = Новый Массив;
Ошибка = Ложь;
Попытки = 3;
ПоследнийКодУспеха = 299;
@ -1803,7 +1803,7 @@
Для Н = 1 По Попытки Цикл
Попытка
Результат = ЧтениеДанных.Прочитать(РазмерУчастка);
ТекущиеДанные = Результат.ПолучитьДвоичныеДанные();
@ -1859,7 +1859,7 @@
КонецПопытки;
КонецЦикла;
НомерЧасти = НомерЧасти + 1;
КонецЦикла;
@ -1915,7 +1915,7 @@
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
OPI_ПреобразованиеТипов.ПолучитьБулево(Каталог);
Признак = "://";
Если Каталог Тогда
@ -2013,7 +2013,7 @@
ФайлОтвета = Новый Файл(ПутьСохранения);
Возврат ФайлОтвета.ПолноеИмя;
КонецЕсли;
КонецФункции
Процедура ПроверитьОсновныеДанные(ОсновныеДанные)

View File

@ -2041,9 +2041,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции
@ -2083,12 +2083,12 @@
Иначе
// BSLLS:MissingTemporaryFileDeletion-off
// BSLLS:MissingTemporaryFileDeletion-off
//@skip-check missing-temporary-file-deletion
ИВТ = ПолучитьИмяВременногоФайла("json");
// BSLLS:MissingTemporaryFileDeletion-on
Поток = Новый ФайловыйПоток(ИВТ, РежимОткрытияФайла.Создать);
ЗаписьJSON.ОткрытьПоток(Поток);

View File

@ -192,10 +192,10 @@
КонецФункции
Функция СоздатьСоединение(Знач Сервер
, Знач Защищенное = Истина
, Знач Защищенное = Истина
, Знач Пользователь = ""
, Знач Пароль = ""
, Знач Порт = "") Экспорт
, Знач Пароль = ""
, Знач Порт = "") Экспорт
Если Не ЗначениеЗаполнено(Порт) Тогда
Порт = ?(Защищенное, 443, 80);
@ -413,8 +413,8 @@
КонецФункции
Функция JSONСтрокой(Знач Данные
, Знач Экранирование = "Нет"
, Знач ПереносСтрок = Истина
, Знач Экранирование = "Нет"
, Знач ПереносСтрок = Истина
, Знач ДвойныеКавычки = Истина) Экспорт
Перенос = ?(ПереносСтрок, ПереносСтрокJSON.Windows, ПереносСтрокJSON.Нет);
@ -839,9 +839,9 @@
Иначе
ПотокФайла = Новый ПотокВПамяти();
КонецЕсли;
Возврат ПотокФайла;
КонецФункции
Процедура ЗначениеВМассив(Значение) Экспорт

View File

@ -61,7 +61,7 @@
Функция ПолучитьСтруктуруДанных(Знач URL, Знач AccessKey, Знач SecretKey, Знач Region, Знач Service = "s3") Экспорт
Строка_ = "Строка";
СтруктураАвторизации = Новый Структура;
OPI_Инструменты.ДобавитьПоле("URL" , URL , Строка_, СтруктураАвторизации);
OPI_Инструменты.ДобавитьПоле("AccessKey", AccessKey, Строка_, СтруктураАвторизации);
@ -505,7 +505,7 @@
, Знач Заголовки = Неопределено) Экспорт
Строка_ = "Строка";
ОсновныеДанные_ = OPI_Инструменты.КопироватьКоллекцию(ОсновныеДанные);
Параметры = Новый Соответствие;
@ -1113,7 +1113,7 @@
, Знач Заголовки = Неопределено) Экспорт
Строка_ = "Строка";
ОсновныеДанные_ = OPI_Инструменты.КопироватьКоллекцию(ОсновныеДанные);
URL = ПолучитьURLСервиса(ОсновныеДанные_);
@ -1156,7 +1156,7 @@
, Знач Заголовки = Неопределено) Экспорт
Строка_ = "Строка";
ОсновныеДанные_ = OPI_Инструменты.КопироватьКоллекцию(ОсновныеДанные);
URL = ПолучитьURLСервиса(ОсновныеДанные_);
@ -1666,11 +1666,11 @@
, Знач ПутьСохранения
, Знач Размеры)
ОбщийРазмер = Размеры["object"];
РазмерУчастка = Размеры["chunk"];
ОбщийРазмер = Размеры["object"];
РазмерУчастка = Размеры["chunk"];
ШаблонЗаголовка = "bytes=%1-%2";
НачалоУчастка = 0;
Попытки = 3;
НачалоУчастка = 0;
Попытки = 3;
МассивЗаголовков = Новый Массив;
@ -1746,7 +1746,7 @@
ЗаписьФайла.Закрыть();
ПолученныйОбъект = ЗакрытьПотокИПолучитьДанные(ПотокФайла, ПутьСохранения);
Возврат ПолученныйОбъект;
КонецФункции
@ -1793,7 +1793,7 @@
ИсходныйПоток = ЧтениеДанных.ИсходныйПоток();
Ответ = Новый Соответствие;
МассивТегов = Новый Массив;
Ошибка = Ложь;
Попытки = 3;
ПоследнийКодУспеха = 299;
@ -1803,7 +1803,7 @@
Для Н = 1 По Попытки Цикл
Попытка
Результат = ЧтениеДанных.Прочитать(РазмерУчастка);
ТекущиеДанные = Результат.ПолучитьДвоичныеДанные();
@ -1859,7 +1859,7 @@
КонецПопытки;
КонецЦикла;
НомерЧасти = НомерЧасти + 1;
КонецЦикла;
@ -1915,7 +1915,7 @@
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
OPI_ПреобразованиеТипов.ПолучитьБулево(Каталог);
Признак = "://";
Если Каталог Тогда
@ -2013,7 +2013,7 @@
ФайлОтвета = Новый Файл(ПутьСохранения);
Возврат ФайлОтвета.ПолноеИмя;
КонецЕсли;
КонецФункции
Процедура ПроверитьОсновныеДанные(ОсновныеДанные)

View File

@ -192,10 +192,10 @@
КонецФункции
Функция СоздатьСоединение(Знач Сервер
, Знач Защищенное = Истина
, Знач Защищенное = Истина
, Знач Пользователь = ""
, Знач Пароль = ""
, Знач Порт = "") Экспорт
, Знач Пароль = ""
, Знач Порт = "") Экспорт
Если Не ЗначениеЗаполнено(Порт) Тогда
Порт = ?(Защищенное, 443, 80);
@ -413,8 +413,8 @@
КонецФункции
Функция JSONСтрокой(Знач Данные
, Знач Экранирование = "Нет"
, Знач ПереносСтрок = Истина
, Знач Экранирование = "Нет"
, Знач ПереносСтрок = Истина
, Знач ДвойныеКавычки = Истина) Экспорт
Перенос = ?(ПереносСтрок, ПереносСтрокJSON.Windows, ПереносСтрокJSON.Нет);
@ -839,9 +839,9 @@
Иначе
ПотокФайла = Новый ПотокВПамяти();
КонецЕсли;
Возврат ПотокФайла;
КонецФункции
Процедура ЗначениеВМассив(Значение) Экспорт

View File

@ -2083,12 +2083,12 @@
Иначе
// BSLLS:MissingTemporaryFileDeletion-off
// BSLLS:MissingTemporaryFileDeletion-off
//@skip-check missing-temporary-file-deletion
ИВТ = ПолучитьИмяВременногоФайла("json");
// BSLLS:MissingTemporaryFileDeletion-on
Поток = Новый ФайловыйПоток(ИВТ, РежимОткрытияФайла.Создать);
ЗаписьJSON.ОткрытьПоток(Поток);