Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • Fix/xxxx-activateGitlab
  • Fix/xxxx-resourceVisibility
  • Hotfix/1262-fixStatuscode
  • Hotfix/1308-versionConflict
  • Hotfix/1357-ymlFile
  • Hotfix/1370-swaggerDescription
  • Hotfix/1383-topLevel
  • Hotfix/1433-defaultQuota
  • Hotfix/1466-projectCreationTimeout
  • Hotfix/1584-fixResourceLoader
  • Hotfix/1590-quotaFix
  • Hotfix/1615-membersCreatingProject
  • Hotfix/1668-versionResourceConfigDepVersion
  • Hotfix/1669-RDS-S3QuotaManagement
  • Hotfix/1704-FixingArchiveFlag
  • Hotfix/1796-projectDdos
  • Hotfix/1917-PublicFilesVisibility
  • Hotfix/2015-PublicFilesVisibility
  • Hotfix/2077-fixSupportAdminLog
  • Hotfix/2087-efNet6
  • Hotfix/2202-fixNaNQuota
  • Hotfix/2203-quotaMembersFix
  • Hotfix/2224-quotaSizeAnalytics
  • Hotfix/2371-fixGitLabinRCV
  • Hotfix/64-releaseUDE
  • Issue/1321-pidEnquiryOverhaul
  • Issue/1825-codeQualityPipelines
  • Issue/1825-codeQualityPipelinesNew
  • Issue/1860-searchScoping
  • Issue/1861-searchMetadata
  • Issue/1866-ExtendResourceTypeConfigurationTUDo
  • Issue/1877-ExtendResourceTypeConfigurationNRWFHs
  • Issue/1910-MigrationtoNET6.0
  • Issue/1927-projectAppMigration
  • Issue/1940ResouceKeysForNRWAndTUDO
  • Issue/1951-quotaImplementation
  • Issue/1957-resourceAppMigrationNew
  • Issue/1971-projectEditCreateMigration
  • Issue/1971-projectForDev
  • Issue/2000-gitlabResourcesAPI
  • Issue/2001-extendAnalyticsLogger
  • Issue/2008-quotaManagement
  • Issue/2061-activateResourceTypeRdss3nrw
  • Issue/2072-wormResourceType
  • Issue/2101-gitLabResTypeUi
  • Issue/2221-projectDateCreated
  • Issue/2246-quotaResoval
  • Issue/2259-updatePids
  • Issue/2287-guestRole
  • Issue/2309-docs
  • Issue/2328-noFailOnLog
  • Issue/2349-gitlabHttps
  • Issue/2355-topLevelOrg
  • Issue/2449-GuidPidSlugToProjectSettings
  • Issues/0028-maxQuotaFix
  • Product/1100-fdsS3
  • Product/1154-resourceTypeDefinition
  • Product/1188-LoggingExtended
  • Product/1215-gitlabCleanUp
  • Product/1287-dotnet5Sharepoint
  • Product/1414-fhPrivileges
  • Product/1442-projectInviteMngmnt
  • Product/1548-projectInviteMngmnt
  • Product/1600-rdsS3QuotaManagement
  • Product/1629-onboardingOtherUniversities
  • Product/202-userInvitation
  • Product/588-quotaManagement
  • Product/932-docuProjectApi
  • Sprint/2020-20
  • Sprint/2020-21
  • Sprint/2020-22
  • Sprint/2021-01
  • Sprint/2021-02
  • Sprint/2021-03
  • Sprint/2021-05
  • Sprint/2021-08
  • Sprint/2021-09
  • Sprint/2021-10
  • Sprint/2021-11
  • Sprint/2021-12
  • Sprint/2021-13
  • Sprint/2021-15
  • Sprint/2021-19
  • Sprint/2021-2022
  • Sprint/2021-23
  • Sprint/2022-01
  • Sprint/2022-05
  • Test/xxxx-enablingGitLab
  • Topic/1115-docuProjectApi
  • Topic/1159-rtdApi
  • Topic/1221-LogginExtendedNew
  • Topic/1221-LoggingExtended
  • Topic/1279-quotaManagement
  • Topic/1292-FdsS3
  • Topic/1335-dotnet5Apis
  • Topic/1425-fhPrivileges
  • Topic/1453-userInvitation
  • Topic/1529-HandleExternalUserInvitation
  • Topic/1530-invitationUserManagement
  • Topic/1531-UseMangmntTableView
  • v1.0.0
  • v1.1.0
  • v1.10.0
  • v1.11.0
  • v1.11.1
  • v1.12.0
  • v1.13.0
  • v1.13.1
  • v1.14.0
  • v1.15.0
  • v1.15.1
  • v1.16.0
  • v1.16.1
  • v1.17.0
  • v1.17.1
  • v1.18.0
  • v1.19.0
  • v1.2.0
  • v1.2.1
  • v1.20.0
  • v1.20.1
  • v1.20.2
  • v1.21.0
  • v1.21.1
  • v1.22.0
  • v1.23.0
  • v1.23.1
  • v1.23.2
  • v1.23.3
  • v1.24.0
  • v1.24.1
  • v1.25.0
  • v1.25.1
  • v1.3.0
  • v1.4.0
  • v1.4.1
  • v1.5.0
  • v1.5.1
  • v1.6.0
  • v1.6.1
  • v1.6.2
  • v1.7.0
  • v1.7.1
  • v1.8.0
  • v1.9.0
  • v2.0.0
  • v2.0.1
  • v2.0.2
  • v2.1.0
  • v2.1.1
  • v2.1.2
  • v2.2.0
  • v2.2.1
  • v2.2.2
  • v2.2.3
  • v2.2.4
  • v2.2.5
  • v2.3.0
  • v2.4.0
  • v2.4.1
  • v2.4.2
  • v2.4.3
  • v2.5.0
  • v2.5.1
  • v2.5.2
  • v2.5.3
  • v2.5.4
  • v2.6.0
  • v2.6.1
  • v2.6.2
  • v2.7.0
  • v2.8.0
  • v2.8.1
  • v2.8.2
  • v2.8.3
  • v2.8.4
  • v2.9.0
  • v3.0.0
  • v3.0.1
  • v4.0.0
  • v4.0.1
  • v4.0.2
  • v4.0.3
  • v4.1.0
  • v4.1.1
  • v4.2.0
  • v4.2.1
  • v4.2.2
  • v4.2.3
  • v4.2.4
  • v4.2.5
  • v4.2.6
  • v4.2.7
  • v4.2.8
  • v4.3.0
  • v4.3.1
  • v4.3.2
  • v4.3.3
  • v4.3.4
  • v4.4.0
200 results

Target

Select target project
  • coscine/backend/apis/project
1 result
Select Git revision
  • Fix/xxxx-activateGitlab
  • Fix/xxxx-resourceVisibility
  • Hotfix/1262-fixStatuscode
  • Hotfix/1308-versionConflict
  • Hotfix/1357-ymlFile
  • Hotfix/1370-swaggerDescription
  • Hotfix/1383-topLevel
  • Hotfix/1433-defaultQuota
  • Hotfix/1466-projectCreationTimeout
  • Hotfix/1584-fixResourceLoader
  • Hotfix/1590-quotaFix
  • Hotfix/1615-membersCreatingProject
  • Hotfix/1668-versionResourceConfigDepVersion
  • Hotfix/1669-RDS-S3QuotaManagement
  • Hotfix/1704-FixingArchiveFlag
  • Hotfix/1796-projectDdos
  • Hotfix/1917-PublicFilesVisibility
  • Hotfix/2015-PublicFilesVisibility
  • Hotfix/2077-fixSupportAdminLog
  • Hotfix/2087-efNet6
  • Hotfix/2202-fixNaNQuota
  • Hotfix/2203-quotaMembersFix
  • Hotfix/2224-quotaSizeAnalytics
  • Hotfix/2371-fixGitLabinRCV
  • Hotfix/64-releaseUDE
  • Issue/1321-pidEnquiryOverhaul
  • Issue/1825-codeQualityPipelines
  • Issue/1825-codeQualityPipelinesNew
  • Issue/1860-searchScoping
  • Issue/1861-searchMetadata
  • Issue/1866-ExtendResourceTypeConfigurationTUDo
  • Issue/1877-ExtendResourceTypeConfigurationNRWFHs
  • Issue/1910-MigrationtoNET6.0
  • Issue/1927-projectAppMigration
  • Issue/1940ResouceKeysForNRWAndTUDO
  • Issue/1951-quotaImplementation
  • Issue/1957-resourceAppMigrationNew
  • Issue/1971-projectEditCreateMigration
  • Issue/1971-projectForDev
  • Issue/2000-gitlabResourcesAPI
  • Issue/2001-extendAnalyticsLogger
  • Issue/2008-quotaManagement
  • Issue/2061-activateResourceTypeRdss3nrw
  • Issue/2072-wormResourceType
  • Issue/2101-gitLabResTypeUi
  • Issue/2221-projectDateCreated
  • Issue/2246-quotaResoval
  • Issue/2259-updatePids
  • Issue/2287-guestRole
  • Issue/2309-docs
  • Issue/2328-noFailOnLog
  • Issue/2349-gitlabHttps
  • Issue/2355-topLevelOrg
  • Issue/2449-GuidPidSlugToProjectSettings
  • Issues/0028-maxQuotaFix
  • Product/1100-fdsS3
  • Product/1154-resourceTypeDefinition
  • Product/1188-LoggingExtended
  • Product/1215-gitlabCleanUp
  • Product/1287-dotnet5Sharepoint
  • Product/1414-fhPrivileges
  • Product/1442-projectInviteMngmnt
  • Product/1548-projectInviteMngmnt
  • Product/1600-rdsS3QuotaManagement
  • Product/1629-onboardingOtherUniversities
  • Product/202-userInvitation
  • Product/588-quotaManagement
  • Product/932-docuProjectApi
  • Sprint/2020-20
  • Sprint/2020-21
  • Sprint/2020-22
  • Sprint/2021-01
  • Sprint/2021-02
  • Sprint/2021-03
  • Sprint/2021-05
  • Sprint/2021-08
  • Sprint/2021-09
  • Sprint/2021-10
  • Sprint/2021-11
  • Sprint/2021-12
  • Sprint/2021-13
  • Sprint/2021-15
  • Sprint/2021-19
  • Sprint/2021-2022
  • Sprint/2021-23
  • Sprint/2022-01
  • Sprint/2022-05
  • Test/xxxx-enablingGitLab
  • Topic/1115-docuProjectApi
  • Topic/1159-rtdApi
  • Topic/1221-LogginExtendedNew
  • Topic/1221-LoggingExtended
  • Topic/1279-quotaManagement
  • Topic/1292-FdsS3
  • Topic/1335-dotnet5Apis
  • Topic/1425-fhPrivileges
  • Topic/1453-userInvitation
  • Topic/1529-HandleExternalUserInvitation
  • Topic/1530-invitationUserManagement
  • Topic/1531-UseMangmntTableView
  • v1.0.0
  • v1.1.0
  • v1.10.0
  • v1.11.0
  • v1.11.1
  • v1.12.0
  • v1.13.0
  • v1.13.1
  • v1.14.0
  • v1.15.0
  • v1.15.1
  • v1.16.0
  • v1.16.1
  • v1.17.0
  • v1.17.1
  • v1.18.0
  • v1.19.0
  • v1.2.0
  • v1.2.1
  • v1.20.0
  • v1.20.1
  • v1.20.2
  • v1.21.0
  • v1.21.1
  • v1.22.0
  • v1.23.0
  • v1.23.1
  • v1.23.2
  • v1.23.3
  • v1.24.0
  • v1.24.1
  • v1.25.0
  • v1.25.1
  • v1.3.0
  • v1.4.0
  • v1.4.1
  • v1.5.0
  • v1.5.1
  • v1.6.0
  • v1.6.1
  • v1.6.2
  • v1.7.0
  • v1.7.1
  • v1.8.0
  • v1.9.0
  • v2.0.0
  • v2.0.1
  • v2.0.2
  • v2.1.0
  • v2.1.1
  • v2.1.2
  • v2.2.0
  • v2.2.1
  • v2.2.2
  • v2.2.3
  • v2.2.4
  • v2.2.5
  • v2.3.0
  • v2.4.0
  • v2.4.1
  • v2.4.2
  • v2.4.3
  • v2.5.0
  • v2.5.1
  • v2.5.2
  • v2.5.3
  • v2.5.4
  • v2.6.0
  • v2.6.1
  • v2.6.2
  • v2.7.0
  • v2.8.0
  • v2.8.1
  • v2.8.2
  • v2.8.3
  • v2.8.4
  • v2.9.0
  • v3.0.0
  • v3.0.1
  • v4.0.0
  • v4.0.1
  • v4.0.2
  • v4.0.3
  • v4.1.0
  • v4.1.1
  • v4.2.0
  • v4.2.1
  • v4.2.2
  • v4.2.3
  • v4.2.4
  • v4.2.5
  • v4.2.6
  • v4.2.7
  • v4.2.8
  • v4.3.0
  • v4.3.1
  • v4.3.2
  • v4.3.3
  • v4.3.4
  • v4.4.0
200 results
Show changes
Commits on Source (12)
......@@ -93,17 +93,20 @@ namespace Coscine.Api.Project.Tests
FakeControllerContext(Users[0], stream);
var updateResult = Controller.Update(Projects[0].Id.ToString());
var updateResult = Controller.Update(projectObject.Id, projectObject);
Assert.IsTrue(updateResult.GetType() == typeof(OkObjectResult));
// Cleanup
stream.Close();
stream = ObjectFactory<ProjectObject>.SerializeToStream(projectObject);
var actionResultPrevious = Controller.Get(Projects[1].Id.ToString()).Result;
ProjectObject projectObjectPrevious = (ProjectObject)((OkObjectResult)actionResultPrevious).Value;
stream = ObjectFactory<ProjectObject>.SerializeToStream(projectObjectPrevious);
FakeControllerContext(Users[0], stream);
updateResult = Controller.Update(Projects[1].Id.ToString());
updateResult = Controller.Update(projectObjectPrevious.Id, projectObjectPrevious);
Assert.IsTrue(updateResult.GetType() == typeof(UnauthorizedObjectResult));
// Cleanup
......@@ -122,7 +125,7 @@ namespace Coscine.Api.Project.Tests
FakeControllerContext(Users[0], stream);
var actionResult = Controller.Store();
var actionResult = Controller.Store(newProjectObject);
Assert.IsTrue(actionResult.GetType() == typeof(JsonResult));
JsonResult jsonResult = (JsonResult)actionResult;
......@@ -157,7 +160,7 @@ namespace Coscine.Api.Project.Tests
FakeControllerContext(Users[0], stream);
var actionResult = Controller.Store();
var actionResult = Controller.Store(newProjectObject);
Assert.IsTrue(actionResult.GetType() == typeof(JsonResult));
JsonResult result = (JsonResult)actionResult;
......@@ -195,7 +198,7 @@ namespace Coscine.Api.Project.Tests
FakeControllerContext(Users[0], stream);
var actionResult = Controller.Store();
var actionResult = Controller.Store(newProjectObject);
JsonResult result = (JsonResult)actionResult;
ProjectObject createdProjectObject = (ProjectObject)result.Value;
......@@ -211,7 +214,7 @@ namespace Coscine.Api.Project.Tests
FakeControllerContext(Users[0], stream);
actionResult = Controller.Store();
actionResult = Controller.Store(newProjectObject);
stream = ObjectFactory<ProjectObject>.SerializeToStream(createdProjectObject);
......@@ -240,7 +243,7 @@ namespace Coscine.Api.Project.Tests
var stream = ObjectFactory<ProjectObject>.SerializeToStream(newProjectObject);
FakeControllerContext(Users[0], stream);
var actionResult = Controller.Store();
var actionResult = Controller.Store(newProjectObject);
JsonResult result = (JsonResult)actionResult;
ProjectObject createdProjectObject = (ProjectObject)result.Value;
......@@ -253,7 +256,7 @@ namespace Coscine.Api.Project.Tests
var subStream = ObjectFactory<ProjectObject>.SerializeToStream(newSubProjectObject);
FakeControllerContext(Users[0], subStream);
var subActionResult = Controller.Store();
var subActionResult = Controller.Store(newProjectObject);
JsonResult resultSubProject = (JsonResult)subActionResult;
ProjectObject createdSubProjectObject = (ProjectObject)resultSubProject.Value;
......
......@@ -114,6 +114,34 @@ namespace Coscine.Api.Project.Controllers
var user = _authenticator.GetUser();
var project = _projectModel.GetById(Guid.Parse(id));
if (_projectModel.HasAccess(user, project, UserRoles.Member, UserRoles.Owner))
{
var subProjectModel = new SubProjectModel();
var subProjectRel = subProjectModel.GetAllWhere((subProject) => subProject.SubProjectId == project.Id && !project.Deleted);
var parentProjectRelation = subProjectRel.FirstOrDefault();
if (parentProjectRelation != null && _projectModel.HasAccess(user, parentProjectRelation.ProjectId, UserRoles.Member, UserRoles.Owner))
{
return Ok(_projectModel.CreateReturnObjectFromDatabaseObject(project, parentProjectRelation.ProjectId));
}
return Ok(_projectModel.CreateReturnObjectFromDatabaseObject(project));
}
else
{
return Unauthorized($"User has no access to a project with id: {id}");
}
}
/// <summary>
/// This returns the project if the user has access to it
/// </summary>
/// <param name="slug">Slug of the project</param>
/// <returns>OK or status code 401</returns>
[HttpGet("[controller]/slug/{slug}")]
public ActionResult<ProjectObject> GetBySlug(string slug)
{
var user = _authenticator.GetUser();
var project = _projectModel.GetBySlug(slug);
if (_projectModel.HasAccess(user, project, UserRoles.Member, UserRoles.Owner))
{
SubProjectModel subProjectModel = new SubProjectModel();
var subProjectRel = subProjectModel.GetAllWhere((subProject) => subProject.SubProjectId == project.Id && !project.Deleted);
......@@ -127,14 +155,14 @@ namespace Coscine.Api.Project.Controllers
}
else
{
return Unauthorized($"User is not allowed to see given the project {id}");
return Unauthorized($"User has no access to a project with slug: {slug}");
}
}
/// <summary>
/// Gets the resources
/// </summary>
/// <param name="id">Id of the resource</param>
/// <param name="id">Id of the project</param>
/// <returns>JSON object or status code 401</returns>
[HttpGet("[controller]/{id}/resources")]
public ActionResult<IEnumerable<ResourceObject>> GetResources(string id)
......@@ -160,30 +188,30 @@ namespace Coscine.Api.Project.Controllers
}
else
{
return Unauthorized($"User is not allowed to see given the project {id}");
return Unauthorized($"User has no access to a project with id: {id}");
}
}
/// <summary>
/// Retrieves the quota for the selected project.
/// </summary>
/// <param name="projectId">Id of the project.</param>
/// <param name="id">Id of the project</param>
/// <returns>List of project quotas</returns>
[HttpGet("[controller]/{projectId}/quota/-/all")]
public ActionResult<IEnumerable<ProjectQuota>> Quotas(string projectId)
[HttpGet("[controller]/{id}/quota/-/all")]
public ActionResult<IEnumerable<ProjectQuotaReturnObject>> Quotas(string id)
{
var user = _authenticator.GetUser();
if (!Guid.TryParse(projectId, out Guid projectGuid))
if (!Guid.TryParse(id, out Guid projectGuid))
{
return BadRequest($"{projectId} is not a GUID.");
return BadRequest($"{id} is not a GUID.");
}
var project = _projectModel.GetById(projectGuid);
if (project == null)
{
return NotFound($"Could not find project with id: {projectId}");
return NotFound($"Could not find project with id: {id}");
}
if (!_projectModel.HasAccess(user, project, UserRoles.Member, UserRoles.Owner))
......@@ -234,24 +262,24 @@ namespace Coscine.Api.Project.Controllers
/// <summary>
/// Retrieves the quota for the selected project and resource Type.
/// </summary>
/// <param name="projectId">Id of the project</param>
/// <param name="id">Id of the project</param>
/// <param name="resourceTypeId">Id of the resource type</param>
/// <returns>The project quota for the resource type.</returns>
[HttpGet("[controller]/{projectId}/quota/{resourceTypeId}")]
public ActionResult<ProjectQuotaReturnObject> Quota(string projectId, string resourceTypeId)
[HttpGet("[controller]/{id}/quota/{resourceTypeId}")]
public ActionResult<ProjectQuotaReturnObject> Quota(string id, string resourceTypeId)
{
var user = _authenticator.GetUser();
if (!Guid.TryParse(projectId, out Guid projectGuid))
if (!Guid.TryParse(id, out Guid projectGuid))
{
return BadRequest($"{projectId} is not a GUID.");
return BadRequest($"{id} is not a GUID.");
}
var project = _projectModel.GetById(projectGuid);
if (project == null)
{
return NotFound($"Could not find project with id: {projectId}");
return NotFound($"Could not find project with id: {id}");
}
if (!_projectModel.HasAccess(user, project, UserRoles.Owner))
......@@ -291,24 +319,24 @@ namespace Coscine.Api.Project.Controllers
/// <summary>
/// Get the max quota for a resource type.
/// </summary>
/// <param name="projectId">Id of the project.</param>
/// <param name="id">Id of the project.</param>
/// <param name="resourceTypeId">Id of the resource</param>
/// <returns>The maximum value for the quota.</returns>
[HttpGet("[controller]/{projectId}/quota/{resourceTypeId}/max")]
public ActionResult<MaxProjectQuota> GetQuotaMax(string projectId, string resourceTypeId)
[HttpGet("[controller]/{id}/quota/{resourceTypeId}/max")]
public ActionResult<MaxProjectQuota> GetQuotaMax(string id, string resourceTypeId)
{
var user = _authenticator.GetUser();
if (!Guid.TryParse(projectId, out Guid projectGuid))
if (!Guid.TryParse(id, out Guid projectGuid))
{
return BadRequest($"{projectId} is not a GUID.");
return BadRequest($"{id} is not a GUID.");
}
var project = _projectModel.GetById(projectGuid);
if (project == null)
{
return NotFound($"Could not find project with id: {projectId}");
return NotFound($"Could not find project with id: {id}");
}
if (!_projectModel.HasAccess(user, project, UserRoles.Owner))
......@@ -334,25 +362,25 @@ namespace Coscine.Api.Project.Controllers
/// <summary>
/// Update the project quota.
/// </summary>
/// <param name="projectId">Id of the project.</param>
/// <param name="id">Id of the project.</param>
/// <param name="resourceTypeId">Id of the resource.</param>
/// <param name="updateProjectQuotaObject">Object containing the update values.</param>
/// <returns>NoContent (204).</returns>
[HttpPost("[controller]/{projectId}/quota/{resourceTypeId}")]
public IActionResult UpdateQuota(string projectId, string resourceTypeId, [FromBody] UpdateProjectQuotaObject updateProjectQuotaObject)
[HttpPost("[controller]/{id}/quota/{resourceTypeId}")]
public IActionResult UpdateQuota(string id, string resourceTypeId, [FromBody] UpdateProjectQuotaObject updateProjectQuotaObject)
{
var user = _authenticator.GetUser();
if (!Guid.TryParse(projectId, out Guid projectGuid))
if (!Guid.TryParse(id, out Guid projectGuid))
{
return BadRequest($"{projectId} is not a GUID.");
return BadRequest($"{id} is not a GUID.");
}
var project = _projectModel.GetById(projectGuid);
if (project == null)
{
return NotFound($"Could not find project with id: {projectId}");
return NotFound($"Could not find project with id: {id}");
}
if (!_projectModel.HasAccess(user, project, UserRoles.Owner))
......@@ -422,20 +450,26 @@ namespace Coscine.Api.Project.Controllers
projectQuotaForCurrent.Quota = updateProjectQuotaObject.Allocated;
_projectQuotaModel.Update(projectQuotaForCurrent);
}
if (Request.Query != null && Request.Query["noanalyticslog"] != "true")
{
LogAnalyticsOwnerProjectQuotaChange(project, user);
}
return NoContent();
}
/// <summary>
/// Updates the selected project
/// </summary>
/// <param name="id">Id of the resource</param>
/// <param name="id">Id of the project</param>
/// <param name="projectObject">A Project Object</param>
/// <returns>OK or status code 401</returns>
[HttpPost("[controller]/{id}")]
public IActionResult Update(string id)
public IActionResult Update(Guid id, [FromBody] ProjectObject projectObject)
{
var user = _authenticator.GetUser();
var projectObject = ObjectFactory<ProjectObject>.DeserializeFromStream(Request.Body);
var project = _projectModel.GetById(Guid.Parse(id));
var project = _projectModel.GetById(id);
if (_projectModel.HasAccess(user, project, UserRoles.Owner))
{
LogAnalyticsEditProject(project, _projectModel.GetMetadataCompleteness(projectObject), projectObject.Disciplines, projectObject.Organizations, user);
......@@ -450,7 +484,7 @@ namespace Coscine.Api.Project.Controllers
/// <summary>
/// Deletes the selected project
/// </summary>
/// <param name="id">Id of the resource</param>
/// <param name="id">Id of the project</param>
/// <returns>JSON object or status code 401</returns>
[HttpDelete("[controller]/{id}")]
public IActionResult Delete(string id)
......@@ -569,14 +603,14 @@ namespace Coscine.Api.Project.Controllers
/// <summary>
/// Creates a project
/// </summary>
/// <param name="projectObject">A Project Object</param>
/// <returns>JSON object or status code 401</returns>
[HttpPost("[controller]")]
public IActionResult Store()
public IActionResult Store([FromBody] ProjectObject projectObject)
{
var user = _authenticator.GetUser();
var projectObject = ObjectFactory<ProjectObject>.DeserializeFromStream(Request.Body);
if (projectObject?.ParentId != new Guid()
if (projectObject.ParentId != new Guid()
&& !_projectModel.HasAccess(user, _projectModel.GetById(projectObject.ParentId), UserRoles.Member, UserRoles.Owner))
{
return Unauthorized("User is not allowed to create SubProjects.");
......@@ -652,6 +686,33 @@ namespace Coscine.Api.Project.Controllers
return new ActionResult<IEnumerable<InvitationReturnObject>>(invitations);
}
/// <summary>
/// Call to analytics logger.
/// </summary>
/// <param name="projectId">Project id of the project</param>
/// <returns>204 no content</returns>
[HttpGet("[controller]/{projectId}/-/create-profile")]
public IActionResult CreateApplicationProfile(Guid projectId)
{
var project = _projectModel.GetById(projectId);
if (project == null)
{
return NotFound($@"The project ""{projectId}"" was not found.");
}
var user = _authenticator.GetUser();
if (!_projectModel.HasAccess(user, project, UserRoles.Owner))
{
return Unauthorized("You are not an owner of the project.");
}
LogAnalyticsCreateApplicationProfile(project, user);
return NoContent();
}
/// <summary>
/// Create and send an invitation to specified mail.
/// </summary>
......@@ -724,6 +785,8 @@ namespace Coscine.Api.Project.Controllers
return NoContent();
}
/// <summary>
/// Deletes an invitation.
/// </summary>
......@@ -914,5 +977,50 @@ namespace Coscine.Api.Project.Controllers
Visibility = project.VisibilityId.HasValue ? _visibilityModel.GetById(project.VisibilityId.Value)?.DisplayName : null,
});
}
private void LogAnalyticsOwnerProjectQuotaChange(Database.DataModel.Project project, User user)
{
var resourceTypes = _resourceTypeModel.GetAllWhere(x => x.Enabled == true);
var objects = resourceTypes.Select(x => CreateProjectQuotaReturnObject(x, project.Id));
_coscineLogger.AnalyticsLog(
new AnalyticsLogObject
{
Type = "Action",
Operation = "Owner Project Quota Change",
RoleId = _projectRoleModel.GetGetUserRoleForProject(project.Id, user.Id).ToString(),
ProjectId = project.Id.ToString(),
QuotaSize = objects.Select(x => $"{x.Name}: {x.Used}/{x.Allocated}").ToList()
});
}
private void LogAnalyticsInviteExternalUser(Database.DataModel.Project project, User user)
{
var resourceTypes = _resourceTypeModel.GetAllWhere(x => x.Enabled == true);
var objects = resourceTypes.Select(x => CreateProjectQuotaReturnObject(x, project.Id));
_coscineLogger.AnalyticsLog(
new AnalyticsLogObject
{
Type = "Action",
Operation = "Invite External User",
RoleId = _projectRoleModel.GetGetUserRoleForProject(project.Id, user.Id).ToString(),
ProjectId = project.Id.ToString()
});
}
private void LogAnalyticsCreateApplicationProfile(Database.DataModel.Project project, User user)
{
_coscineLogger.AnalyticsLog(
new AnalyticsLogObject
{
Type = "Action",
Operation = "Create Application Profile",
RoleId = _projectRoleModel.GetGetUserRoleForProject(project.Id, user.Id).ToString(),
ProjectId = project.Id.ToString()
});
}
}
}
\ No newline at end of file
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
......@@ -39,17 +39,6 @@ namespace Coscine.Api.Project.Controllers
_analyticsLogObject = new AnalyticsLogObject();
}
/// <summary>
/// Searchs no filter
/// </summary>
/// <returns>Ok</returns>
[HttpGet("[controller]/allNoFilter/")]
public IActionResult SearchNoFilter()
{
var user = _authenticator.GetUser();
return Ok(GetSearchResults(user.Id, "", ""));
}
/// <summary>
/// Returns results for the search word
/// </summary>
......@@ -62,18 +51,6 @@ namespace Coscine.Api.Project.Controllers
return Ok(GetSearchResults(user.Id, encodedSearchWord, ""));
}
/// <summary>
/// Returns searched projects with no filter
/// </summary>
/// <param name="projectId">Id of the project</param>
/// <returns>Ok</returns>
[HttpGet("[controller]/projectNoFilter/{projectId}")]
public IActionResult SearchProjectNoFilter(string projectId)
{
var user = _authenticator.GetUser();
return Ok(GetSearchResults(user.Id, "", projectId));
}
/// <summary>
/// Returns searched projects
/// </summary>
......
......@@ -5,7 +5,7 @@
<AssemblyName>Coscine.Api.Project</AssemblyName>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<TargetFramework>net5.0</TargetFramework>
<Version>2.6.2</Version>
<Version>2.7.0</Version>
</PropertyGroup>
<PropertyGroup>
<Authors>RWTH Aachen University</Authors>
......