aboutsummaryrefslogtreecommitdiff
path: root/backend/api
diff options
context:
space:
mode:
Diffstat (limited to 'backend/api')
-rw-r--r--backend/api/api/.gitignore1
-rw-r--r--backend/api/api/Controllers/FileController.cs51
-rw-r--r--backend/api/api/Models/FileModel.cs2
-rw-r--r--backend/api/api/Program.cs2
-rw-r--r--backend/api/api/Services/FileService.cs18
-rw-r--r--backend/api/api/Services/IFileService.cs2
-rw-r--r--backend/api/api/Services/TempFileService.cs33
-rw-r--r--backend/api/api/api.csproj2
8 files changed, 109 insertions, 2 deletions
diff --git a/backend/api/api/.gitignore b/backend/api/api/.gitignore
index 242abea5..9a89b63c 100644
--- a/backend/api/api/.gitignore
+++ b/backend/api/api/.gitignore
@@ -5,6 +5,7 @@
##Ignore contents for UploadedFiles Folder
UploadedFiles/*
+TempFiles/*
# User-specific files
*.rsuser
diff --git a/backend/api/api/Controllers/FileController.cs b/backend/api/api/Controllers/FileController.cs
index 3bfdad93..fb3df61a 100644
--- a/backend/api/api/Controllers/FileController.cs
+++ b/backend/api/api/Controllers/FileController.cs
@@ -74,7 +74,9 @@ namespace api.Controllers
FileModel fileModel= new FileModel();
fileModel.path=fullPath;
fileModel.username=username;
- fileModel=_fileservice.Create(fileModel);
+ fileModel.date = DateTime.Now.ToUniversalTime();
+ fileModel =_fileservice.Create(fileModel);
+
return Ok(fileModel);
}
@@ -107,6 +109,53 @@ namespace api.Controllers
}
+ [HttpPost("TempUpload")]
+ public async Task<ActionResult<string>> TempUpload([FromForm] IFormFile file)
+ {
+
+ //get username from jwtToken
+ string username = "";
+ //Check filetype
+ var filename = file.FileName;
+ var ext = Path.GetExtension(filename).ToLowerInvariant();
+ var name = Path.GetFileNameWithoutExtension(filename).ToLowerInvariant();
+ if (string.IsNullOrEmpty(ext) || !permittedExtensions.Contains(ext))
+ {
+ return BadRequest("Wrong file type");
+ }
+ var folderPath = Path.Combine(Directory.GetCurrentDirectory(), "TempFiles");
+ //Check Directory
+ if (!Directory.Exists(folderPath))
+ {
+ Directory.CreateDirectory(folderPath);
+ }
+ //Index file if same filename
+ var fullPath = Path.Combine(folderPath, filename);
+ int i = 0;
+
+ while (System.IO.File.Exists(fullPath))
+ {
+ i++;
+ fullPath = Path.Combine(folderPath, name + i.ToString() + ext);
+ }
+
+
+ //Write file
+ using (var stream = new FileStream(fullPath, FileMode.Create))
+ {
+ await file.CopyToAsync(stream);
+ }
+ FileModel fileModel = new FileModel();
+ fileModel.path = fullPath;
+ fileModel.username = username;
+ fileModel.date = DateTime.Now.ToUniversalTime();
+ fileModel = _fileservice.Create(fileModel);
+
+
+ return Ok(fileModel);
+ }
+
+
}
}
diff --git a/backend/api/api/Models/FileModel.cs b/backend/api/api/Models/FileModel.cs
index 9e7c8b5d..30211372 100644
--- a/backend/api/api/Models/FileModel.cs
+++ b/backend/api/api/Models/FileModel.cs
@@ -10,5 +10,7 @@ namespace api.Models
public string _id { get; set; }
public string username { get; set; }
public string path { get; set; }
+ [BsonDateTimeOptions(Kind = DateTimeKind.Utc)]
+ public DateTime date { get; set; }
}
}
diff --git a/backend/api/api/Program.cs b/backend/api/api/Program.cs
index 65399bdf..c8cf0784 100644
--- a/backend/api/api/Program.cs
+++ b/backend/api/api/Program.cs
@@ -34,6 +34,8 @@ builder.Services.AddScoped<IPredictorService, PredictorService>();
builder.Services.AddScoped<IFileService, FileService>();
+builder.Services.AddHostedService<TempFileService>();
+
//Add Authentication
builder.Services.AddAuthentication(
JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options => {
diff --git a/backend/api/api/Services/FileService.cs b/backend/api/api/Services/FileService.cs
index e68a0fe3..7b101af5 100644
--- a/backend/api/api/Services/FileService.cs
+++ b/backend/api/api/Services/FileService.cs
@@ -30,5 +30,23 @@ namespace api.Services
return null;
return file.path;
}
+ public void Delete(string id)
+ {
+ _file.DeleteOne(file => file._id == id);
+
+ }
+ public void DeleteTempFiles()
+ {
+ List<FileModel> files = _file.Find(file => file.username == "").ToList();
+ foreach (var file in files)
+ {
+ if ((DateTime.Now.ToUniversalTime() - file.date).TotalMinutes >= 2)
+ {
+ Delete(file._id);
+ if (File.Exists(file.path))
+ File.Delete(file.path);
+ }
+ }
+ }
}
}
diff --git a/backend/api/api/Services/IFileService.cs b/backend/api/api/Services/IFileService.cs
index 7446e283..66bfc93d 100644
--- a/backend/api/api/Services/IFileService.cs
+++ b/backend/api/api/Services/IFileService.cs
@@ -5,6 +5,8 @@ namespace api.Services
public interface IFileService
{
FileModel Create(FileModel file);
+ void Delete(string id);
+ void DeleteTempFiles();
string GetFilePath(string id, string username);
}
} \ No newline at end of file
diff --git a/backend/api/api/Services/TempFileService.cs b/backend/api/api/Services/TempFileService.cs
new file mode 100644
index 00000000..300c81ee
--- /dev/null
+++ b/backend/api/api/Services/TempFileService.cs
@@ -0,0 +1,33 @@
+using api.Interfaces;
+using MongoDB.Driver;
+
+namespace api.Services
+{
+ public class TempFileService : IHostedService
+ {
+ private readonly FileService _fileService;
+ private Timer _timer;
+
+ public TempFileService(IUserStoreDatabaseSettings settings, IMongoClient mongoClient)
+ {
+ _fileService = new FileService(settings,mongoClient);
+ }
+ public Task StartAsync(CancellationToken cancellationToken)
+ {
+ _timer = new Timer(RemoveTempFiles,null,TimeSpan.Zero,TimeSpan.FromMinutes(1));
+
+
+ return Task.CompletedTask;
+ }
+
+ public Task StopAsync(CancellationToken cancellationToken)
+ {
+ _timer?.Change(Timeout.Infinite, 0);
+ return Task.CompletedTask;
+ }
+ private void RemoveTempFiles(object state)
+ {
+ _fileService.DeleteTempFiles();
+ }
+ }
+}
diff --git a/backend/api/api/api.csproj b/backend/api/api/api.csproj
index f63407ca..658f7c05 100644
--- a/backend/api/api/api.csproj
+++ b/backend/api/api/api.csproj
@@ -21,8 +21,8 @@
</ItemGroup>
<ItemGroup>
+ <Folder Include="TempFiles\" />
<Folder Include="UploadedFiles\" />
- <Folder Include="UploadedFiles\tester1\" />
</ItemGroup>
</Project>