Browse Source

Added in memory storage service

pull/111/head
Teknikode 1 year ago
parent
commit
3d7fbd6054
  1. 1
      Configuration/StorageType.cs
  2. 2
      StorageService/LocalStorageService.cs
  3. 92
      StorageService/MemoryStorageService.cs
  4. 2
      StorageService/StorageServiceFactory.cs
  5. 2
      Utilities/Cryptography/AesCounterManaged.cs
  6. 16
      Utilities/FileHelper.cs

1
Configuration/StorageType.cs

@ -9,6 +9,7 @@ namespace Teknik.Configuration @@ -9,6 +9,7 @@ namespace Teknik.Configuration
public enum StorageType
{
Local,
InMemory,
S3
}
}

2
StorageService/LocalStorageService.cs

@ -44,7 +44,7 @@ namespace StorageService @@ -44,7 +44,7 @@ namespace StorageService
Directory.CreateDirectory(_config.LocalDirectory);
string filePath = GetFilePath(fileName);
AesCounterManaged.EncryptToFile(filePath, file, chunkSize, key, iv);
AesCounterManaged.EncryptToFile(file, filePath, chunkSize, key, iv);
}
public override void SaveFile(string fileName, Stream file)

92
StorageService/MemoryStorageService.cs

@ -0,0 +1,92 @@ @@ -0,0 +1,92 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Teknik.Configuration;
using Teknik.Utilities;
using Teknik.Utilities.Cryptography;
namespace StorageService
{
public class MemoryStorageService : StorageService
{
private static Dictionary<string, byte[]> _files;
private Dictionary<string, byte[]> Files
{
get
{
if (_files == null)
_files = new Dictionary<string, byte[]>();
return _files;
}
set
{
_files = value;
}
}
public MemoryStorageService(StorageConfig config) : base(config)
{
}
public override string GetUniqueFileName()
{
string filename = StringHelper.RandomString(_config.FileNameLength);
while (Files.ContainsKey(string.Format("{0}.{1}", filename, _config.FileExtension)))
{
filename = StringHelper.RandomString(_config.FileNameLength);
}
return filename;
}
public override List<string> GetFileNames()
{
return Files.Keys.ToList();
}
public override Stream GetFile(string fileName)
{
if (string.IsNullOrEmpty(fileName))
return null;
if (!Files.ContainsKey(fileName))
return null;
return new MemoryStream(Files[fileName]);
}
public override void SaveEncryptedFile(string fileName, Stream file, int chunkSize, byte[] key, byte[] iv)
{
if (file == null ||
Files.ContainsKey(fileName))
return;
using (var ms = new MemoryStream())
{
AesCounterManaged.EncryptToStream(file, ms, chunkSize, key, iv);
Files.Add(fileName, ms.ToArray());
}
}
public override void SaveFile(string fileName, Stream file)
{
if (file == null ||
Files.ContainsKey(fileName))
return;
using (var ms = new MemoryStream())
{
file.Seek(0, SeekOrigin.Begin);
file.CopyTo(ms);
Files.Add(fileName, ms.ToArray());
}
}
public override void DeleteFile(string fileName)
{
if (Files.ContainsKey(fileName))
Files.Remove(fileName);
}
}
}

2
StorageService/StorageServiceFactory.cs

@ -13,6 +13,8 @@ namespace StorageService @@ -13,6 +13,8 @@ namespace StorageService
{
switch (config.Type)
{
case StorageType.InMemory:
return new MemoryStorageService(config);
case StorageType.Local:
return new LocalStorageService(config);
case StorageType.S3:

2
Utilities/Cryptography/AesCounterManaged.cs

@ -76,7 +76,7 @@ namespace Teknik.Utilities.Cryptography @@ -76,7 +76,7 @@ namespace Teknik.Utilities.Cryptography
return output;
}
public static void EncryptToFile(string filePath, Stream input, int chunkSize, byte[] key, byte[] iv)
public static void EncryptToFile(Stream input, string filePath, int chunkSize, byte[] key, byte[] iv)
{
using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))

16
Utilities/FileHelper.cs

@ -15,23 +15,23 @@ namespace Teknik.Utilities @@ -15,23 +15,23 @@ namespace Teknik.Utilities
{
string filename = StringHelper.RandomString(length);
string subDir = filename[0].ToString();
path = Path.Combine(path, subDir);
if (!Directory.Exists(path))
var fullPath = Path.Combine(path, subDir);
if (!Directory.Exists(fullPath))
{
Directory.CreateDirectory(path);
Directory.CreateDirectory(fullPath);
}
while (File.Exists(Path.Combine(path, string.Format("{0}.{1}", filename, extension))))
while (File.Exists(Path.Combine(fullPath, string.Format("{0}.{1}", filename, extension))))
{
filename = StringHelper.RandomString(length);
subDir = filename[0].ToString();
path = Path.Combine(path, subDir);
if (!Directory.Exists(path))
fullPath = Path.Combine(path, subDir);
if (!Directory.Exists(fullPath))
{
Directory.CreateDirectory(path);
Directory.CreateDirectory(fullPath);
}
}
return Path.Combine(path, string.Format("{0}.{1}", filename, extension));
return Path.Combine(fullPath, string.Format("{0}.{1}", filename, extension));
}
return string.Empty;

Loading…
Cancel
Save