From 8a115f108427013bac502dae358d269df6d6be25 Mon Sep 17 00:00:00 2001 From: SuhorukovAnton Date: Wed, 7 Sep 2022 17:44:50 +0300 Subject: [PATCH] remove waste asc.adta.storage --- common/ASC.Data.Storage/Extensions.cs | 89 ------------ common/ASC.Data.Storage/ProgressStream.cs | 90 ------------ common/ASC.Data.Storage/S3/S3UploadGuard.cs | 145 -------------------- 3 files changed, 324 deletions(-) delete mode 100644 common/ASC.Data.Storage/Extensions.cs delete mode 100644 common/ASC.Data.Storage/ProgressStream.cs delete mode 100644 common/ASC.Data.Storage/S3/S3UploadGuard.cs diff --git a/common/ASC.Data.Storage/Extensions.cs b/common/ASC.Data.Storage/Extensions.cs deleted file mode 100644 index 22d23a823e..0000000000 --- a/common/ASC.Data.Storage/Extensions.cs +++ /dev/null @@ -1,89 +0,0 @@ -// (c) Copyright Ascensio System SIA 2010-2022 -// -// This program is a free software product. -// You can redistribute it and/or modify it under the terms -// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software -// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended -// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of -// any third-party rights. -// -// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty -// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see -// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html -// -// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021. -// -// The interactive user interfaces in modified source and object code versions of the Program must -// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3. -// -// Pursuant to Section 7(b) of the License you must retain the original Product logo when -// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under -// trademark law for use of our trademarks. -// -// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing -// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 -// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode - -namespace ASC.Data.Storage; - -public static class Extensions -{ - private const int BufferSize = 2048;//NOTE: set to 2048 to fit in minimum tcp window - - public static async Task IronReadStreamAsync(this IDataStore store, TempStream tempStream, string domain, string path, int tryCount) - { - var ms = tempStream.Create(); - await IronReadToStreamAsync(store, domain, path, tryCount, ms); - ms.Seek(0, SeekOrigin.Begin); - - return ms; - } - - public static Task IronReadToStreamAsync(this IDataStore store, string domain, string path, int tryCount, Stream readTo) - { - if (tryCount < 1) - { - throw new ArgumentOutOfRangeException(nameof(tryCount), "Must be greater or equal 1."); - } - - if (!readTo.CanWrite) - { - throw new ArgumentException("stream cannot be written", nameof(readTo)); - } - - - return InternalIronReadToStreamAsync(store, domain, path, tryCount, readTo); - } - - private static async Task InternalIronReadToStreamAsync(this IDataStore store, string domain, string path, int tryCount, Stream readTo) - { - var tryCurrent = 0; - var offset = 0; - - while (tryCurrent < tryCount) - { - try - { - tryCurrent++; - using var stream = await store.GetReadStreamAsync(domain, path, offset); - var buffer = new byte[BufferSize]; - int readed; - while ((readed = await stream.ReadAsync(buffer, 0, BufferSize)) > 0) - { - await readTo.WriteAsync(buffer, 0, readed); - offset += readed; - } - break; - } - catch (Exception ex) - { - if (tryCurrent >= tryCount) - { - throw new IOException("Can not read stream. Tries count: " + tryCurrent + ".", ex); - } - - Thread.Sleep(tryCount * 50); - } - } - } -} diff --git a/common/ASC.Data.Storage/ProgressStream.cs b/common/ASC.Data.Storage/ProgressStream.cs deleted file mode 100644 index 575bcf5bb6..0000000000 --- a/common/ASC.Data.Storage/ProgressStream.cs +++ /dev/null @@ -1,90 +0,0 @@ -// (c) Copyright Ascensio System SIA 2010-2022 -// -// This program is a free software product. -// You can redistribute it and/or modify it under the terms -// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software -// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended -// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of -// any third-party rights. -// -// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty -// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see -// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html -// -// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021. -// -// The interactive user interfaces in modified source and object code versions of the Program must -// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3. -// -// Pursuant to Section 7(b) of the License you must retain the original Product logo when -// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under -// trademark law for use of our trademarks. -// -// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing -// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 -// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode - -namespace ASC.Data.Storage; - -public class ProgressStream : Stream -{ - public override bool CanRead => _stream.CanRead; - public override bool CanSeek => _stream.CanSeek; - public override bool CanWrite => _stream.CanWrite; - public override long Length => _length; - public override long Position - { - get => _stream.Position; - set => _stream.Position = value; - } - - private readonly Stream _stream; - private long _length = long.MaxValue; - - public ProgressStream(Stream stream) - { - _stream = stream ?? throw new ArgumentNullException(nameof(stream)); - - try - { - _length = stream.Length; - } - catch (Exception) { } - } - - public event Action OnReadProgress; - - public void InvokeOnReadProgress(int progress) - { - OnReadProgress?.Invoke(this, progress); - } - - public override void Flush() - { - _stream.Flush(); - } - - public override long Seek(long offset, SeekOrigin origin) - { - return _stream.Seek(offset, origin); - } - - public override void SetLength(long value) - { - _stream.SetLength(value); - _length = value; - } - - public override int Read(byte[] buffer, int offset, int count) - { - var readed = _stream.Read(buffer, offset, count); - OnReadProgress(this, (int)(_stream.Position / (double)_length * 100)); - - return readed; - } - - public override void Write(byte[] buffer, int offset, int count) - { - _stream.Write(buffer, offset, count); - } -} diff --git a/common/ASC.Data.Storage/S3/S3UploadGuard.cs b/common/ASC.Data.Storage/S3/S3UploadGuard.cs deleted file mode 100644 index 242f14d13e..0000000000 --- a/common/ASC.Data.Storage/S3/S3UploadGuard.cs +++ /dev/null @@ -1,145 +0,0 @@ -// (c) Copyright Ascensio System SIA 2010-2022 -// -// This program is a free software product. -// You can redistribute it and/or modify it under the terms -// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software -// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended -// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of -// any third-party rights. -// -// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty -// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see -// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html -// -// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021. -// -// The interactive user interfaces in modified source and object code versions of the Program must -// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3. -// -// Pursuant to Section 7(b) of the License you must retain the original Product logo when -// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under -// trademark law for use of our trademarks. -// -// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing -// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 -// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode - -namespace ASC.Data.Storage.S3; - -public class S3UploadGuard -{ - public Configuration.Storage Storage { get; } - - private readonly CoreSettings _coreSettings; - private string _accessKey; - private string _secretAccessKey; - private string _bucket; - private string _region; - private bool _configErrors; - private bool _configured; - - public S3UploadGuard(CoreSettings coreSettings, Configuration.Storage storage) - { - _coreSettings = coreSettings; - Storage = storage; - } - - public void DeleteExpiredUploadsAsync(TimeSpan trustInterval) - { - var task = new Task(async () => - { - await DeleteExpiredUploadsActionAsync(trustInterval); - }, TaskCreationOptions.LongRunning); - - task.Start(); - } - - private Task DeleteExpiredUploadsActionAsync(TimeSpan trustInterval) - { - Configure(); - - if (_configErrors) - { - return Task.CompletedTask; - } - - return InternalDeleteExpiredUploadsActionAsync(trustInterval); - } - - private async Task InternalDeleteExpiredUploadsActionAsync(TimeSpan trustInterval) - { - using var s3 = GetClient(); - var nextKeyMarker = string.Empty; - var nextUploadIdMarker = string.Empty; - bool isTruncated; - - do - { - var request = new ListMultipartUploadsRequest { BucketName = _bucket }; - - if (!string.IsNullOrEmpty(nextKeyMarker)) - { - request.KeyMarker = nextKeyMarker; - } - - if (!string.IsNullOrEmpty(nextUploadIdMarker)) - { - request.UploadIdMarker = nextUploadIdMarker; - } - - var response = await s3.ListMultipartUploadsAsync(request); - - foreach (var u in response.MultipartUploads.Where(x => x.Initiated + trustInterval <= DateTime.UtcNow)) - { - await AbortMultipartUploadAsync(u, s3); - } - - isTruncated = response.IsTruncated; - nextKeyMarker = response.NextKeyMarker; - nextUploadIdMarker = response.NextUploadIdMarker; - } - while (isTruncated); - } - - private async Task AbortMultipartUploadAsync(MultipartUpload u, AmazonS3Client client) - { - var request = new AbortMultipartUploadRequest - { - BucketName = _bucket, - Key = u.Key, - UploadId = u.UploadId, - }; - - await client.AbortMultipartUploadAsync(request); - } - - private AmazonS3Client GetClient() - { - var s3Config = new AmazonS3Config { UseHttp = true, MaxErrorRetry = 3, RegionEndpoint = RegionEndpoint.GetBySystemName(_region) }; - - return new AmazonS3Client(_accessKey, _secretAccessKey, s3Config); - } - - private void Configure() - { - if (!_configured) - { - var handler = Storage.GetHandler("s3"); - if (handler != null) - { - var props = handler.GetProperties(); - _bucket = props["bucket"]; - _accessKey = props["acesskey"]; - _secretAccessKey = props["secretaccesskey"]; - _region = props["region"]; - } - _configErrors = string.IsNullOrEmpty(_coreSettings.BaseDomain) //localhost - || string.IsNullOrEmpty(_accessKey) - || string.IsNullOrEmpty(_secretAccessKey) - || string.IsNullOrEmpty(_bucket) - || string.IsNullOrEmpty(_region); - - _configured = true; - } - } -}