diff options
Diffstat (limited to 'backend/api')
-rw-r--r-- | backend/api/api/Controllers/DatasetController.cs | 10 | ||||
-rw-r--r-- | backend/api/api/Controllers/FileUploadController.cs | 41 | ||||
-rw-r--r-- | backend/api/api/Models/JwtToken.cs | 24 | ||||
-rw-r--r-- | backend/api/api/appsettings.json | 5 |
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" } } |