Skip to content
Snippets Groups Projects
Commit 7b7b77ba authored by Petar Hristov's avatar Petar Hristov :speech_balloon:
Browse files

Merge branch 'Hotfix/0071-fixResourceCreate' into 'master'

Hotfix/0071 fix resource create

See merge request !46
parents ea5c8af4 0cef8fa9
No related branches found
No related tags found
1 merge request!46Hotfix/0071 fix resource create
......@@ -22,6 +22,7 @@
<PackageReference Include="Coscine.Database" Version="2.*-*" />
<PackageReference Include="Coscine.Logging" Version="2.*-*" />
<PackageReference Include="Coscine.ResourceLoader" Version="2.*-*" />
<PackageReference Include="Coscine.ResourceTypeBase" Version="2.*-*" />
<PackageReference Include="Coscine.WaterbutlerHelper" Version="2.*-*" />
</ItemGroup>
</Project>
......@@ -27,7 +27,6 @@ namespace Coscine.Api.Blob.Controllers
/// This controller represents the actions which can be taken with a Blob object.
/// </summary>
[Authorize]
public class BlobController : Controller
{
private readonly IConfiguration _configuration;
......@@ -80,7 +79,7 @@ namespace Coscine.Api.Blob.Controllers
{
if (!Guid.TryParse(resourceId, out Guid resourceGuid))
{
return BadRequest($"{resourceId} is not a guid.");
return BadRequest($"{resourceId} is not a GUID.");
}
var user = _authenticator.GetUser();
......@@ -109,28 +108,31 @@ namespace Coscine.Api.Blob.Controllers
return BadRequest("User does not have permission to the resource.");
}
if ((resource.Type.DisplayName.ToLower() == "rds" || resource.Type.DisplayName.ToLower() == "rdss3") && resource.ResourceTypeOptionId.HasValue)
{
try
{
var resourceTypeOptions = _resourceModel.GetResourceTypeOptions(resource.Id);
var resourceTypeDefinition = ResourceTypeFactory.CreateResourceTypeObject(resource.Type.DisplayName, _configuration);
if (resourceTypeDefinition == null)
{
return BadRequest($"No provider for: \"{resource.Type.DisplayName}\".");
}
var resourceTypeInformation = resourceTypeDefinition.GetResourceTypeInformation().Result;
if (resource.ResourceTypeOptionId.HasValue && resourceTypeInformation.IsQuotaAvailable)
{
try
{
var totalFileSize = resourceTypeDefinition.GetResourceQuotaUsed(resourceId, resourceTypeOptions).Result;
return Ok($"{{ \"data\": {{ \"usedSizeByte\": {totalFileSize} }}}}");
}
catch (Exception e)
{
_coscineLogger.Log("Get Quota failed", e);
return BadRequest($"Error in communication with the resource");
return BadRequest("Error in communication with the resource");
}
}
else
{
return BadRequest("The resource type must be rds.");
return BadRequest("The resource quota must be adjustable.");
}
}
......@@ -139,7 +141,7 @@ namespace Coscine.Api.Blob.Controllers
/// </summary>
/// <param name="resourceId">Id of the resource</param>
/// <param name="path"> Path to the file </param>
/// <returns>File if file exists otherwise Statuscode 204, 400, 401 or 404 </returns>
/// <returns>File if file exists otherwise status code 204, 400, 401 or 404 </returns>
[HttpGet("[controller]/{resourceId}/{*path}")]
[DisableRequestSizeLimit]
public async Task<IActionResult> GetFile(string resourceId, string path)
......@@ -171,14 +173,14 @@ namespace Coscine.Api.Blob.Controllers
}
var infos = await resourceTypeDefinition.GetEntry(resource.Id.ToString(), path, null, resourceTypeOptions);
var response = await resourceTypeDefinition.LoadEntry(resource.Id.ToString(), path, null, resourceTypeOptions);
new FileExtensionContentTypeProvider().TryGetContentType(path.Substring(path.LastIndexOf("/")), out string contentType);
LogAnalytics("Download File", resourceId, path.Substring(1), user);
new FileExtensionContentTypeProvider().TryGetContentType(path[path.LastIndexOf("/")..], out string contentType);
LogAnalytics("Download File", resourceId, path[1..], user);
return File(response, contentType ?? "application/octet-stream");
}
catch (Exception e)
{
_coscineLogger.Log("Get File failed", e);
return BadRequest($"Error in communication with the resource");
return BadRequest("Error in communication with the resource");
}
}
......@@ -188,7 +190,7 @@ namespace Coscine.Api.Blob.Controllers
/// <param name="resourceId">Id of the resource </param>
/// <param name="path">Path to the file</param>
/// <param name="files">List of files.</param>
/// <returns>Statuscode 204 if file is uploaded otherwise Statuscode 400 or 403</returns>
/// <returns>status code 204 if file is uploaded otherwise status code 400 or 403</returns>
[DisableRequestSizeLimit]
[RequestFormLimits(MultipartBodyLengthLimit = long.MaxValue)]
[HttpPut("[controller]/{resourceId}/{*path}")]
......@@ -219,7 +221,7 @@ namespace Coscine.Api.Blob.Controllers
if (files.Count != 1)
{
return BadRequest($"Only one file can be uploaded per request.");
return BadRequest("Only one file can be uploaded per request.");
}
var id = GenerateId(resourceId, path);
......@@ -255,7 +257,7 @@ namespace Coscine.Api.Blob.Controllers
catch (Exception e)
{
_coscineLogger.Log("Upload File failed", e);
return BadRequest($"Error in communication with the resource");
return BadRequest("Error in communication with the resource");
}
}
......@@ -264,7 +266,7 @@ namespace Coscine.Api.Blob.Controllers
/// </summary>
/// <param name="resourceId">Id of the resource </param>
/// <param name="path">Path to the file</param>
/// <returns>Statuscode 204 if deletion successful otherwise Statuscode 400, 401 or 404 </returns>
/// <returns>status code 204 if deletion successful otherwise status code 400, 401 or 404 </returns>
[HttpDelete("[controller]/{resourceId}/{*path}")]
public async Task<IActionResult> DeleteFile(string resourceId, string path)
{
......@@ -306,14 +308,14 @@ namespace Coscine.Api.Blob.Controllers
catch (Exception e)
{
_coscineLogger.Log("Delete failed", e);
return BadRequest($"Error in communication with the resource");
return BadRequest("Error in communication with the resource");
}
}
/// <summary>
/// This method checks if the resource is valid
/// </summary>
/// <returns>Statuscode 204 if resource is valid otherwise Statuscode 400 or 404</returns>
/// <returns>status code 204 if resource is valid otherwise status code 400 or 404</returns>
[HttpPost("[controller]/validate")]
public async Task<IActionResult> IsResourceValid([FromBody] JToken resource)
{
......@@ -346,12 +348,12 @@ namespace Coscine.Api.Blob.Controllers
catch (Exception e)
{
_coscineLogger.Log("Resource validation failed", e);
return BadRequest($"Error in communication with the resource");
return BadRequest("Error in communication with the resource");
}
}
/// <summary>
/// Tries to establish connection with resource and validates wether the given file/folder exists
/// Tries to establish connection with resource and validates whether the given file/folder exists
/// </summary>
private IActionResult CheckResource(string resourceId, out Resource resource)
{
......@@ -359,7 +361,7 @@ namespace Coscine.Api.Blob.Controllers
if (!Guid.TryParse(resourceId, out Guid resourceGuid))
{
return BadRequest($"{resourceId} is not a guid.");
return BadRequest($"{resourceId} is not a GUID.");
}
try
......@@ -388,7 +390,7 @@ namespace Coscine.Api.Blob.Controllers
/// Checks if the path is valid
/// </summary>
/// <param name="path">path</param>
/// <returns>Statuscode 400 if the given path is not valid</returns>
/// <returns>status code 400 if the given path is not valid</returns>
public IActionResult CheckPath(string path)
{
if (string.IsNullOrWhiteSpace(path))
......@@ -415,7 +417,7 @@ namespace Coscine.Api.Blob.Controllers
/// </summary>
/// <param name="user">user</param>
/// <param name="resource">resource</param>
/// <returns>Statuscode 403 if the user has no access</returns>
/// <returns>status code 403 if the user has no access</returns>
public IActionResult CheckUser(User user, Resource resource)
{
if (user == null || !_resourceModel.HasAccess(user, resource, UserRoles.Owner, UserRoles.Member))
......
using Coscine.WaterbutlerHelper.Services;
using Coscine.ApiCommons;
using Coscine.ApiCommons;
using Coscine.WaterbutlerHelper.Services;
using Microsoft.Extensions.DependencyInjection;
using System;
......@@ -16,8 +16,9 @@ namespace Coscine.Api.Blob
public Startup()
{
}
/// <summary>
/// Configures custom service extenions
/// Configures custom service extensions
/// </summary>
/// <param name="services">services</param>
public override void ConfigureServicesExtension(IServiceCollection services)
......@@ -30,6 +31,5 @@ namespace Coscine.Api.Blob
client.Timeout = TimeSpan.FromMinutes(30);
});
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment