aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Ljubisavljevic <ivan996sk@gmail.com>2022-04-04 19:43:30 +0200
committerIvan Ljubisavljevic <ivan996sk@gmail.com>2022-04-04 19:43:30 +0200
commit4f21c365006b3a737ebf8d1339922af1fd25a6d6 (patch)
tree070a31673a7ddf51256c64b9374e91f4a2efe57b
parent15a842c76f2d2200b9e5d1fd88f9cc755bac92cb (diff)
Odradjen upload i download h5 fajla. Sitne izmene oko prediktora #75 #66
-rw-r--r--backend/api/api/Controllers/FileController.cs103
-rw-r--r--backend/api/api/Controllers/PredictorController.cs4
-rw-r--r--backend/api/api/Models/FileModel.cs1
-rw-r--r--backend/api/api/Services/PredictorService.cs2
-rw-r--r--frontend/src/app/_pages/browse-predictors/browse-predictors.component.html2
-rw-r--r--frontend/src/app/_pages/browse-predictors/browse-predictors.component.ts2
-rw-r--r--frontend/src/app/_pages/predict/predict.component.html17
7 files changed, 119 insertions, 12 deletions
diff --git a/backend/api/api/Controllers/FileController.cs b/backend/api/api/Controllers/FileController.cs
index 0fe8415b..d29c5676 100644
--- a/backend/api/api/Controllers/FileController.cs
+++ b/backend/api/api/Controllers/FileController.cs
@@ -4,6 +4,7 @@ using api.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Net.Http.Headers;
+
namespace api.Controllers
{
[Route("api/[controller]")]
@@ -11,6 +12,7 @@ namespace api.Controllers
public class FileController : ControllerBase
{
private string[] permittedExtensions = { ".csv" };
+ private string[] permittedExtensionsH5 = { ".h5" };//niz da bi dodali h4 itd
private readonly IConfiguration _configuration;
private IJwtToken _token;
private IFileService _fileservice;
@@ -22,6 +24,77 @@ namespace api.Controllers
}
+ [HttpPost("h5")]
+ [Authorize(Roles = "User,Guest")]
+ public async Task<ActionResult<string>> H5Upload([FromForm] IFormFile file)
+ {
+
+ //get username from jwtToken
+ string uploaderId;
+ string folderName;
+ var header = Request.Headers[HeaderNames.Authorization];
+ if (AuthenticationHeaderValue.TryParse(header, out var headerValue))
+ {
+
+ var scheme = headerValue.Scheme;
+ var parameter = headerValue.Parameter;
+ uploaderId = _token.TokenToId(parameter);
+ if (uploaderId == null)
+ return null;
+ }
+ else
+ return BadRequest();
+ if (uploaderId == "")
+ {
+ folderName = "TempFiles";
+ }
+ else
+ {
+ folderName = "UploadedFiles";
+ }
+
+
+ //Check filetype
+ var filename = file.FileName;
+ var ext = Path.GetExtension(filename).ToLowerInvariant();
+ var name = Path.GetFileNameWithoutExtension(filename).ToLowerInvariant();
+ if (string.IsNullOrEmpty(ext) || !permittedExtensionsH5.Contains(ext))
+ {
+ return BadRequest("Wrong file type");
+ }
+ var folderPath = Path.Combine(Directory.GetCurrentDirectory(), folderName, uploaderId);
+ //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.type = "h5";
+ fileModel.path = fullPath;
+ fileModel.uploaderId = uploaderId;
+ fileModel.date = DateTime.Now.ToUniversalTime();
+ fileModel = _fileservice.Create(fileModel);
+
+
+ return Ok(fileModel);
+ }
+
[HttpPost("Csv")]
[Authorize(Roles = "User,Guest")]
@@ -81,6 +154,7 @@ namespace api.Controllers
await file.CopyToAsync(stream);
}
FileModel fileModel= new FileModel();
+ fileModel.type = "csv";
fileModel.path=fullPath;
fileModel.uploaderId= uploaderId;
fileModel.date = DateTime.Now.ToUniversalTime();
@@ -90,6 +164,35 @@ namespace api.Controllers
return Ok(fileModel);
}
+
+ //msm generalno moze da se koristi Download samo
+ [HttpGet("downloadh5")]
+ [Authorize(Roles = "User,Guest")]
+ public async Task<ActionResult> DownloadH5(string id)
+ {
+ //Get Username
+ string uploaderId;
+ var header = Request.Headers[HeaderNames.Authorization];
+ if (AuthenticationHeaderValue.TryParse(header, out var headerValue))
+ {
+
+ var scheme = headerValue.Scheme;
+ var parameter = headerValue.Parameter;
+ uploaderId = _token.TokenToId(parameter);
+ if (uploaderId == null)
+ return null;
+ }
+ else
+ return BadRequest();
+
+ string filePath = _fileservice.GetFilePath(id, uploaderId);
+ if (filePath == null)
+ return BadRequest();
+
+ return File(System.IO.File.ReadAllBytes(filePath), "application/octet-stream", Path.GetFileName(filePath));
+
+ }
+
[HttpGet("Download")]
[Authorize(Roles = "User,Guest")]
public async Task<ActionResult> DownloadFile(string id)
diff --git a/backend/api/api/Controllers/PredictorController.cs b/backend/api/api/Controllers/PredictorController.cs
index cdc14632..d9609cc7 100644
--- a/backend/api/api/Controllers/PredictorController.cs
+++ b/backend/api/api/Controllers/PredictorController.cs
@@ -77,7 +77,7 @@ namespace api.Controllers
// GET api/<PredictorController>/getpredictor/{name}
[HttpGet("getpredictor/{id}")]
- [Authorize(Roles = "User")]
+ [Authorize(Roles = "User,Guest")]
public ActionResult<Predictor> GetPredictor(string id)
{
string username;
@@ -188,7 +188,7 @@ namespace api.Controllers
// POST api/<PredictorController>/usepredictor {predictor,inputs}
[HttpPost("usepredictor/{id}")]
- [Authorize(Roles = "User")]
+ [Authorize(Roles = "User,Guest")]
public ActionResult UsePredictor(String id, [FromBody] String[] inputs)
{
diff --git a/backend/api/api/Models/FileModel.cs b/backend/api/api/Models/FileModel.cs
index 1043309d..47b12110 100644
--- a/backend/api/api/Models/FileModel.cs
+++ b/backend/api/api/Models/FileModel.cs
@@ -8,6 +8,7 @@ namespace api.Models
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string _id { get; set; }
+ public string type { get; set; }
public string uploaderId { get; set; }
public string path { get; set; }
[BsonDateTimeOptions(Kind = DateTimeKind.Utc)]
diff --git a/backend/api/api/Services/PredictorService.cs b/backend/api/api/Services/PredictorService.cs
index 01bc8359..b15255ac 100644
--- a/backend/api/api/Services/PredictorService.cs
+++ b/backend/api/api/Services/PredictorService.cs
@@ -42,7 +42,7 @@ namespace api.Services
}
public Predictor GetPredictor(string username, string id)
{
- return _predictor.Find(predictor => predictor.username == username && predictor._id == id).FirstOrDefault();
+ return _predictor.Find(predictor => predictor._id == id && (predictor.username == username || predictor.isPublic == true)).FirstOrDefault();
}
//last private models
diff --git a/frontend/src/app/_pages/browse-predictors/browse-predictors.component.html b/frontend/src/app/_pages/browse-predictors/browse-predictors.component.html
index a4ab6e2c..7b3e1bdb 100644
--- a/frontend/src/app/_pages/browse-predictors/browse-predictors.component.html
+++ b/frontend/src/app/_pages/browse-predictors/browse-predictors.component.html
@@ -14,7 +14,7 @@
<div class="card-body">
<h3 class="card-title"><b>{{predictor.name}}</b></h3>
<p class="card-text">{{predictor.description}}</p>
- <a class="btn btn-primary" (click)="openPredictor(predictor._id)">Otvori</a>
+ <a class="btn btn-primary" (click)="openPredictor(predictor._id)">Iskoristi</a>
</div>
<div class="card-footer text-muted">
Kreirao: {{predictor.username}} <br>
diff --git a/frontend/src/app/_pages/browse-predictors/browse-predictors.component.ts b/frontend/src/app/_pages/browse-predictors/browse-predictors.component.ts
index 4f96fc36..891b3cab 100644
--- a/frontend/src/app/_pages/browse-predictors/browse-predictors.component.ts
+++ b/frontend/src/app/_pages/browse-predictors/browse-predictors.component.ts
@@ -20,7 +20,7 @@ export class BrowsePredictorsComponent implements OnInit {
ngOnInit(): void {
}
openPredictor(id:string):void{
- this.router.navigateByUrl('/predict?id='+id);
+ this.router.navigate(['predict/'+id]);
};
}
diff --git a/frontend/src/app/_pages/predict/predict.component.html b/frontend/src/app/_pages/predict/predict.component.html
index bf4d9a1e..4516fbb4 100644
--- a/frontend/src/app/_pages/predict/predict.component.html
+++ b/frontend/src/app/_pages/predict/predict.component.html
@@ -43,18 +43,21 @@
</div>
<br>
<br>
-
+ <label for="type" class="form-check-label" ><b>Informacije o prediktoru</b></label>
<div class="col-5 mt-2">
- <label for="type" class="form-check-label">Da li je prediktor javan?</label>
- <input class="mx-3 form-check-input" type="checkbox" [(ngModel)]="predictor.isPublic"
- type="checkbox" value="">
+ <label for="type" class="form-check-label" *ngIf="predictor.isPublic">Prediktor je public.</label>
+ <label for="type" class="form-check-label" *ngIf="!predictor.isPublic">Prediktor nije public.</label>
+ <!--<input class="mx-3 form-check-input" type="checkbox" [(ngModel)]="predictor.isPublic"
+ type="checkbox" value="">-->
</div>
<div class="col-5 mt-2">
- <label for="type" class="form-check-label">Da li je dostupan za deljenje?</label>
- <input class="mx-3 form-check-input" type="checkbox" [(ngModel)]="predictor.accessibleByLink"
- type="checkbox" value="" >
+ <label for="type" class="form-check-label" *ngIf="predictor.accessibleByLink">Prediktor je dostupan za deljenje.</label>
+ <label for="type" class="form-check-label" *ngIf="!predictor.accessibleByLink">Prediktor nije dostupan za deljenje.</label>
+ <!--<input class="mx-3 form-check-input" type="checkbox" [(ngModel)]="predictor.accessibleByLink"
+ type="checkbox" value="" >-->
</div>
<br>
+ <br>
<div class="col-2">
<label for="dateCreated" class="col-form-label">Datum:</label>
<input type="text" class="form-control-plaintext" id="dateCreated" placeholder="--/--/--"