Innovenergy_trunk/csharp/App/Backend/S3/S3Cmd.cs

89 lines
2.6 KiB
C#
Raw Normal View History

2023-03-23 12:28:55 +00:00
using System.Diagnostics.CodeAnalysis;
using CliWrap;
using CliWrap.Buffered;
using InnovEnergy.Lib.Utils;
namespace InnovEnergy.App.Backend.S3;
2023-03-23 12:28:55 +00:00
[SuppressMessage("ReSharper", "UnusedAutoPropertyAccessor.Global")]
public class S3Cmd
{
private static readonly Command Python = Cli.Wrap("python3");
private const String? S3CmdPath = "Resources/s3cmd.py";
private const String S3Prefix = "s3://";
2023-03-23 12:28:55 +00:00
public String Key { get; init;}
public String Secret { get; init;}
// private String?[] DefaultArgs { get; }
// ReSharper disable StringLiteralTypo
// ReSharper enable StringLiteralTypo
2023-03-23 12:28:55 +00:00
[Obsolete("Only to be used by Json-Deserializer")] public S3Cmd()
{
}
2023-03-23 12:28:55 +00:00
// public S3Cmd(String? key, String? secret)
// {
// DefaultArgs = new[]
// {
// S3CmdPath,
// "--access_key", key,
// "--secret_key", secret,
// };
// }
public async Task<String> SignUrl(String bucketName, TimeSpan validity)
{
var result = await Run(bucketName, "signurl", $"+{validity.TotalSeconds}");
return result
.StandardOutput
.Replace("\n", "")
.Replace(" ", "");
}
public async Task<Boolean> CreateBucket(String bucketName)
{
var cors = @"<?xml version=""1.0"" ?>
<CORSConfiguration xmlns=""http://s3.amazonaws.com/doc/2006-03-01/"">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>";
2023-07-13 08:16:31 +00:00
var result = await Run(bucketName, "mb");
var setCors = await Run(bucketName, "PutBucketCors", cors);
return result.ExitCode == 0 && setCors.ExitCode == 0;
}
public async Task<Boolean> DeleteBucket(String bucketName)
{
var result = await Run(bucketName, "rb");
return result.ExitCode == 0;
}
private Task<BufferedCommandResult> Run(String bucketName, String operation, params String[] optionalArgs)
{
2023-03-23 12:28:55 +00:00
var credentials = new String[]
{
S3CmdPath,
"--access_key", Key,
"--secret_key", Secret,
};
var args = credentials
.Append(operation)
.Append(bucketName.EnsureStartsWith(S3Prefix))
.Concat(optionalArgs);
return Python
2023-03-23 12:28:55 +00:00
.WithArguments(args)
.ExecuteBufferedAsync();
}
}