aboutsummaryrefslogtreecommitdiff
path: root/backend/api
diff options
context:
space:
mode:
Diffstat (limited to 'backend/api')
-rw-r--r--backend/api/api/Controllers/DatasetController.cs10
-rw-r--r--backend/api/api/Controllers/FileUploadController.cs41
-rw-r--r--backend/api/api/Models/JwtToken.cs24
-rw-r--r--backend/api/api/appsettings.json5
4 files changed, 59 insertions, 21 deletions
diff --git a/backend/api/api/Controllers/DatasetController.cs b/backend/api/api/Controllers/DatasetController.cs
index d022d6d2..fcebc4b0 100644
--- a/backend/api/api/Controllers/DatasetController.cs
+++ b/backend/api/api/Controllers/DatasetController.cs
@@ -32,12 +32,12 @@ namespace api.Controllers
var dataset = _datasetService.GetOneDataset(id, name);
if (dataset == null)
- return NotFound($"Dataset with name = {name} not found");
+ return NotFound($"Dataset with name = {name} or user with id = {id} not found");
return dataset;
}
- // POST api/<DatasetController>
+ // POST api/<DatasetController>/post
[HttpPost("post")]
public ActionResult<Dataset> Post([FromBody] Dataset dataset)
{
@@ -53,7 +53,7 @@ namespace api.Controllers
}
}
- // PUT api/<DatasetController>/5
+ // PUT api/<DatasetController>/{id}/{name}
[HttpPut("{id}/{name}")]
public ActionResult Put(string id, string name, [FromBody] Dataset dataset)
{
@@ -61,7 +61,7 @@ namespace api.Controllers
//ne mora da se proverava
if (existingDataset == null)
- return NotFound($"Dataset with name = {name} not found");
+ return NotFound($"Dataset with name = {name} or user with id = {id} not found");
_datasetService.Update(id, name, dataset);
return NoContent();
@@ -74,7 +74,7 @@ namespace api.Controllers
var dataset = _datasetService.GetOneDataset(id, name);
if (dataset == null)
- return NotFound($"Dataset with name = {name} not found");
+ return NotFound($"Dataset with name = {name} or user with id = {id} not found");
_datasetService.Delete(dataset.uploaderId,dataset.name);
diff --git a/backend/api/api/Controllers/FileUploadController.cs b/backend/api/api/Controllers/FileUploadController.cs
index 46e7f4f9..68ab814d 100644
--- a/backend/api/api/Controllers/FileUploadController.cs
+++ b/backend/api/api/Controllers/FileUploadController.cs
@@ -1,6 +1,8 @@
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Http;
+using System.Net.Http.Headers;
+using api.Models;
+using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.Net.Http.Headers;
namespace api.Controllers
{
[Route("api/[controller]")]
@@ -8,12 +10,37 @@ namespace api.Controllers
public class FileUploadController : ControllerBase
{
private string[] permittedExtensions = { ".csv" };
+ private readonly IConfiguration _configuration;
+ private JwtToken _token;
+ public FileUploadController(IConfiguration configuration)
+ {
+ _configuration = configuration;
+ _token = new JwtToken(configuration);
+
+ }
[HttpPost("Csv")]
[Authorize(Roles = "User")]
- public async Task<ActionResult<string>> CsvUpload([FromForm]IFormFile file,[FromForm]string username)//???Umesto username poslati jwt odakle se moze preuzeti username radi sigurnosti
+ public async Task<ActionResult<string>> CsvUpload([FromForm]IFormFile file)
{
+
+ //get username from jwtToken
+ string username;
+ var header = Request.Headers[HeaderNames.Authorization];
+ if (AuthenticationHeaderValue.TryParse(header, out var headerValue))
+ {
+
+ var scheme = headerValue.Scheme;
+ var parameter = headerValue.Parameter;
+ username = _token.TokenToUsername(parameter);
+ if (username == null)
+ return null;
+ }else
+ return BadRequest();
+
+
+ //Check filetype
var filename=file.FileName;
var ext=Path.GetExtension(filename).ToLowerInvariant();
var name = Path.GetFileNameWithoutExtension(filename).ToLowerInvariant();
@@ -21,11 +48,12 @@ namespace api.Controllers
return BadRequest("Wrong file type");
}
var folderPath=Path.Combine(Directory.GetCurrentDirectory(),"UploadedFiles",username);
+ //Check Directory
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
-
+ //Index file if same filename
var fullPath = Path.Combine(folderPath, filename);
int i=0;
@@ -35,13 +63,14 @@ namespace api.Controllers
}
-
+ //Write file
using (var stream=new FileStream(fullPath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
- return Ok();
+ return Ok(fullPath);
}
}
}
+
diff --git a/backend/api/api/Models/JwtToken.cs b/backend/api/api/Models/JwtToken.cs
index 3ecbf92d..7cbd6f54 100644
--- a/backend/api/api/Models/JwtToken.cs
+++ b/backend/api/api/Models/JwtToken.cs
@@ -33,13 +33,25 @@ namespace api.Models
public string RenewToken(string existingToken)
{
- if (existingToken == null)
+ var userName = TokenToUsername(existingToken);
+ if (userName == null)
+ return null;
+ var authUser = new AuthRequest();
+ authUser.UserName = userName;
+
+ return GenToken(authUser);
+
+ }
+
+ public string TokenToUsername(string token)
+ {
+ if (token == null)
return null;
var tokenHandler = new JwtSecurityTokenHandler();
- var key= Encoding.ASCII.GetBytes(_configuration.GetSection("AppSettings:JwtToken").Value);
+ var key = Encoding.ASCII.GetBytes(_configuration.GetSection("AppSettings:JwtToken").Value);
try
{
- tokenHandler.ValidateToken(existingToken, new TokenValidationParameters
+ tokenHandler.ValidateToken(token, new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
@@ -48,11 +60,7 @@ namespace api.Models
}, out SecurityToken validatedToken);
var jwtToken = (JwtSecurityToken)validatedToken;
- var userName =jwtToken.Claims.First(x => x.Type == "name").Value;
- var authUser = new AuthRequest();
- authUser.UserName = userName;
-
- return GenToken(authUser);
+ return jwtToken.Claims.First(x => x.Type == "name").Value;
}
catch
{
diff --git a/backend/api/api/appsettings.json b/backend/api/api/appsettings.json
index 3661f171..9b4f00a3 100644
--- a/backend/api/api/appsettings.json
+++ b/backend/api/api/appsettings.json
@@ -13,11 +13,12 @@
/* LocalHost
"ConnectionString": "mongodb://127.0.0.1:27017/",
"DatabaseName": "si_project",
- "CollectionName": "User"
+ "CollectionName": "User",
+ "DatasetCollectionName" : "Dataset"
*/
"ConnectionString": "mongodb+srv://si_user:si_user@sidatabase.twtfm.mongodb.net/myFirstDatabase?retryWrites=true&w=majority",
"DatabaseName": "si_db",
"CollectionName": "users",
- "DatasetCollectionName" : "Dataset"
+ "DatasetCollectionName": "Dataset"
}
}