Skip to content
Snippets Groups Projects
Commit ba0774df authored by Marcel Nellesen's avatar Marcel Nellesen
Browse files

Merge branch 'Sprint/2020-05' into 'master'

Sprint/2020-05

See merge request coscine/api/file!8
parents da1df3ad 8405fffc
No related branches found
No related tags found
1 merge request!8Sprint/2020-05
......@@ -139,6 +139,10 @@
<assemblyIdentity name="Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.1.0" newVersion="2.2.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Coscine.Configuration" publicKeyToken="ce3d7a32d7dc1e5a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.5.0.0" newVersion="1.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
\ No newline at end of file
......@@ -21,7 +21,8 @@ using Coscine.ApiCommons.Factories;
using System.Web;
using Amazon.S3;
using Amazon.S3.Model;
using Microsoft.Extensions.Logging;
using Coscine.Logging;
namespace Coscine.Api.File.Controllers
{
[Authorize]
......@@ -36,7 +37,10 @@ namespace Coscine.Api.File.Controllers
private readonly string _accessKey;
private readonly string _secretKey;
private readonly AmazonS3Config _amazonConfig;
private readonly ProjectResourceModel _projectResourceModel;
private readonly ProjectRoleModel _projectRoleModel;
private readonly CoscineLogger _coscineLogger;
private readonly AnalyticsLogObject _analyticsLogObject;
static DataSourceController()
{
Client = new HttpClient
......@@ -45,15 +49,19 @@ namespace Coscine.Api.File.Controllers
};
}
public DataSourceController()
public DataSourceController(ILogger<DataSourceController> logger)
{
_configuration = Program.Configuration;
_jwtHandler = new JWTHandler(_configuration);
_authenticator = new Authenticator(this, _configuration);
_resourceModel = new ResourceModel();
_projectResourceModel = new ProjectResourceModel();
_projectRoleModel = new ProjectRoleModel();
_accessKey = _configuration.GetStringAndWait("coscine/global/buckets/accesskey");
_secretKey = _configuration.GetStringAndWait("coscine/global/buckets/secretkey");
_coscineLogger = new CoscineLogger(logger);
_analyticsLogObject = new AnalyticsLogObject();
_amazonConfig = new AmazonS3Config
{
ServiceURL = "https://s3.rwth-aachen.de/",
......@@ -153,6 +161,7 @@ namespace Coscine.Api.File.Controllers
return check;
}
if (!_resourceModel.HasAccess(user, resource, UserRoles.Owner, UserRoles.Member))
{
return BadRequest("User does not have permission to the resource.");
......@@ -178,11 +187,13 @@ namespace Coscine.Api.File.Controllers
{
if (response.Content.Headers.Contains("Content-Disposition"))
{
LogAnalytics("Download File", resourceId, path, user);
return File(await response.Content.ReadAsStreamAsync(),
response.Content.Headers.GetValues("Content-Type").First());
}
else
{
LogAnalytics("View Folder", resourceId, path, user);
var data = JObject.Parse(await response.Content.ReadAsStringAsync())["data"];
return Ok(new WaterbutlerObject(path, data));
}
......@@ -232,6 +243,7 @@ namespace Coscine.Api.File.Controllers
var response = await UploadFile(url, authHeader, Request.Body);
if (response.IsSuccessStatusCode)
{
LogAnalytics("Upload File", resourceId, path, user);
return NoContent();
}
else
......@@ -285,6 +297,7 @@ namespace Coscine.Api.File.Controllers
var response = await UploadFile(url, authHeader, Request.Body);
if (response.IsSuccessStatusCode)
{
LogAnalytics("Update File", resourceId, path, user);
return NoContent();
}
else
......@@ -382,6 +395,7 @@ namespace Coscine.Api.File.Controllers
var response = await Client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
if (response.IsSuccessStatusCode)
{
LogAnalytics("Delete File", resourceId, path, user);
return NoContent();
}
else
......@@ -626,5 +640,20 @@ namespace Coscine.Api.File.Controllers
return BuildWaterbutlerPayload(auth, credentials, settings);
}
// XXX extract in the future to an analytics Controller
private void LogAnalytics(string operation, string resourceId, string path, User user)
{
if (CoscineLoggerConfiguration.IsLogLevelActivated(LogType.Analytics))
{
_analyticsLogObject.Type = "Action";
_analyticsLogObject.FileId = resourceId + "/" + path;
_analyticsLogObject.ResourceId = resourceId;
_analyticsLogObject.ProjectId = _projectResourceModel.GetProjectForResource(new Guid(resourceId)).ToString();
_analyticsLogObject.RoleId = _projectRoleModel.GetGetUserRoleForProject(new Guid(_analyticsLogObject.ProjectId), user.Id).ToString();
_analyticsLogObject.Operation = operation;
_coscineLogger.AnalyticsLog(_analyticsLogObject);
}
}
}
}
......@@ -54,17 +54,17 @@
<Reference Include="Consul, Version=0.7.2.6, Culture=neutral, PublicKeyToken=20a6ad9a81df1d95, processorArchitecture=MSIL">
<HintPath>packages\Consul.0.7.2.6\lib\net45\Consul.dll</HintPath>
</Reference>
<Reference Include="Coscine.ApiCommons, Version=1.6.3.0, Culture=neutral, PublicKeyToken=af4c1345df96546b, processorArchitecture=MSIL">
<HintPath>packages\Coscine.ApiCommons.1.6.3\lib\net461\Coscine.ApiCommons.dll</HintPath>
<Reference Include="Coscine.ApiCommons, Version=1.7.0.0, Culture=neutral, PublicKeyToken=af4c1345df96546b, processorArchitecture=MSIL">
<HintPath>packages\Coscine.ApiCommons.1.7.0\lib\net461\Coscine.ApiCommons.dll</HintPath>
</Reference>
<Reference Include="Coscine.Configuration, Version=1.4.0.0, Culture=neutral, PublicKeyToken=ce3d7a32d7dc1e5a, processorArchitecture=MSIL">
<HintPath>packages\Coscine.Configuration.1.4.0\lib\net461\Coscine.Configuration.dll</HintPath>
<Reference Include="Coscine.Configuration, Version=1.5.0.0, Culture=neutral, PublicKeyToken=ce3d7a32d7dc1e5a, processorArchitecture=MSIL">
<HintPath>packages\Coscine.Configuration.1.5.0\lib\net461\Coscine.Configuration.dll</HintPath>
</Reference>
<Reference Include="Coscine.Database, Version=1.16.0.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL">
<HintPath>packages\Coscine.Database.1.16.0\lib\net461\Coscine.Database.dll</HintPath>
<Reference Include="Coscine.Database, Version=1.17.0.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL">
<HintPath>packages\Coscine.Database.1.17.0\lib\net461\Coscine.Database.dll</HintPath>
</Reference>
<Reference Include="Coscine.Logging, Version=1.0.1.0, Culture=neutral, PublicKeyToken=e1ed402bc3f6525e, processorArchitecture=MSIL">
<HintPath>packages\Coscine.Logging.1.0.1\lib\net461\Coscine.Logging.dll</HintPath>
<Reference Include="Coscine.Logging, Version=1.1.0.0, Culture=neutral, PublicKeyToken=e1ed402bc3f6525e, processorArchitecture=MSIL">
<HintPath>packages\Coscine.Logging.1.1.0\lib\net461\Coscine.Logging.dll</HintPath>
</Reference>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll</HintPath>
......
......
......@@ -4,10 +4,10 @@
<package id="AWSSDK.S3" version="3.3.110.29" targetFramework="net461" />
<package id="Castle.Core" version="4.4.0" targetFramework="net461" />
<package id="Consul" version="0.7.2.6" targetFramework="net461" />
<package id="Coscine.ApiCommons" version="1.6.3" targetFramework="net461" />
<package id="Coscine.Configuration" version="1.4.0" targetFramework="net461" />
<package id="Coscine.Database" version="1.16.0" targetFramework="net461" />
<package id="Coscine.Logging" version="1.0.1" targetFramework="net461" />
<package id="Coscine.ApiCommons" version="1.7.0" targetFramework="net461" />
<package id="Coscine.Configuration" version="1.5.0" targetFramework="net461" />
<package id="Coscine.Database" version="1.17.0" targetFramework="net461" />
<package id="Coscine.Logging" version="1.1.0" targetFramework="net461" />
<package id="EntityFramework" version="6.2.0" targetFramework="net461" />
<package id="linq2db" version="2.6.4" targetFramework="net461" />
<package id="linq2db.SqlServer" version="2.6.4" targetFramework="net461" />
......
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment