diff --git a/.gitignore b/.gitignore index d2df1da5b5077d597142e85e19812ba900a4e81c..049d4ff517c43d098d972828e4f34a5fc7473ae0 100644 --- a/.gitignore +++ b/.gitignore @@ -268,3 +268,6 @@ __pycache__/ tools/* !tools/packages.config dist/ + +#linq2db +src/.tools/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 70f41bc841fef797f60350032c50e96f2d99fe9b..f7b030abc30bbf114db0df73c58ddd83b02678d8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -19,15 +19,6 @@ cake:Test: - master - tags -docs: - stage: docs - script: - - .\publishDocs.ps1 $GITLAB_TOKEN - variables: - GIT_STRATEGY: clone - only: - - tags - cake:Release: stage: release script: diff --git a/publishDocs.ps1 b/publishDocs.ps1 deleted file mode 100644 index f49b3b93e477ca9d57f7b1163b2bcf246f86d35d..0000000000000000000000000000000000000000 --- a/publishDocs.ps1 +++ /dev/null @@ -1,19 +0,0 @@ -param( - $token -) - -$remoteUrl = git config --get remote.origin.url -$remoteUrl = $remoteUrl.replace("git@", "") -$remoteUrl = $remoteUrl -replace "https(.*?)@","" -$remoteUrl = $remoteUrl.replace(":", "/") -$remoteUrl = $remoteUrl.replace(".git", ".wiki.git") - -$temporaryFolderName = "publishDocsTempFolder" - -git clone "https://gitlab-ci-token:$($token)@$($remoteUrl)" $temporaryFolderName -cd $temporaryFolderName -Remove-Item * -cp -r ../docs/* ./ -git add . -git commit -m "Docs: Documentation Update" -git push \ No newline at end of file diff --git a/src/.tools/linq2db.t4models/FirebirdSql.Data.FirebirdClient.dll b/src/.tools/linq2db.t4models/FirebirdSql.Data.FirebirdClient.dll deleted file mode 100644 index dd8e0105289d37e4be97c1419fd12a2cbc6e00c4..0000000000000000000000000000000000000000 Binary files a/src/.tools/linq2db.t4models/FirebirdSql.Data.FirebirdClient.dll and /dev/null differ diff --git a/src/.tools/linq2db.t4models/Init.ps1 b/src/.tools/linq2db.t4models/Init.ps1 deleted file mode 100644 index d7e710d55907097cf93d3d3e546801028e12d906..0000000000000000000000000000000000000000 --- a/src/.tools/linq2db.t4models/Init.ps1 +++ /dev/null @@ -1,9 +0,0 @@ -param($installPath, $toolsPath, $package, $project) - -# get the active solution -$solution = Get-Interface $dte.Solution ([EnvDTE80.Solution2]) -$solutionPath = [System.IO.Path]::GetDirectoryName($solution.FullName) -$linq2dbToolsPath = [System.IO.Path]::Combine($solutionPath, ".tools", "linq2db.t4models") - -# tools copy -xcopy $("$toolsPath\*.*") $("$linq2dbToolsPath\") /y /e diff --git a/src/.tools/linq2db.t4models/Microsoft.SqlServer.Types.dll b/src/.tools/linq2db.t4models/Microsoft.SqlServer.Types.dll deleted file mode 100644 index d4dd789939d82c83eb2720bf5868234ffafca86d..0000000000000000000000000000000000000000 Binary files a/src/.tools/linq2db.t4models/Microsoft.SqlServer.Types.dll and /dev/null differ diff --git a/src/.tools/linq2db.t4models/MySql.Data.dll b/src/.tools/linq2db.t4models/MySql.Data.dll deleted file mode 100644 index d97ad46b903f211ecb4e3e09bc44e7128ec887e2..0000000000000000000000000000000000000000 Binary files a/src/.tools/linq2db.t4models/MySql.Data.dll and /dev/null differ diff --git a/src/.tools/linq2db.t4models/Npgsql.dll b/src/.tools/linq2db.t4models/Npgsql.dll deleted file mode 100644 index c814b2681c107eac00cbb32812954bc9d163ba73..0000000000000000000000000000000000000000 Binary files a/src/.tools/linq2db.t4models/Npgsql.dll and /dev/null differ diff --git a/src/.tools/linq2db.t4models/Oracle.ManagedDataAccess.dll b/src/.tools/linq2db.t4models/Oracle.ManagedDataAccess.dll deleted file mode 100644 index c228b7093fb73194e9bf9689d99b1154a963cf15..0000000000000000000000000000000000000000 Binary files a/src/.tools/linq2db.t4models/Oracle.ManagedDataAccess.dll and /dev/null differ diff --git a/src/.tools/linq2db.t4models/SQLite.Interop.dll b/src/.tools/linq2db.t4models/SQLite.Interop.dll deleted file mode 100644 index 5b872055f5a4b1b759bfa0811901675d4c01346b..0000000000000000000000000000000000000000 Binary files a/src/.tools/linq2db.t4models/SQLite.Interop.dll and /dev/null differ diff --git a/src/.tools/linq2db.t4models/System.Data.SQLite.dll b/src/.tools/linq2db.t4models/System.Data.SQLite.dll deleted file mode 100644 index 59f3dcc375988dbd291f100bd06f259b88a887e0..0000000000000000000000000000000000000000 Binary files a/src/.tools/linq2db.t4models/System.Data.SQLite.dll and /dev/null differ diff --git a/src/.tools/linq2db.t4models/System.Threading.Tasks.Extensions.dll b/src/.tools/linq2db.t4models/System.Threading.Tasks.Extensions.dll deleted file mode 100644 index 6807cbd9ba040b9f721a03d7fbe6bc0ec088d50b..0000000000000000000000000000000000000000 Binary files a/src/.tools/linq2db.t4models/System.Threading.Tasks.Extensions.dll and /dev/null differ diff --git a/src/.tools/linq2db.t4models/linq2db.dll b/src/.tools/linq2db.t4models/linq2db.dll deleted file mode 100644 index bcbdac1d0742aad9fe3866797e3036961812b53d..0000000000000000000000000000000000000000 Binary files a/src/.tools/linq2db.t4models/linq2db.dll and /dev/null differ diff --git a/src/Project.Tests/DefaultControllerTests.cs b/src/Project.Tests/DefaultControllerTests.cs index 2ec3846c09fb824813529c547918984d17808d7b..16e01dfe3d293de987ca1f073f752e1091cf4191 100644 --- a/src/Project.Tests/DefaultControllerTests.cs +++ b/src/Project.Tests/DefaultControllerTests.cs @@ -1,7 +1,7 @@ using Coscine.Api.Project.Controllers; -using Coscine.Api.Project.Models; +using Coscine.Database.Models; using Coscine.ApiCommons.Utils; -using Coscine.Database.Model; +using Coscine.Database.DataModel; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Controllers; @@ -14,6 +14,9 @@ using System.IO; using System.Linq; using System.Management; using System.Security.Claims; +using LinqToDB.Data; +using Coscine.Database.Settings; +using Coscine.Configuration; namespace Coscine.Api.Project.Tests { @@ -21,7 +24,7 @@ namespace Coscine.Api.Project.Tests { protected T Controller { get; } - protected readonly List<Coscine.Database.Model.Project> Projects = new List<Coscine.Database.Model.Project>(); + protected readonly List<Coscine.Database.DataModel.Project> Projects = new List<Coscine.Database.DataModel.Project>(); protected readonly List<User> Users = new List<User>(); protected readonly List<ProjectRole> ProjectRoles = new List<ProjectRole>(); protected readonly List<ResourceType> ResourceTypes = new List<ResourceType>(); @@ -44,6 +47,7 @@ namespace Coscine.Api.Project.Tests [OneTimeSetUp] public void Setup() { + DataConnection.DefaultSettings = new CoscineSettings(new ConsulConfiguration()); DisciplineModel disciplineModel = new DisciplineModel(); Discipline = new Discipline() { @@ -87,7 +91,7 @@ namespace Coscine.Api.Project.Tests FakeControllerContext(user); - var project = new Coscine.Database.Model.Project() + var project = new Coscine.Database.DataModel.Project() { Description = "Description", ProjectName = "TestProject", @@ -122,7 +126,7 @@ namespace Coscine.Api.Project.Tests Projects.Add(projectModel.GetById(project.Id)); - var project2 = new Coscine.Database.Model.Project() + var project2 = new Coscine.Database.DataModel.Project() { Description = "Description2", ProjectName = "TestProject", diff --git a/src/Project.Tests/Project.Tests.csproj b/src/Project.Tests/Project.Tests.csproj index 3755d38c2e7baa734f4d774a74f41fd3dd0909ab..22ce06bf0230a957526f0c5d7e9fa4a7e20be3f9 100644 --- a/src/Project.Tests/Project.Tests.csproj +++ b/src/Project.Tests/Project.Tests.csproj @@ -56,17 +56,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.Action, Version=1.9.0.0, Culture=neutral, processorArchitecture=AMD64"> - <HintPath>..\packages\Coscine.Action.1.9.0\lib\net461\Coscine.Action.dll</HintPath> + <Reference Include="Coscine.Action, Version=1.10.0.0, Culture=neutral, processorArchitecture=AMD64"> + <HintPath>..\packages\Coscine.Action.1.10.0\lib\net461\Coscine.Action.dll</HintPath> </Reference> - <Reference Include="Coscine.ApiCommons, Version=1.5.0.0, Culture=neutral, PublicKeyToken=af4c1345df96546b, processorArchitecture=MSIL"> - <HintPath>..\packages\Coscine.ApiCommons.1.5.0\lib\net461\Coscine.ApiCommons.dll</HintPath> + <Reference Include="Coscine.ApiCommons, Version=1.6.0.0, Culture=neutral, PublicKeyToken=af4c1345df96546b, processorArchitecture=MSIL"> + <HintPath>..\packages\Coscine.ApiCommons.1.6.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> - <Reference Include="Coscine.Database, Version=1.15.1.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL"> - <HintPath>..\packages\Coscine.Database.1.15.1\lib\net461\Coscine.Database.dll</HintPath> + <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> <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> @@ -74,14 +74,8 @@ <Reference Include="Coscine.ProxyApi, Version=1.2.1.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\packages\Coscine.ProxyApi.1.2.1\lib\net461\Coscine.ProxyApi.dll</HintPath> </Reference> - <Reference Include="Coscine.SharePoint.Webparts.Vue, Version=1.4.0.0, Culture=neutral, PublicKeyToken=0fe8d3e516df6d98, processorArchitecture=MSIL"> - <HintPath>..\packages\Coscine.SharePoint.Webparts.Vue.1.4.0\lib\net461\Coscine.SharePoint.Webparts.Vue.dll</HintPath> - </Reference> - <Reference Include="dotNetRDF, Version=2.2.1.0, Culture=neutral, PublicKeyToken=6055ffe4c97cc780, processorArchitecture=MSIL"> - <HintPath>..\packages\dotNetRDF.2.2.1\lib\net40\dotNetRDF.dll</HintPath> - </Reference> - <Reference Include="dotNetRDF.Data.Virtuoso, Version=2.2.1.0, Culture=neutral, PublicKeyToken=6055ffe4c97cc780, processorArchitecture=MSIL"> - <HintPath>..\packages\dotNetRDF.Data.Virtuoso.2.2.1\lib\net40\dotNetRDF.Data.Virtuoso.dll</HintPath> + <Reference Include="Coscine.SharePoint.Webparts.Vue, Version=1.5.0.0, Culture=neutral, PublicKeyToken=0fe8d3e516df6d98, processorArchitecture=MSIL"> + <HintPath>..\packages\Coscine.SharePoint.Webparts.Vue.1.5.0\lib\net461\Coscine.SharePoint.Webparts.Vue.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> @@ -95,11 +89,8 @@ <Reference Include="linq2db, Version=2.6.4.0, Culture=neutral, PublicKeyToken=e41013125f9e410a, processorArchitecture=MSIL"> <HintPath>..\packages\linq2db.2.6.4\lib\net46\linq2db.dll</HintPath> </Reference> - <Reference Include="LinqKit, Version=1.1.16.0, Culture=neutral, PublicKeyToken=bc217f8844052a91, processorArchitecture=MSIL"> - <HintPath>..\packages\LinqKit.1.1.16\lib\net45\LinqKit.dll</HintPath> - </Reference> - <Reference Include="Metadata, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> - <HintPath>..\packages\Metadata.1.0.0\lib\net461\Metadata.dll</HintPath> + <Reference Include="LinqKit, Version=1.1.17.0, Culture=neutral, PublicKeyToken=bc217f8844052a91, processorArchitecture=MSIL"> + <HintPath>..\packages\LinqKit.1.1.17\lib\net45\LinqKit.dll</HintPath> </Reference> <Reference Include="Microsoft.AspNetCore, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.AspNetCore.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.dll</HintPath> @@ -392,11 +383,11 @@ <Reference Include="Microsoft.Win32.Registry, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.Win32.Registry.4.5.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath> </Reference> - <Reference Include="Moq, Version=4.12.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> - <HintPath>..\packages\Moq.4.12.0\lib\net45\Moq.dll</HintPath> + <Reference Include="Moq, Version=4.13.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> + <HintPath>..\packages\Moq.4.13.1\lib\net45\Moq.dll</HintPath> </Reference> <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> - <HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath> + <HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> </Reference> <Reference Include="Newtonsoft.Json.Bson, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\packages\Newtonsoft.Json.Bson.1.0.2\lib\net45\Newtonsoft.Json.Bson.dll</HintPath> @@ -614,8 +605,6 @@ <Compile Include="DefaultControllerTests.cs" /> <Compile Include="ProjectControllerTests.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="ResourceControllerTests.cs" /> - <Compile Include="ResourceTypeControllerTests.cs" /> </ItemGroup> <ItemGroup> <None Include="app.config" /> diff --git a/src/Project.Tests/ProjectControllerTests.cs b/src/Project.Tests/ProjectControllerTests.cs index 330df51924bce211087502acf0822ab0a21b99f0..c76c9b272d3c7c0a59c3cf4dd67d9e0819b4faad 100644 --- a/src/Project.Tests/ProjectControllerTests.cs +++ b/src/Project.Tests/ProjectControllerTests.cs @@ -1,16 +1,15 @@ using NUnit.Framework; using Coscine.Api.Project.Controllers; using Microsoft.AspNetCore.Mvc; -using Coscine.Api.Project.Models; +using Coscine.Database.Models; using System.Linq; -using Coscine.Api.Project.ReturnObjects; +using Coscine.Database.ReturnObjects; using System.IO; using System; -using Coscine.ApiCommons.Exceptions; using Coscine.ApiCommons.Factories; using System.Collections.Generic; +using Coscine.Database.Util; -#region DupFinder Exclusion namespace Coscine.Api.Project.Tests { [TestFixture] @@ -266,5 +265,4 @@ namespace Coscine.Api.Project.Tests Assert.IsTrue(Previous == projectModel.GetAll().ToArray().Length - Projects.Count); } } -} -#endregion \ No newline at end of file +} \ No newline at end of file diff --git a/src/Project.Tests/ResourceControllerTests.cs b/src/Project.Tests/ResourceControllerTests.cs deleted file mode 100644 index e728df469d34ae9fbab590cde0bb0b8e0244fa6c..0000000000000000000000000000000000000000 --- a/src/Project.Tests/ResourceControllerTests.cs +++ /dev/null @@ -1,120 +0,0 @@ -using Coscine.Api.Project.Controllers; -using Coscine.Api.Project.Models; -using Coscine.Api.Project.ReturnObjects; -using Coscine.ApiCommons.Exceptions; -using Coscine.ApiCommons.Factories; -using Microsoft.AspNetCore.Mvc; -using Newtonsoft.Json.Linq; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.IO; - -namespace Coscine.Api.Project.Tests -{ - [TestFixture] - public class ResourceControllerTests : DefaultControllerTests<ResourceController> - { - public ResourceControllerTests() : base(new ResourceController()) - { - } - - [Test] - public void TestControllerIndex() - { - var actionResult = Controller.Index(); - Assert.IsTrue(actionResult.GetType() == typeof(JsonResult)); - } - - [Test] - public void TestControllerGet() - { - var actionResult = Controller.Get(Resources[0].Id.ToString()); - Assert.IsTrue(actionResult.GetType() == typeof(JsonResult)); - - JsonResult result = (JsonResult)actionResult; - Assert.IsTrue(result.Value.GetType() == typeof(ResourceObject)); - - ResourceObject resourceObject = (ResourceObject)result.Value; - - Assert.IsTrue(resourceObject.Id == Resources[0].Id); - Assert.IsTrue(resourceObject.DisplayName == Resources[0].DisplayName); - Assert.IsTrue(resourceObject.Visibility.DisplayName == Resources[0].Visibility.DisplayName); - Assert.IsTrue(resourceObject.Type.Id == Resources[0].Type.Id); - Assert.IsTrue(resourceObject.Type.DisplayName == Resources[0].Type.DisplayName); - } - - - [Test] - public void TestControllerUpdate() - { - var actionResult = Controller.Get(Resources[0].Id.ToString()); - JsonResult result = (JsonResult)actionResult; - ResourceObject resourceObject = (ResourceObject)result.Value; - - resourceObject.DisplayName = "OtherName"; - resourceObject.ResourceTypeOption = JObject.FromObject(new RDSResourceTypeObject(Guid.NewGuid(), "PITLABTTEST", 0)); - - Stream stream = ObjectFactory<ResourceObject>.SerializeToStream(resourceObject); - - FakeControllerContext(Users[0], stream); - - actionResult = Controller.Update(Resources[0].Id.ToString()); - Assert.IsTrue(actionResult.GetType() == typeof(JsonResult)); - - // Cleanup - stream.Close(); - - stream = ObjectFactory<ResourceObject>.SerializeToStream(resourceObject); - - FakeControllerContext(Users[0], stream); - - actionResult = Controller.Update(Resources[1].Id.ToString()); - Assert.IsTrue(actionResult.GetType() == typeof(UnauthorizedObjectResult)); - - // Cleanup - stream.Close(); - } - - [Test] - public void TestControllerStoreToProject() - { - ResourceObject resourceObject = new ResourceObject( - Guid.NewGuid(), - "Test", - "testR", - "testD", - "keys", - "usageR", - new ResourceTypeObject(Resources[0].Type.Id, Resources[0].Type.DisplayName, Resources[0].Type.Enabled), - new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayNameDe, Discipline.DisplayNameEn) }, - new VisibilityObject(Visibility.Id, Visibility.DisplayName), - new LicenseObject(License.Id, License.DisplayName), - JObject.FromObject(new RDSResourceTypeObject(Guid.NewGuid(), "PITLABTTEST", 0)), - "link", - JToken.Parse("{}") - ); - - Stream stream = ObjectFactory<ResourceObject>.SerializeToStream(resourceObject); - - FakeControllerContext(Users[0], stream); - - var actionResult = Controller.StoreToProject(Projects[0].Id.ToString()); - Assert.IsTrue(actionResult.GetType() == typeof(JsonResult)); - JsonResult result = (JsonResult)actionResult; - resourceObject = (ResourceObject)result.Value; - - // Cleanup - stream.Close(); - - stream = ObjectFactory<ResourceObject>.SerializeToStream(resourceObject); - - FakeControllerContext(Users[0], stream); - - actionResult = Controller.Delete(resourceObject.Id.ToString()); - Assert.IsTrue(actionResult.GetType() == typeof(JsonResult)); - - stream.Close(); - } - } -} diff --git a/src/Project.Tests/ResourceTypeControllerTests.cs b/src/Project.Tests/ResourceTypeControllerTests.cs deleted file mode 100644 index 69dc700e7011ee811d28843a2f24c0abf828b81b..0000000000000000000000000000000000000000 --- a/src/Project.Tests/ResourceTypeControllerTests.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Coscine.Api.Project.Controllers; -using Microsoft.AspNetCore.Mvc; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.Tests -{ - [TestFixture] - public class ResourceTypeControllerTests : DefaultControllerTests<ResourceTypeController> - { - public ResourceTypeControllerTests() : base(new ResourceTypeController()) - { - } - - [Test] - public void TestGettingFields() - { - var actionResult = Controller.Fields(Resources[0].Type.Id.ToString()); - Assert.IsTrue(actionResult.GetType() == typeof(JsonResult)); - - JsonResult result = (JsonResult)actionResult; - List<string> fields = (List<string>) result.Value; - if(fields.Count() == 2) - { - Assert.IsTrue(fields[0] == "BucketName"); - Assert.IsTrue(fields[1] == "Size"); - } - else - { - Assert.Fail("Wrong field count!"); - } - } - } -} diff --git a/src/Project.Tests/app.config b/src/Project.Tests/app.config index 18737b637ddc443065a0f73228d995c78017e929..0b05b46dfcd37c4524d11fa88a90853aa86db5b0 100644 --- a/src/Project.Tests/app.config +++ b/src/Project.Tests/app.config @@ -88,7 +88,7 @@ </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Coscine.Database" publicKeyToken="767d77427707b70a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-1.15.1.0" newVersion="1.15.1.0" /> + <bindingRedirect oldVersion="0.0.0.0-1.16.0.0" newVersion="1.16.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" /> @@ -100,7 +100,7 @@ </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Coscine.SharePoint.Webparts.Vue" publicKeyToken="0fe8d3e516df6d98" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-1.4.0.0" newVersion="1.4.0.0" /> + <bindingRedirect oldVersion="0.0.0.0-1.5.0.0" newVersion="1.5.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Extensions.Configuration.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /> @@ -146,6 +146,10 @@ <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.6.0.0" newVersion="5.6.0.0" /> </dependentAssembly> + <dependentAssembly> + <assemblyIdentity name="LinqKit" publicKeyToken="bc217f8844052a91" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-1.1.17.0" newVersion="1.1.17.0" /> + </dependentAssembly> </assemblyBinding> </runtime> <entityFramework> diff --git a/src/Project.Tests/packages.config b/src/Project.Tests/packages.config index baf1b96a1c2089927302a5a05b2849c5dd1d868c..354c788fa9f08e6d1398a24085cf2a6199539c15 100644 --- a/src/Project.Tests/packages.config +++ b/src/Project.Tests/packages.config @@ -4,22 +4,19 @@ <package id="AutoMapper.Extensions.Microsoft.DependencyInjection" version="6.0.0" targetFramework="net472" /> <package id="Castle.Core" version="4.4.0" targetFramework="net472" /> <package id="Consul" version="0.7.2.6" targetFramework="net472" /> - <package id="Coscine.Action" version="1.9.0" targetFramework="net472" /> - <package id="Coscine.ApiCommons" version="1.5.0" targetFramework="net472" /> + <package id="Coscine.Action" version="1.10.0" targetFramework="net472" /> + <package id="Coscine.ApiCommons" version="1.6.0" targetFramework="net472" /> <package id="Coscine.Configuration" version="1.4.0" targetFramework="net472" /> - <package id="Coscine.Database" version="1.15.1" targetFramework="net472" /> + <package id="Coscine.Database" version="1.16.0" targetFramework="net472" /> <package id="Coscine.Logging" version="1.0.1" targetFramework="net472" /> <package id="Coscine.ProxyApi" version="1.2.1" targetFramework="net472" /> - <package id="Coscine.SharePoint.Webparts.Vue" version="1.4.0" targetFramework="net472" /> - <package id="dotNetRDF" version="2.2.1" targetFramework="net472" /> - <package id="dotNetRDF.Data.Virtuoso" version="2.2.1" targetFramework="net472" /> + <package id="Coscine.SharePoint.Webparts.Vue" version="1.5.0" targetFramework="net472" /> <package id="EntityFramework" version="6.2.0" targetFramework="net472" /> <package id="HtmlAgilityPack" version="1.8.2" targetFramework="net472" /> <package id="linq2db" version="2.6.4" targetFramework="net472" /> <package id="linq2db.SqlServer" version="2.6.4" targetFramework="net472" /> <package id="linq2db.t4models" version="2.6.4" targetFramework="net472" /> - <package id="LinqKit" version="1.1.16" targetFramework="net472" /> - <package id="Metadata" version="1.0.0" targetFramework="net472" /> + <package id="LinqKit" version="1.1.17" targetFramework="net472" /> <package id="Microsoft.AspNetCore" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.AspNetCore.Antiforgery" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.AspNetCore.Authentication" version="2.2.0" targetFramework="net472" /> @@ -122,8 +119,8 @@ <package id="Microsoft.IdentityModel.Tokens" version="5.6.0" targetFramework="net472" /> <package id="Microsoft.Net.Http.Headers" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.Win32.Registry" version="4.5.0" targetFramework="net472" /> - <package id="Moq" version="4.12.0" targetFramework="net472" /> - <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net472" /> + <package id="Moq" version="4.13.1" targetFramework="net472" /> + <package id="Newtonsoft.Json" version="12.0.3" targetFramework="net472" /> <package id="Newtonsoft.Json.Bson" version="1.0.2" targetFramework="net472" /> <package id="NLog" version="4.6.8" targetFramework="net472" /> <package id="NLog.Config" version="4.6.8" targetFramework="net472" /> diff --git a/src/Project/App.config b/src/Project/App.config index 904a3bca6a8f977af3cf15ac10f6e77f7938cbf1..1ff23b04ddd41b21a2225cc747a160a0e479e5d3 100644 --- a/src/Project/App.config +++ b/src/Project/App.config @@ -91,7 +91,7 @@ </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Coscine.Database" publicKeyToken="767d77427707b70a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-1.15.1.0" newVersion="1.15.1.0" /> + <bindingRedirect oldVersion="0.0.0.0-1.16.0.0" newVersion="1.16.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" /> @@ -103,7 +103,7 @@ </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Coscine.SharePoint.Webparts.Vue" publicKeyToken="0fe8d3e516df6d98" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" /> + <bindingRedirect oldVersion="0.0.0.0-1.5.0.0" newVersion="1.5.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Extensions.Configuration.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /> @@ -149,6 +149,10 @@ <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.6.0.0" newVersion="5.6.0.0" /> </dependentAssembly> + <dependentAssembly> + <assemblyIdentity name="LinqKit" publicKeyToken="bc217f8844052a91" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-1.1.17.0" newVersion="1.1.17.0" /> + </dependentAssembly> </assemblyBinding> </runtime> <entityFramework> diff --git a/src/Project/Controllers/DataSourceController.cs b/src/Project/Controllers/DataSourceController.cs deleted file mode 100644 index 8eb0c2697ef39253c47208c9f4e9a6c72002d369..0000000000000000000000000000000000000000 --- a/src/Project/Controllers/DataSourceController.cs +++ /dev/null @@ -1,542 +0,0 @@ -using Coscine.Api.Project.Models; -using Coscine.Api.Project.ReturnObjects; -using Coscine.ApiCommons; -using Coscine.ApiCommons.Factories; -using Coscine.ApiCommons.Utils; -using Coscine.Configuration; -using Coscine.Database.Model; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.IdentityModel.Tokens.Jwt; -using System.IO; -using System.Linq; -using System.Net.Http; -using System.Net.Http.Headers; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using System.Web; - -#region DupFinder Exclusion - -namespace Coscine.Api.Project.Controllers -{ - [Authorize] - public class DataSourceController : Controller - { - private readonly IConfiguration _configuration; - private readonly JWTHandler _jwtHandler; - // make to lazy property - private static readonly HttpClient Client; - private readonly Authenticator _authenticator; - private readonly ResourceModel _resourceModel; - private readonly ProjectModel _projectModel; - - static DataSourceController() - { - Client = new HttpClient - { - Timeout = TimeSpan.FromMinutes(30) - }; - } - - public DataSourceController() - { - _configuration = Program.Configuration; - _jwtHandler = new JWTHandler(_configuration); - _authenticator = new Authenticator(this, _configuration); - _resourceModel = new ResourceModel(); - _projectModel = new ProjectModel(); - } - - // inferring a ../ (urlencoded) can manipulate the url. - // However the constructed signature for s3 won't match and it will not be resolved. - // This may be a problem for other provider! - [HttpGet("[controller]/{resourceId}/{path}")] - public async Task<IActionResult> GetWaterButlerFolder(string resourceId, string path) - { - var user = _authenticator.GetUser(); - - path = FormatPath(path); - - var check = CheckResourceIdAndPath(resourceId, path, out Resource resource); - if (check != null) - { - return check; - } - - if (!_resourceModel.HasAccess(user, resource, UserRoles.Owner, UserRoles.Member)) - { - return BadRequest("User does not have permission to the resource."); - } - - var authHeader = BuildAuthHeader(resource); - - if (authHeader == null) - { - return BadRequest($"No provider for: \"{resource.Type.DisplayName}\"."); - } - else - { - // If the path is null, an empty string is added. - string url = $"{_configuration.GetString("coscine/global/waterbutler_url")}{GetResourceTypeName(resource)}{path}"; - - var request = new HttpRequestMessage(HttpMethod.Get, url); - request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authHeader); - - // Thread safe according to msdn and HttpCompletionOption sets it to get only headers first. - var response = await Client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); - if (response.IsSuccessStatusCode) - { - if (response.Content.Headers.Contains("Content-Disposition")) - { - return File(await response.Content.ReadAsStreamAsync(), - response.Content.Headers.GetValues("Content-Type").First()); - } - else - { - var data = JObject.Parse(await response.Content.ReadAsStringAsync())["data"]; - return Ok(new WaterbutlerObject(path, data)); - } - } - else - { - return FailedRequest(response, path); - } - } - } - - // inferring a ../ (urlencoded) can manipulate the url. - // However the constructed signature for s3 won't match and it will not be resolved. - // This may be a problem for other provider! - [HttpPut("[controller]/{resourceId}/{path}")] - [DisableRequestSizeLimit] - public async Task<IActionResult> PutUploadFile(string resourceId, string path) - { - var user = _authenticator.GetUser(); - - path = FormatPath(path); - - var check = CheckResourceIdAndPath(resourceId, path, out Resource resource); - if (check != null) - { - return check; - } - - if(!_resourceModel.HasAccess(user, resource, UserRoles.Owner, UserRoles.Member)) - { - return BadRequest("User does not have permission to the resource."); - } - - var authHeader = BuildAuthHeader(resource, new string[] { "gitlab" }); - - if (authHeader == null) - { - return BadRequest($"No provider for: \"{resource.Type.DisplayName}\"."); - } - else - { - // If the path is null, an empty string is added. - string url = $"{_configuration.GetString("coscine/global/waterbutler_url")}{GetResourceTypeName(resource)}/?kind=file&name={path}"; - - try - { - var response = await UploadFile(url, authHeader, Request.Body); - if (response.IsSuccessStatusCode) - { - return NoContent(); - } - else - { - return FailedRequest(response, path); - } - } - catch (Exception e) - { - Console.WriteLine(e); - return BadRequest(e); - } - } - } - - // inferring a ../ (urlencoded) can manipulate the url. - // However the constructed signature for s3 won't match and it will not be resolved. - // This may be a problem for other provider! - [HttpPut("[controller]/{resourceId}/{path}/update")] - [DisableRequestSizeLimit] - public async Task<IActionResult> PutUpdateFile(string resourceId, string path) - { - var user = _authenticator.GetUser(); - - path = FormatPath(path); - - var check = CheckResourceIdAndPath(resourceId, path, out Resource resource); - if (check != null) - { - return check; - } - - if (!_resourceModel.HasAccess(user, resource, UserRoles.Owner, UserRoles.Member)) - { - return BadRequest("User does not have permission to the resource."); - } - - var authHeader = BuildAuthHeader(resource, new string[] { "gitlab" }); - - if (authHeader == null) - { - return BadRequest($"No provider for: \"{resource.Type.DisplayName}\"."); - } - else - { - // If the path is null, an empty string is added. - string url = $"{_configuration.GetString("coscine/global/waterbutler_url")}{GetResourceTypeName(resource)}/{path}?kind=file"; - - try - { - var response = await UploadFile(url, authHeader, Request.Body); - if (response.IsSuccessStatusCode) - { - return NoContent(); - } - else - { - return FailedRequest(response, path); - } - } - catch (Exception e) - { - Console.WriteLine(e); - return BadRequest(e); - } - } - } - - private string FormatPath(string path) - { - if (!string.IsNullOrWhiteSpace(path)) - { - path = HttpUtility.UrlDecode(path); - path = path.Replace(@"\", "/"); - } - - return path; - } - - private string GetResourceTypeName(Resource resource) - { - if (resource.Type.DisplayName.ToLower().Equals("s3")) { - return "rds"; - } - else - { - return resource.Type.DisplayName.ToLower(); - } - } - - private string GetResourceTypeName(JToken resource) - { - if (resource["type"]["displayName"].ToString().ToLower().Equals("s3")) - { - return "rds"; - } - else - { - return resource["type"]["displayName"].ToString().ToLower(); - } - } - - - public async Task<HttpResponseMessage> UploadFile(string url, string authHeader, Stream stream) - { - var request = new HttpRequestMessage(HttpMethod.Put, url); - request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authHeader); - request.Content = new StreamContent(stream); - return await Client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); - } - - [HttpDelete("[controller]/{resourceId}/{path}")] - public async Task<IActionResult> Delete(string resourceId, string path) - { - var user = _authenticator.GetUser(); - - path = FormatPath(path); - - var check = CheckResourceIdAndPath(resourceId, path, out Resource resource); - if (check != null) - { - return check; - } - - if (!_resourceModel.HasAccess(user, resource, UserRoles.Owner, UserRoles.Member)) - { - return BadRequest("User does not have permission to the resource."); - } - - var authHeader = BuildAuthHeader(resource, new string[] { "gitlab" }); - - if (authHeader == null) - { - return BadRequest($"No provider for: \"{resource.Type.DisplayName}\"."); - } - else - { - // If the path is null, an empty string is added. - string url = $"{_configuration.GetString("coscine/global/waterbutler_url")}{GetResourceTypeName(resource)}{path}"; - - var request = new HttpRequestMessage(HttpMethod.Delete, url); - request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authHeader); - - // Thread safe according to msdn and HttpCompletionOption sets it to get only headers first. - try - { - var response = await Client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); - if (response.IsSuccessStatusCode) - { - return NoContent(); - } - else - { - return FailedRequest(response, path); - } - } - catch (Exception e) - { - Console.WriteLine(e); - return BadRequest(e); - } - } - } - - [HttpPost("[controller]/validate")] - public async Task<IActionResult> IsResourceValid() - { - var path = "/"; - - JToken resource = ObjectFactory<JToken>.DeserializeFromStream(Request.Body); - - string authHeader = null; - if (resource["type"]["displayName"].ToString().ToLower() == "s3") - { - S3ResourceType s3ResourceType = new S3ResourceType(); - s3ResourceType.BucketName = resource["resourceTypeOption"]["BucketName"].ToString(); - s3ResourceType.AccessKey = resource["resourceTypeOption"]["AccessKey"].ToString(); - s3ResourceType.SecretKey = resource["resourceTypeOption"]["SecretKey"].ToString(); - authHeader = BuildS3AuthHeader(s3ResourceType); - } - else if (resource["type"]["displayName"].ToString().ToLower() == "gitlab") - { - GitlabResourceType gitlabResourceType = new GitlabResourceType - { - RepositoryNumber = (int)resource["resourceTypeOption"]["RepositoryNumber"], - RepositoryUrl = resource["resourceTypeOption"]["RepositoryUrl"].ToString(), - Token = resource["resourceTypeOption"]["Token"].ToString() - }; - authHeader = BuildGitlabAuthHeader(gitlabResourceType); - } - - if (authHeader == null) - { - return BadRequest($"No provider for: \"{resource["type"]["displayName"].ToString()}\"."); - } - else - { - // If the path is null, an empty string is added. - string url = $"{_configuration.GetString("coscine/global/waterbutler_url")}{GetResourceTypeName(resource)}{path}"; - - var request = new HttpRequestMessage(HttpMethod.Get, url); - request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authHeader); - - // Thread safe according to msdn and HttpCompletionOption sets it to get only headers first. - var response = await Client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); - if (response.IsSuccessStatusCode) - { - if (response.Content.Headers.Contains("Content-Disposition")) - { - return File(await response.Content.ReadAsStreamAsync(), - response.Content.Headers.GetValues("Content-Type").First()); - } - else - { - var data = JObject.Parse(await response.Content.ReadAsStringAsync())["data"]; - return Ok(new WaterbutlerObject(path, data)); - } - } - else - { - return FailedRequest(response, path); - } - } - } - - private IActionResult FailedRequest(HttpResponseMessage response, string path) - { - if (response.StatusCode == System.Net.HttpStatusCode.NotFound) - { - return NotFound($"Could not find object for: \"{path}\"."); - } - else if (response.StatusCode == System.Net.HttpStatusCode.Forbidden) - { - return Forbid("Not allowed to access the datasource."); - } - else - { - return BadRequest($"Error in communication with waterbutler: {response.StatusCode}"); - } - } - - private IActionResult CheckResourceIdAndPath(string resourceId, string path, out Resource resource) - { - resource = null; - - if (string.IsNullOrWhiteSpace(path)) - { - return BadRequest($"Your path \"{path}\" is empty."); - } - - Regex rgx = new Regex(@"[\:?*<>|]+"); - if (rgx.IsMatch(path)) - { - return BadRequest($"Your path \"{path}\" contains bad characters. The following characters are not permissible: {@"\/:?*<>|"}."); - } - - if (!Guid.TryParse(resourceId, out Guid resourceGuid)) - { - return BadRequest($"{resourceId} is not a guid."); - } - - try - { - resource = _resourceModel.GetById(resourceGuid); - if (resource == null) - { - return NotFound($"Could not find resource with id: {resourceId}"); - } - } - catch (Exception) - { - return NotFound($"Could not find resource with id: {resourceId}"); - } - - if (resource.Type == null) - { - ResourceTypeModel resourceTypeModel = new ResourceTypeModel(); - resource.Type = resourceTypeModel.GetById(resource.TypeId); - } - - // All good - return null; - } - - private string BuildWaterbutlerPayload(Dictionary<string, object> auth, Dictionary<string, object> credentials, Dictionary<string, object> settings) - { - var data = new Dictionary<string, object> - { - { "auth", auth }, - { "credentials", credentials }, - { "settings", settings }, - { "callback_url", "rwth-aachen.de" } - }; - - var payload = new JwtPayload - { - { "data", data } - }; - - return _jwtHandler.GenerateJwtToken(payload); - } - - private string BuildAuthHeader(Resource resource, IEnumerable<string> exclude = null) - { - if (exclude != null && exclude.Contains(resource.Type.DisplayName.ToLower())) - { - return null; - } - - string authHeader = null; - if (resource.Type.DisplayName.ToLower() == "rds") - { - RDSResourceTypeModel rdsResourceTypeModel = new RDSResourceTypeModel(); - var rdsResourceType = rdsResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value); - - authHeader = BuildRdsAuthHeader(rdsResourceType); - } - else if (resource.Type.DisplayName.ToLower() == "s3") - { - S3ResourceTypeModel s3ResourceTypeModel = new S3ResourceTypeModel(); - var s3ResourceType = s3ResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value); - - authHeader = BuildS3AuthHeader(s3ResourceType); - } - else if (resource.Type.DisplayName.ToLower() == "gitlab") - { - GitlabResourceTypeModel gitlabResourceTypeModel = new GitlabResourceTypeModel(); - var gitlabResourceType = gitlabResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value); - - authHeader = BuildGitlabAuthHeader(gitlabResourceType); - } - - return authHeader; - } - - private string BuildRdsAuthHeader(RDSResourceType rdsResourceType) - { - var auth = new Dictionary<string, object>(); - - var credentials = new Dictionary<string, object> - { - { "access_key", _configuration.GetStringAndWait("coscine/global/buckets/accessKey") }, - { "secret_key", _configuration.GetStringAndWait("coscine/global/buckets/secretKey") } - }; - - var settings = new Dictionary<string, object> - { - { "bucket", rdsResourceType.BucketName } - }; - - return BuildWaterbutlerPayload(auth, credentials, settings); - } - - private string BuildS3AuthHeader(S3ResourceType s3ResourceType) - { - var auth = new Dictionary<string, object>(); - - var credentials = new Dictionary<string, object> - { - { "access_key", s3ResourceType.AccessKey }, - { "secret_key", s3ResourceType.SecretKey } - }; - - var settings = new Dictionary<string, object> - { - { "bucket", s3ResourceType.BucketName } - }; - - return BuildWaterbutlerPayload(auth, credentials, settings); - } - - private string BuildGitlabAuthHeader(GitlabResourceType gitlabResourceType) - { - - var auth = new Dictionary<string, object>(); - - var credentials = new Dictionary<string, object> - { - { "token", gitlabResourceType.Token } - }; - - var settings = new Dictionary<string, object> - { - { "owner", "Tester"}, - { "repo", gitlabResourceType.RepositoryUrl}, - { "repo_id", gitlabResourceType.RepositoryNumber.ToString()}, - { "host", "https://git.rwth-aachen.de"} - }; - - return BuildWaterbutlerPayload(auth, credentials, settings); - } - } -} -#endregion diff --git a/src/Project/Controllers/DisciplineController.cs b/src/Project/Controllers/DisciplineController.cs index 34ae92d571cd01013de3d444e6e42b1eed827348..6650df79f51c94dabfd279eaa75e1464f3665fab 100644 --- a/src/Project/Controllers/DisciplineController.cs +++ b/src/Project/Controllers/DisciplineController.cs @@ -1,5 +1,5 @@ -using Coscine.Api.Project.Models; -using Coscine.Api.Project.ReturnObjects; +using Coscine.Database.Models; +using Coscine.Database.ReturnObjects; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Linq; diff --git a/src/Project/Controllers/InstituteController.cs b/src/Project/Controllers/InstituteController.cs index 2fff9d6f9256c56de08db5b49bb6b9999cfcd077..671e6c8c9d704faf2956998856f683d1e532f682 100644 --- a/src/Project/Controllers/InstituteController.cs +++ b/src/Project/Controllers/InstituteController.cs @@ -1,5 +1,5 @@ -using Coscine.Api.Project.Models; -using Coscine.Api.Project.ReturnObjects; +using Coscine.Database.Models; +using Coscine.Database.ReturnObjects; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Linq; diff --git a/src/Project/Controllers/LicenseController.cs b/src/Project/Controllers/LicenseController.cs index c4210d9876bfaba22baf91813ba49b5dad38c24a..ce19251bdaf4f7c106059a5f47e115a625077eea 100644 --- a/src/Project/Controllers/LicenseController.cs +++ b/src/Project/Controllers/LicenseController.cs @@ -1,5 +1,5 @@ -using Coscine.Api.Project.Models; -using Coscine.Api.Project.ReturnObjects; +using Coscine.Database.Models; +using Coscine.Database.ReturnObjects; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Linq; diff --git a/src/Project/Controllers/MetadataController.cs b/src/Project/Controllers/MetadataController.cs deleted file mode 100644 index db5099ae32f7d84448fc1bf2032efc459b2aa211..0000000000000000000000000000000000000000 --- a/src/Project/Controllers/MetadataController.cs +++ /dev/null @@ -1,254 +0,0 @@ -using Coscine.Api.Project.Models; -using Coscine.ApiCommons; -using Coscine.ApiCommons.Exceptions; -using Coscine.ApiCommons.Factories; -using Microsoft.AspNetCore.Mvc; -using Newtonsoft.Json.Linq; -using System; -using System.Linq; -using VDS.RDF.Writing; -using VDS.RDF.Parsing; -using VDS.RDF; -using Metadata; -using System.Web; -using Microsoft.AspNetCore.Authorization; - -namespace Coscine.Api.Project.Controllers -{ - - [Authorize] - public class MetadataController : Controller - { - private readonly Authenticator _authenticator; - private readonly MetadataModel _metadataModel; - private readonly ResourceModel _resourceModel; - private readonly ProjectModel _projectModel; - private readonly Util _util; - - public MetadataController() - { - _authenticator = new Authenticator(this, Program.Configuration); - _metadataModel = new MetadataModel(); - _resourceModel = new ResourceModel(); - _projectModel = new ProjectModel(); - _util = new Util(); - } - - [Route("[controller]")] - public IActionResult Index() - { - return NoContent(); - } - - // returns the basic application profile - [HttpGet("[controller]/resource/{projectId}/ap/{applicationProfileId}")] - public IActionResult GetApplicationProfile(Guid projectId, string applicationProfileId) - { - var user = _authenticator.GetUser(); - - if (_projectModel.HasAccess(user, _projectModel.GetById(projectId), UserRoles.Owner, UserRoles.Member)) - { - var graph = _util.GetGraph(HttpUtility.UrlDecode(applicationProfileId)); - - var json = JToken.Parse(VDS.RDF.Writing.StringWriter.Write(graph, new RdfJsonWriter())); - - return Json(json); - } - else - { - throw new NotAuthorizedException("User is no project member!"); - } - - } - - // returns the application profile with the fixed values - [HttpGet("[controller]/resource/{resourceId}/apc/{applicationProfileId}")] - public IActionResult GetApplicationProfileComplete(string resourceId, string applicationProfileId) - { - var user = _authenticator.GetUser(); - - var resource = _resourceModel.GetById(Guid.Parse(resourceId)); - if (_resourceModel.HasAccess(user, resource, UserRoles.Owner, UserRoles.Member) && applicationProfileId != null) - { - var graph = _util.GetGraph(HttpUtility.UrlDecode(applicationProfileId)); - var fixedValuesGraph = new Graph(); - - fixedValuesGraph.LoadFromString(resource.FixedValues, new RdfJsonParser()); - - graph.Merge(fixedValuesGraph); - - var json = JToken.Parse(VDS.RDF.Writing.StringWriter.Write(graph, new RdfJsonWriter())); - - return Ok(json); - } - else - { - throw new NotAuthorizedException("User is no project member!"); - } - - } - - [HttpGet("[controller]/project/{projectId}/aplist/")] - public IActionResult ListAllApplicationProfiles(Guid projectId) - { - var user = _authenticator.GetUser(); - if (_projectModel.HasAccess(user, _projectModel.GetById(projectId), UserRoles.Owner, UserRoles.Member)) - { - var graphUris = _util.ListGraphs(); - - return Json(new JArray(graphUris.Select(x => x.ToString()).Where(x => x.StartsWith("https://purl.org/coscine/ap/")))); - } - else - { - throw new NotAuthorizedException("User is no project member!"); - } - } - - [HttpGet("[controller]/resource/{resourceId}/filename/{filename}/ver/{version}")] - public IActionResult GetMetadataForFile(string resourceId, string filename, string version) - { - var user = _authenticator.GetUser(); - var resource = _resourceModel.GetById(Guid.Parse(resourceId)); - if (_resourceModel.HasAccess(user, resource, UserRoles.Owner, UserRoles.Member)) - { - var id = _metadataModel.GenerateId(resourceId, filename, version); - var uri = _metadataModel.CreateUri(id); - var graph = _util.GetGraph(uri); - return Json(JToken.Parse(VDS.RDF.Writing.StringWriter.Write(graph, new RdfJsonWriter())).ToString()); - } - else - { - throw new NotAuthorizedException("User is no project member!"); - } - } - - [HttpPut("[controller]/resource/{resourceId}/filename/{filename}/ver/{version}")] - public IActionResult StoreMetadataForFile(string resourceId, string filename, string version) - { - var innerBlock = ObjectFactory<JToken>.DeserializeFromStream(Request.Body); - var graphName = _metadataModel.GenerateId(resourceId, filename, version); - var graphNameUri = _metadataModel.CreateUri(graphName); - var json = new JObject - { - [graphName] = innerBlock - }; - - var user = _authenticator.GetUser(); - var resource = _resourceModel.GetById(Guid.Parse(resourceId)); - - if (_resourceModel.HasAccess(user, resource, UserRoles.Owner, UserRoles.Member)) - { - json[graphName]["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"] = new JArray - { - new JObject - { - ["value"] = resource.ApplicationProfile.Substring(0, resource.ApplicationProfile.Length-1), - ["type"] = "uri" - } - }; - // throw bad request if empty node value is detected - JToken root = json.First.First; - foreach (var node in root) - { - string nodeValue = node.First.First["value"].ToString().ToLower(); - if (String.IsNullOrEmpty(nodeValue)) - { - throw new ArgumentException("Empty values in application profile are not accepted."); - } - } - - var graph = new Graph(); - graph.LoadFromString(json.ToString(), new RdfJsonParser()); - - var fixedValuesGraph = new Graph(); - fixedValuesGraph.LoadFromString(resource.FixedValues, new RdfJsonParser()); - - foreach(var triple in fixedValuesGraph.Triples.Where(x => x.Predicate.ToString() == "https://purl.org/coscine/fixedValue")) - { - // Remove any existing triples - foreach (var triple2 in graph.GetTriplesWithSubjectPredicate(graph.CreateUriNode(graphNameUri), triple.Subject).ToList()) - { - graph.Retract(triple2); - } - graph.Assert(graph.CreateUriNode(graphNameUri), triple.Subject, triple.Object); - } - - // Default values is not checked or added - - // validate the data - if (_util.ValidateShacl(graph, graphNameUri)) - { - // store the data - if (_util.HasGraph(graphNameUri)) - { - _util.ClearGraph(graphNameUri); - } - else - { - _util.CreateNamedGraph(graphNameUri); - } - - // BaseUri must be set for the sparql query - graph.BaseUri = graphNameUri; - _util.AddGraph(graph); - - return NoContent(); - } - else - { - throw new NotAuthorizedException("Data has the wrong format!"); - } - - } - else - { - throw new NotAuthorizedException("User is no project member!"); - } - } - - [HttpGet("[controller]/vocabulary/{projectId}/{path}")] - public IActionResult GetVocabulary(Guid projectId, string path) - { - var user = _authenticator.GetUser(); - if (_projectModel.HasAccess(user, _projectModel.GetById(projectId), UserRoles.Owner, UserRoles.Member)) - { - var graph = _util.GetGraph(HttpUtility.UrlDecode(path)); - - var de = new JArray(); - foreach (var kv in _util.GetVocabularyLabels(graph, "de")) - { - JObject obj = new JObject - { - ["value"] = kv.Key, - ["name"] = kv.Value - }; - de.Add(obj); - } - - var en = new JArray(); - foreach(var kv in _util.GetVocabularyLabels(graph, "en")) - { - JObject obj = new JObject - { - ["value"] = kv.Key, - ["name"] = kv.Value - }; - en.Add(obj); - } - - JObject json = new JObject - { - ["de"] = de, - ["en"] = en - }; - - return Json(json); - } - else - { - throw new NotAuthorizedException("User is no project member!"); - } - } - - } -} diff --git a/src/Project/Controllers/ProjectController.cs b/src/Project/Controllers/ProjectController.cs index 19556cc27e9a632b7bbcbc238a68673812ed1f3e..5a6c3a827caf41717c4b660365da98d6d3605228 100644 --- a/src/Project/Controllers/ProjectController.cs +++ b/src/Project/Controllers/ProjectController.cs @@ -1,7 +1,7 @@ using Coscine.Action; using Coscine.Action.EventArgs; -using Coscine.Api.Project.Models; -using Coscine.Api.Project.ReturnObjects; +using Coscine.Database.Models; +using Coscine.Database.ReturnObjects; using Coscine.ApiCommons; using Coscine.ApiCommons.Factories; using Microsoft.AspNetCore.Mvc; @@ -9,6 +9,7 @@ using System; using System.Linq; using Coscine.Configuration; using Microsoft.AspNetCore.Authorization; +using Coscine.Database.Util; namespace Coscine.Api.Project.Controllers { @@ -120,12 +121,12 @@ namespace Coscine.Api.Project.Controllers } } - public void DeleteProject(Database.Model.Project project, bool isHard = false, bool propegateAction = true) + public void DeleteProject(Database.DataModel.Project project, bool isHard = false, bool propegateAction = true) { var subProjectModel = new SubProjectModel(); foreach(var subProject in subProjectModel.GetAllWhere((subProject) => subProject.ProjectId == project.Id)) { - Database.Model.Project subProjectObject; + Database.DataModel.Project subProjectObject; if (isHard) { subProjectModel.Delete(subProject); diff --git a/src/Project/Controllers/ProjectRoleController.cs b/src/Project/Controllers/ProjectRoleController.cs index 4dca837349c9e050fa3be359c769b75d98f7883a..ecb48d77371fe361fe985d47a3cf63e0d8f3b9f8 100644 --- a/src/Project/Controllers/ProjectRoleController.cs +++ b/src/Project/Controllers/ProjectRoleController.cs @@ -1,7 +1,7 @@ using Coscine.Action; using Coscine.Action.EventArgs; -using Coscine.Api.Project.Models; -using Coscine.Api.Project.ReturnObjects; +using Coscine.Database.Models; +using Coscine.Database.ReturnObjects; using Coscine.ApiCommons; using Coscine.ApiCommons.Factories; using Coscine.Configuration; @@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using System.Linq; +using Coscine.Database.Util; namespace Coscine.Api.Project.Controllers { diff --git a/src/Project/Controllers/ResourceController.cs b/src/Project/Controllers/ResourceController.cs deleted file mode 100644 index bee1704f7c615a3a9817b430c0fa8ee9d7dba8dc..0000000000000000000000000000000000000000 --- a/src/Project/Controllers/ResourceController.cs +++ /dev/null @@ -1,149 +0,0 @@ -using Coscine.Api.Project.Models; -using Coscine.Api.Project.ReturnObjects; -using Coscine.ApiCommons; -using Coscine.ApiCommons.Factories; -using Microsoft.AspNetCore.Mvc; -using System; -using System.Linq; -using Coscine.Action; -using Coscine.Configuration; -using Coscine.Action.EventArgs; -using Microsoft.AspNetCore.Authorization; -using Newtonsoft.Json.Linq; -using Coscine.Database.Model; - -namespace Coscine.Api.Project.Controllers -{ - [Authorize] - public class ResourceController : Controller - { - private readonly Authenticator _authenticator; - private readonly ResourceModel _resourceModel; - private readonly IConfiguration _configuration; - private readonly Emitter _emitter; - - public ResourceController() - { - _authenticator = new Authenticator(this, Program.Configuration); - _configuration = Program.Configuration; - _resourceModel = new ResourceModel(); - _emitter = new Emitter(this._configuration); - } - - [Route("[controller]")] - public IActionResult Index() - { - var user = _authenticator.GetUser(); - return Json(_resourceModel.GetAllWhere((resource) => - (from projectResource in resource.ProjectResourceResourceIdIds - where (from projectRole in projectResource.Project.ProjectRolesProjectIdIds - where projectRole.User == user - && (projectRole.Role.DisplayName == "Owner" || projectRole.Role.DisplayName == "Member") - select projectRole).Any() - select projectResource).Any() - ).Select((resource) => _resourceModel.CreateReturnObjectFromDatabaseObject(resource))); - } - - - [HttpGet("[controller]/{id}")] - public IActionResult Get(string id) - { - var resource = _resourceModel.GetById(Guid.Parse(id)); - var user = _authenticator.GetUser(); - if (_resourceModel.HasAccess(user, resource, UserRoles.Owner, UserRoles.Member)) - { - _resourceModel.SetType(resource); - return Json(_resourceModel.CreateReturnObjectFromDatabaseObject(resource)); - } - else - { - return Unauthorized("User does not own resource!"); - } - } - - [HttpGet("[controller]/resource/{id}/isCreator")] - public IActionResult IsUserResourceCreator(string id) - { - Resource resource = _resourceModel.GetById(Guid.Parse(id)); - var user = _authenticator.GetUser(); - var json = new JObject - { - ["isResourceCreator"] = resource.Creator.Equals(user.Id) - }; - return Json(json); - } - - [HttpPost("[controller]/{id}")] - public IActionResult Update(string id) - { - var resourceObject = ObjectFactory<ResourceObject>.DeserializeFromStream(Request.Body); - var resource = _resourceModel.GetById(Guid.Parse(id)); - var user = _authenticator.GetUser(); - - if (_resourceModel.HasAccess(user, resource, UserRoles.Owner) || - (_resourceModel.HasAccess(user, resource, UserRoles.Member) && resource.Creator.Equals(user.Id))) - { - return Json(_resourceModel.UpdateByObject(resource, resourceObject)); - } - else - { - return Unauthorized("The user is not authorized to perform an update on the selected resource!"); - } - } - - [HttpDelete("[controller]/{id}")] - public IActionResult Delete(string id) - { - var resource = _resourceModel.GetById(Guid.Parse(id)); - var user = _authenticator.GetUser(); - if (_resourceModel.HasAccess(user, resource, UserRoles.Owner) || - (_resourceModel.HasAccess(user, resource, UserRoles.Member) && resource.Creator.Equals(user.Id))) - { - var returnObject = _resourceModel.CreateReturnObjectFromDatabaseObject(resource); - _emitter.EmitResourceDelete(new ResourceEventArgs(_configuration) - { - Resource = resource - }); - _resourceModel.DeleteResource(resource); - return Json(returnObject); - } - else - { - return Unauthorized("The user is not authorized to perform an update on the selected resource!"); - } - } - - [HttpPost("[controller]/project/{projectId}")] - public IActionResult StoreToProject(string projectId) - { - var resourceObject = ObjectFactory<ResourceObject>.DeserializeFromStream(Request.Body); - var projectModel = new ProjectModel(); - var resourceTypeModel = new ResourceTypeModel(); - var isResourceEnabled = resourceTypeModel.GetById(resourceObject.Type.Id).Enabled; - var project = projectModel.GetById(Guid.Parse(projectId)); - var user = _authenticator.GetUser(); - - if (projectModel.HasAccess(user, project, UserRoles.Owner, UserRoles.Member)) - { - if (!isResourceEnabled) - { - return Unauthorized("The user is not authorized to add a new resource of this type to the selected project!"); - } - resourceObject.Creator = user.Id; - var resource = _resourceModel.StoreFromObject(resourceObject); - projectModel.AddResource(project, resource); - - _emitter.EmitResourceCreate(new ResourceEventArgs(_configuration) - { - Resource = resource - }); - - return Json(_resourceModel.CreateReturnObjectFromDatabaseObject(resource)); - } - else - { - return Unauthorized("The user is not authorized to add a new resource to the selected project!"); - } - } - } -} diff --git a/src/Project/Controllers/ResourceTypeController.cs b/src/Project/Controllers/ResourceTypeController.cs deleted file mode 100644 index 4fb4237ebc4defb35baed99034d0a24b73cfb2dc..0000000000000000000000000000000000000000 --- a/src/Project/Controllers/ResourceTypeController.cs +++ /dev/null @@ -1,70 +0,0 @@ -using Coscine.Api.Project.Models; -using Coscine.Api.Project.ReturnObjects; -using Coscine.ApiCommons; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using System; -using System.Linq; - -namespace Coscine.Api.Project.Controllers -{ - [Authorize] - public class ResourceTypeController : Controller - { - private readonly Authenticator _authenticator; - private readonly ResourceTypeModel _resourceTypeModel; - - public ResourceTypeController() - { - _authenticator = new Authenticator(this, Program.Configuration); - _resourceTypeModel = new ResourceTypeModel(); - } - - - [Route("[controller]")] - public IActionResult Index() - { - return Json(_resourceTypeModel.GetAll() - .Select((resourceType) => new ResourceTypeObject(resourceType.Id, resourceType.DisplayName, resourceType.Enabled))); - } - - [Route("[controller]/enabled")] - public IActionResult GetEnabledResourceTypes() - { - return Json(_resourceTypeModel.GetAllWhere((resourceType) => (resourceType.Enabled == true)) - .Select((resourceType) => new ResourceTypeObject(resourceType.Id, resourceType.DisplayName, resourceType.Enabled))); - } - - [Route("[controller]/{id}/fields")] - public IActionResult Fields(string id) - { - var resourceType = _resourceTypeModel.GetById(Guid.Parse(id)); - - if (resourceType.DisplayName == "s3") - { - return Json(Type.GetType("Coscine.Api.Project.ReturnObjects.S3ResourceTypeObject").GetProperties() - .Where((property) => property.Name != "Id") - .Select((property) => property.Name) - .ToList()); - } - else if (resourceType.DisplayName == "rds") - { - return Json(Type.GetType("Coscine.Api.Project.ReturnObjects.RDSResourceTypeObject").GetProperties() - .Where((property) => property.Name != "Id") - .Select((property) => property.Name) - .ToList()); - } - else if(resourceType.DisplayName == "gitlab") - { - return Json(Type.GetType("Coscine.Api.Project.ReturnObjects.GitlabResourceTypeObject").GetProperties() - .Where((property) => property.Name != "Id") - .Select((property) => property.Name) - .ToList()); - } - else - { - throw new ArgumentException("Invalid Resource Type!"); - } - } - } -} diff --git a/src/Project/Controllers/RoleController.cs b/src/Project/Controllers/RoleController.cs index d2596276883d053ca450895743a8847766cf9cd6..bbd738181f90ff5227934aa72067f97d5467e4d9 100644 --- a/src/Project/Controllers/RoleController.cs +++ b/src/Project/Controllers/RoleController.cs @@ -1,5 +1,5 @@ -using Coscine.Api.Project.Models; -using Coscine.Api.Project.ReturnObjects; +using Coscine.Database.Models; +using Coscine.Database.ReturnObjects; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Linq; diff --git a/src/Project/Controllers/SearchController.cs b/src/Project/Controllers/SearchController.cs index f22e1d5af306298313e04df93f197b5eabcead98..64f5b53c2c651daf6f7f2fa2dd835ef17904d440 100644 --- a/src/Project/Controllers/SearchController.cs +++ b/src/Project/Controllers/SearchController.cs @@ -3,12 +3,12 @@ using System.Collections.Generic; using System.Linq; using System.Web; using Coscine.ApiCommons; -using Coscine.ApiCommons.Utils; using LinqToDB.Tools; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Microsoft.AspNetCore.Authorization; +using Coscine.Database.Util; namespace Coscine.Api.Project.Controllers { @@ -16,12 +16,10 @@ namespace Coscine.Api.Project.Controllers public class SearchController : Controller { private readonly Authenticator _authenticator; - private readonly DatabaseConnection _databaseConnection; public SearchController() { _authenticator = new Authenticator(this, Program.Configuration); - _databaseConnection = new DatabaseConnection(Program.Configuration); } [HttpGet("[controller]/allNoFilter/")] @@ -110,7 +108,7 @@ namespace Coscine.Api.Project.Controllers { list.Add(new Guid(projectId)); var counter = 0; - _databaseConnection.ConnectToDatabase((db) => + DatabaseConnection.ConnectToDatabase((db) => { while (counter != list.Count) { @@ -128,7 +126,7 @@ namespace Coscine.Api.Project.Controllers private JToken SearchForProjects(Guid userId, string searchQuery, string projectId, List<Guid> listOfSubprojects, bool showSubProjects) { - return _databaseConnection.ConnectToDatabase((db) => + return DatabaseConnection.ConnectToDatabase((db) => { var allSubProjects = (from sp in db.SubProjects select sp.SubProjectId).ToList(); var allSubProjectsList = new List<Guid>(); @@ -175,7 +173,7 @@ namespace Coscine.Api.Project.Controllers private JToken SearchForResources(Guid userId, string searchQuery, string projectId, List<Guid> listOfSubprojects) { - return _databaseConnection.ConnectToDatabase((db) => + return DatabaseConnection.ConnectToDatabase((db) => { var results = (from r in db.Resources diff --git a/src/Project/Controllers/SubProjectController.cs b/src/Project/Controllers/SubProjectController.cs index ef54e41e528f3c46cba50dc80c996f262fd279e2..fa898c70e3aa3c47dabdadb438406adf8445ac59 100644 --- a/src/Project/Controllers/SubProjectController.cs +++ b/src/Project/Controllers/SubProjectController.cs @@ -1,10 +1,11 @@ -using Coscine.Api.Project.Models; +using Coscine.Database.Models; using Coscine.ApiCommons; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; using System; using System.Linq; +using Coscine.Database.Util; namespace Coscine.Api.Project.Controllers { diff --git a/src/Project/Controllers/VisibilityController.cs b/src/Project/Controllers/VisibilityController.cs index bdf9bc3bcd55c9a906a0c9575ab58e651b451bb5..ed9d80cdf8819db5a799baebc78cefe90e172cab 100644 --- a/src/Project/Controllers/VisibilityController.cs +++ b/src/Project/Controllers/VisibilityController.cs @@ -1,5 +1,5 @@ -using Coscine.Api.Project.Models; -using Coscine.Api.Project.ReturnObjects; +using Coscine.Database.Models; +using Coscine.Database.ReturnObjects; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Linq; diff --git a/src/Project/Models/DisciplineModel.cs b/src/Project/Models/DisciplineModel.cs deleted file mode 100644 index f59ed9676bda1b05e33c781b574363682f6ae67c..0000000000000000000000000000000000000000 --- a/src/Project/Models/DisciplineModel.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Coscine.ApiCommons.Models; -using Coscine.Configuration; -using Coscine.Database.Model; -using LinqToDB; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.Models -{ - public class DisciplineModel : DatabaseModel<Discipline> - { - public DisciplineModel() : base(Program.Configuration) - { - } - - public override Expression<Func<Discipline, Guid>> GetIdFromObject() - { - return (discipline) => discipline.Id; - } - - public override ITable<Discipline> GetITableFromDatabase(CoscineDB db) - { - return db.Disciplines; - } - - public override void SetObjectId(Discipline databaseObject, Guid id) - { - databaseObject.Id = id; - } - } -} diff --git a/src/Project/Models/GitlabResourceTypeModel.cs b/src/Project/Models/GitlabResourceTypeModel.cs deleted file mode 100644 index 5ca0c42d79d9df46873439c032bbe5dcd5939c81..0000000000000000000000000000000000000000 --- a/src/Project/Models/GitlabResourceTypeModel.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.Models -{ - public class GitlabResourceTypeModel : DatabaseModel<GitlabResourceType> - { - public GitlabResourceTypeModel() : base(Program.Configuration) - { - - } - - public override Expression<Func<GitlabResourceType, Guid>> GetIdFromObject() - { - return (gitlabResourceType) => gitlabResourceType.Id; - } - - public override ITable<GitlabResourceType> GetITableFromDatabase(CoscineDB db) - { - return db.GitlabResourceTypes; - } - - public override void SetObjectId(GitlabResourceType databaseObject, Guid id) - { - databaseObject.Id = id; - } - } -} diff --git a/src/Project/Models/InstituteModel.cs b/src/Project/Models/InstituteModel.cs deleted file mode 100644 index 2b9c4c1bed176e87613f2ce80bd61d155fcff4b7..0000000000000000000000000000000000000000 --- a/src/Project/Models/InstituteModel.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.Models -{ - public class InstituteModel : DatabaseModel<Institute> - { - public InstituteModel() : base(Program.Configuration) - { - - } - - public override Expression<Func<Institute, Guid>> GetIdFromObject() - { - return (institute) => institute.Id; - } - - public override ITable<Institute> GetITableFromDatabase(CoscineDB db) - { - return db.Institutes; - } - - public override void SetObjectId(Institute databaseObject, Guid id) - { - databaseObject.Id = id; - } - } -} diff --git a/src/Project/Models/LicenseModel.cs b/src/Project/Models/LicenseModel.cs deleted file mode 100644 index 40d914335be4e575d12479f1c6888a5acc2cd4e2..0000000000000000000000000000000000000000 --- a/src/Project/Models/LicenseModel.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.Models -{ - public class LicenseModel : DatabaseModel<License> - { - public LicenseModel() : base(Program.Configuration) - { - - } - - public override System.Linq.Expressions.Expression<Func<License, Guid>> GetIdFromObject() - { - return (license) => license.Id; - } - - public override LinqToDB.ITable<License> GetITableFromDatabase(CoscineDB db) - { - return db.Licenses; - } - - public override void SetObjectId(License databaseObject, Guid id) - { - databaseObject.Id = id; - } - } -} diff --git a/src/Project/Models/MetadataModel.cs b/src/Project/Models/MetadataModel.cs deleted file mode 100644 index a5f3cee395e4fa0a8cfc7a6b5a5963e237f0fd4e..0000000000000000000000000000000000000000 --- a/src/Project/Models/MetadataModel.cs +++ /dev/null @@ -1,65 +0,0 @@ -using Coscine.Api.Project.ReturnObjects; -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; -using System; -using System.Linq; -using System.Linq.Expressions; -using System.Web; - -namespace Coscine.Api.Project.Models -{ - public class MetadataModel : DatabaseModel<Resource> - { - - public MetadataModel() : base(Program.Configuration) - { - } - - public override Expression<Func<Resource, Guid>> GetIdFromObject() - { - throw new NotImplementedException(); - } - - public override void SetObjectId(Resource databaseObject, Guid id) - { - throw new NotImplementedException(); - } - - public override ITable<Resource> GetITableFromDatabase(CoscineDB db) - { - throw new NotImplementedException(); - } - - public Resource StoreFromObject(ResourceObject resourceObject) - { - Resource resource = new Resource() - { - DisplayName = resourceObject.DisplayName, - ResourceName = resourceObject.ResourceName, - Keywords = resourceObject.Keywords, - UsageRights = resourceObject.UsageRights, - TypeId = resourceObject.Type.Id, - Type = new ResourceTypeModel().GetById(resourceObject.Type.Id), - VisibilityId = resourceObject.Visibility.Id, - LicenseId = resourceObject.License.Id - }; - - - return resource; - } - - public string GenerateId(string resourceId, string filename, string version) - { - // Double UrlEncode since converting it to Uri executes one UrlDecode and Virtuoso - // graph names don't support special characters - var encodedFileName = HttpUtility.UrlEncode(HttpUtility.UrlEncode(filename)); - return $"https://purl.org/coscine/md/{resourceId}/{encodedFileName}/{version}/"; - } - - public Uri CreateUri(string graphName) - { - return new Uri(graphName); - } - } -} diff --git a/src/Project/Models/ProjectDisciplineModel.cs b/src/Project/Models/ProjectDisciplineModel.cs deleted file mode 100644 index 1a1d74017248c5983b9062a3a7bb5ed06b2de0f8..0000000000000000000000000000000000000000 --- a/src/Project/Models/ProjectDisciplineModel.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.Models -{ - public class ProjectDisciplineModel : DatabaseModel<ProjectDiscipline> - { - public ProjectDisciplineModel() : base(Program.Configuration) - { - - } - - public override Expression<Func<ProjectDiscipline, Guid>> GetIdFromObject() - { - return (projectDiscipline) => projectDiscipline.RelationId; - } - - public override ITable<ProjectDiscipline> GetITableFromDatabase(CoscineDB db) - { - return db.ProjectDisciplines; - } - - public override void SetObjectId(ProjectDiscipline databaseObject, Guid id) - { - databaseObject.RelationId = id; - } - } -} diff --git a/src/Project/Models/ProjectInstituteModel.cs b/src/Project/Models/ProjectInstituteModel.cs deleted file mode 100644 index 80da701fde3e184489230566e77e7b2d77ce480e..0000000000000000000000000000000000000000 --- a/src/Project/Models/ProjectInstituteModel.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.Models -{ - public class ProjectInstituteModel : DatabaseModel<ProjectInstitute> - { - public ProjectInstituteModel() : base(Program.Configuration) - { - - } - - public override Expression<Func<ProjectInstitute, Guid>> GetIdFromObject() - { - return (projectInstitute) => projectInstitute.RelationId; - } - - public override ITable<ProjectInstitute> GetITableFromDatabase(CoscineDB db) - { - return db.ProjectInstitutes; - } - - public override void SetObjectId(ProjectInstitute databaseObject, Guid id) - { - databaseObject.RelationId = id; - } - } -} diff --git a/src/Project/Models/ProjectModel.cs b/src/Project/Models/ProjectModel.cs deleted file mode 100644 index 253aeecb785b3f1de847dbde9973769bbd320237..0000000000000000000000000000000000000000 --- a/src/Project/Models/ProjectModel.cs +++ /dev/null @@ -1,345 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using Coscine.Api.Project.ReturnObjects; -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqKit; -using LinqToDB; - -namespace Coscine.Api.Project.Models -{ - public class ProjectModel : DatabaseModel<Coscine.Database.Model.Project> - { - - public ProjectModel() : base(Program.Configuration) - { - } - - public bool IsDeleted(Guid id) - { - return DatabaseConnection.ConnectToDatabase((db) => - { - return - (from tableEntry in GetITableFromDatabase(db).AsExpandable() - where tableEntry.Id == id - && tableEntry.Deleted == true - select tableEntry).Count() == 1; - }); - } - - public override Database.Model.Project GetById(Guid id) - { - var expression = GetIdFromObject(); - return DatabaseConnection.ConnectToDatabase((db) => - { - return - (from tableEntry in GetITableFromDatabase(db).AsExpandable() - where expression.Invoke(tableEntry) == id - && tableEntry.Deleted == false - select tableEntry).First(); - }); - } - - public Database.Model.Project GetByIdIncludingDeleted(Guid id) - { - var expression = GetIdFromObject(); - return DatabaseConnection.ConnectToDatabase((db) => - { - return - (from tableEntry in GetITableFromDatabase(db).AsExpandable() - where expression.Invoke(tableEntry) == id - select tableEntry).First(); - }); - } - - public override Database.Model.Project GetWhere(Expression<Func<Database.Model.Project, bool>> whereClause) - { - return DatabaseConnection.ConnectToDatabase((db) => - { - return - (from tableEntry in GetITableFromDatabase(db).AsExpandable() - where whereClause.Invoke(tableEntry) - && tableEntry.Deleted == false - select tableEntry).First(); - }); - } - - public override IEnumerable<Database.Model.Project> GetAll() - { - return DatabaseConnection.ConnectToDatabase((db) => - { - return - (from tableEntry in GetITableFromDatabase(db) - where tableEntry.Deleted == false - select tableEntry).ToList(); - }); - } - - public override IEnumerable<Database.Model.Project> GetAllWhere(Expression<Func<Database.Model.Project, bool>> whereClause) - { - return DatabaseConnection.ConnectToDatabase((db) => - { - return - (from tableEntry in GetITableFromDatabase(db).AsExpandable() - where whereClause.Invoke(tableEntry) - && tableEntry.Deleted == false - select tableEntry).ToList(); - }); - } - - public override int Update(Database.Model.Project databaseObject) - { - if (databaseObject.Deleted != false) - { - return DatabaseConnection.ConnectToDatabase((db) => - { - return db.Update(databaseObject); - }); - } else - { - return 0; - } - } - - public override int Delete(Database.Model.Project databaseObject) - { - databaseObject.Deleted = true; - return DatabaseConnection.ConnectToDatabase((db) => - { - return db.Update(databaseObject); - }); - } - - public int HardDelete(Database.Model.Project databaseObject) - { - return DatabaseConnection.ConnectToDatabase((db) => - { - return db.Delete(databaseObject); - }); - } - - public Coscine.Database.Model.Project StoreFromObject(ProjectObject projectObject, User user) - { - if(projectObject.Disciplines.Count() == 0 || projectObject.Institutes.Count() == 0) - { - throw new ArgumentException("Discipline and Institute are necessary!"); - } - - Coscine.Database.Model.Project project = new Coscine.Database.Model.Project() - { - Description = projectObject.Description, - DisplayName = projectObject.DisplayName, - StartDate = projectObject.StartDate, - EndDate = projectObject.EndDate, - Keywords = projectObject.Keywords, - - ProjectName = projectObject.ProjectName, - PrincipleInvestigators = projectObject.PrincipleInvestigators, - GrantId = projectObject.GrantId, - - VisibilityId = projectObject.Visibility.Id, - }; - Insert(project); - try - { - SetDisciplines(project, projectObject.Disciplines); - SetInstitutes(project, projectObject.Institutes); - } - catch (Exception e) - { - HardDelete(project); - throw e; - } - SetOwner(project, user); - return project; - } - - private void SetDisciplines(Database.Model.Project project, IEnumerable<DisciplineObject> disciplines) - { - ProjectDisciplineModel projectDisciplineModel = new ProjectDisciplineModel(); - foreach(var oldDiscipline in projectDisciplineModel.GetAllWhere((projectDiscipline) => projectDiscipline.ProjectId == project.Id)) - { - projectDisciplineModel.Delete(oldDiscipline); - } - foreach (var discipline in disciplines) - { - projectDisciplineModel.Insert(new ProjectDiscipline() - { - ProjectId = project.Id, - DisciplineId = discipline.Id - }); - } - } - - private void SetInstitutes(Database.Model.Project project, IEnumerable<InstituteObject> institutes) - { - ProjectInstituteModel projectInstituteModel = new ProjectInstituteModel(); - foreach (var oldInstitute in projectInstituteModel.GetAllWhere((projectInstitute) => projectInstitute.ProjectId == project.Id)) - { - projectInstituteModel.Delete(oldInstitute); - } - foreach (var institute in institutes) - { - projectInstituteModel.Insert(new ProjectInstitute() - { - ProjectId = project.Id, - InstituteId = institute.Id - }); - } - } - - public ProjectRole SetOwner(Coscine.Database.Model.Project project, User user) - { - ProjectRoleModel projectRoleModel = new ProjectRoleModel(); - - ProjectRole projectRole = new ProjectRole() - { - RelationId = Guid.NewGuid(), - ProjectId = project.Id, - UserId = user.Id, - RoleId = new RoleModel().GetWhere((x) => x.DisplayName == "Owner").Id - }; - projectRoleModel.Insert(projectRole); - - return projectRole; - } - - public bool HasAccess(User user, Guid projectId, params string[] allowedAccess) - { - return HasAccess(user, GetById(projectId), allowedAccess); - } - - public bool HasAccess(User user, Database.Model.Project project, params string[] allowedAccess) - { - ProjectRoleModel projectRoleModel = new ProjectRoleModel(); - allowedAccess = allowedAccess.Select(x => x.ToLower().Trim()).ToArray(); - - IEnumerable<Coscine.Database.Model.ProjectRole> projectRoles = projectRoleModel.GetAllWhere( - (projectRoleRelation) => projectRoleRelation.ProjectId == project.Id && - projectRoleRelation.UserId == user.Id && - allowedAccess.Contains(projectRoleRelation.Role.DisplayName.ToLower())); - return projectRoles.Count() > 0; - } - - public IEnumerable<Database.Model.Project> GetWithAccess(User user, params string[] allowedAccess) - { - ProjectRoleModel projectRoleModel = new ProjectRoleModel(); - ProjectModel projectModel = new ProjectModel(); - - allowedAccess = allowedAccess.Select(x => x.ToLower().Trim()).ToArray(); - var allUserProjectRoles = projectRoleModel.GetAllWhere((projectRoleRelation) => projectRoleRelation.UserId == user.Id && - allowedAccess.Contains(projectRoleRelation.Role.DisplayName.ToLower())); - var allowedProjectIds = allUserProjectRoles.Select((projectRole) => projectRole.ProjectId); - var allowedProjects = projectModel.GetAllWhere((project) => allowedProjectIds.Contains(project.Id) - && ((!project.SubProjectsSubProjectIdIds.Any()) // get top level projects not having any parent projects - || !(from subProject in project.SubProjectsSubProjectIdIds // check if the direct parent project is accessible to the current user - where (from parentProjectRole in subProject.Project.ProjectRolesProjectIdIds - where parentProjectRole.UserId == user.Id - && allowedAccess.Contains(parentProjectRole.Role.DisplayName.ToLower()) - select parentProjectRole).Any() - select subProject).Any()) - ); - - return allowedProjects.ToList(); - } - - public void AddResource(Coscine.Database.Model.Project project, Resource resource) - { - ProjectResourceModel projectResourceModel = new ProjectResourceModel(); - if (projectResourceModel.GetAllWhere((projectResource) => projectResource.ResourceId == resource.Id && projectResource.ProjectId == project.Id).Any()) - { - throw new InvalidOperationException("Resource is already assigned to project!"); - } - ProjectResource newProjectResource = new ProjectResource - { - ProjectId = project.Id, - ResourceId = resource.Id - }; - projectResourceModel.Insert(newProjectResource); - } - - public int UpdateByObject(Database.Model.Project project, ProjectObject projectObject) - { - if (projectObject.Disciplines.Count() == 0 || projectObject.Institutes.Count() == 0) - { - throw new ArgumentException("Discipline and Institute are necessary!"); - } - - project.Description = projectObject.Description; - project.DisplayName = projectObject.DisplayName; - project.StartDate = projectObject.StartDate; - project.EndDate = projectObject.EndDate; - project.Keywords = projectObject.Keywords; - - project.ProjectName = projectObject.ProjectName; - project.PrincipleInvestigators = projectObject.PrincipleInvestigators; - project.GrantId = projectObject.GrantId; - - SetDisciplines(project, projectObject.Disciplines); - SetInstitutes(project, projectObject.Institutes); - project.VisibilityId = projectObject.Visibility.Id; - - return Update(project); - } - - public ProjectObject CreateReturnObjectFromDatabaseObject(Database.Model.Project project) - { - return CreateReturnObjectFromDatabaseObject(project, new Guid()); - } - - public ProjectObject CreateReturnObjectFromDatabaseObject(Database.Model.Project project, Guid parentId) - { - IEnumerable<DisciplineObject> disciplines = new List<DisciplineObject>(); - if(project.ProjectDisciplineProjectIdIds == null) - { - DisciplineModel disciplineModel = new DisciplineModel(); - disciplines = disciplineModel.GetAllWhere((discipline) => (from relation in discipline.ProjectDisciplineDisciplineIdIds where relation.ProjectId == project.Id select relation).Any()) - .Select((discipline) => new DisciplineObject(discipline.Id, discipline.Url, discipline.DisplayNameDe, discipline.DisplayNameEn)); - } - else - { - disciplines = project.ProjectDisciplineProjectIdIds.Select((discipline) => new DisciplineObject(discipline.Discipline.Id, discipline.Discipline.Url, discipline.Discipline.DisplayNameDe, discipline.Discipline.DisplayNameEn)); - } - IEnumerable<InstituteObject> institutes = new List<InstituteObject>(); - if (project.ProjectInstituteProjectIdIds == null) - { - InstituteModel instituteModel = new InstituteModel(); - institutes = instituteModel.GetAllWhere((institute) => (from relation in institute.ProjectInstituteInstituteIdIds where relation.ProjectId == project.Id select relation).Any()) - .Select((institute) => new InstituteObject(institute.Id, institute.IKZ, institute.DisplayName)); - } - else - { - institutes = project.ProjectInstituteProjectIdIds.Select((institute) => new InstituteObject(institute.Institute.Id, institute.Institute.IKZ, institute.Institute.DisplayName)); - } - if (project.Visibility == null && project.VisibilityId.HasValue) - { - VisibilityModel visibilityModel = new VisibilityModel(); - project.Visibility = visibilityModel.GetById(project.VisibilityId.Value); - } - - return new ProjectObject(project.Id, project.Description, project.DisplayName, project.StartDate, project.EndDate, project.Keywords, - project.ProjectName, project.PrincipleInvestigators, project.GrantId, - disciplines, - institutes, - project.Visibility == null ? null : new VisibilityObject(project.Visibility.Id, project.Visibility.DisplayName), - parentId); - } - - public override Expression<Func<Database.Model.Project, Guid>> GetIdFromObject() - { - return databaseObject => databaseObject.Id; - } - - public override ITable<Database.Model.Project> GetITableFromDatabase(CoscineDB db) - { - return db.Projects; - } - - public override void SetObjectId(Database.Model.Project databaseObject, Guid id) - { - databaseObject.Id = id; - } - } -} diff --git a/src/Project/Models/ProjectResourceModel.cs b/src/Project/Models/ProjectResourceModel.cs deleted file mode 100644 index ecf3d176d3ffa926db08202c6a7881d74e5a4d1d..0000000000000000000000000000000000000000 --- a/src/Project/Models/ProjectResourceModel.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Linq.Expressions; -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; - -namespace Coscine.Api.Project.Models -{ - public class ProjectResourceModel : DatabaseModel<ProjectResource> - { - public ProjectResourceModel() : base(Program.Configuration) - { - } - - public override Expression<Func<ProjectResource, Guid>> GetIdFromObject() - { - return (projectResource) => projectResource.RelationId; - } - - public override ITable<ProjectResource> GetITableFromDatabase(CoscineDB db) - { - return db.ProjectResources; - } - - public override void SetObjectId(ProjectResource databaseObject, Guid id) - { - databaseObject.RelationId = id; - } - } -} \ No newline at end of file diff --git a/src/Project/Models/ProjectRoleModel.cs b/src/Project/Models/ProjectRoleModel.cs deleted file mode 100644 index c3c5d16a01da083ab0c76d085b811f17fdf93ff9..0000000000000000000000000000000000000000 --- a/src/Project/Models/ProjectRoleModel.cs +++ /dev/null @@ -1,75 +0,0 @@ -using Coscine.Api.Project.ReturnObjects; -using Coscine.ApiCommons.Exceptions; -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; -using System; -using System.Linq; -using System.Linq.Expressions; - -namespace Coscine.Api.Project.Models -{ - public class ProjectRoleModel : DatabaseModel<ProjectRole> - { - public ProjectRoleModel() : base(Program.Configuration) - { - - } - - public ProjectRole SetFromObject(ProjectRoleObject projectRoleObject) - { - // Remove existing roles if they exist - var existingRoles = GetAllWhere((dbProjectRole) => dbProjectRole.ProjectId == projectRoleObject.ProjectId && dbProjectRole.UserId == projectRoleObject.User.Id); - - if (existingRoles.Count() > 0) - { - foreach(var role in existingRoles) - { - CheckIfLastOwnerWillBeRemoved(role.RoleId, projectRoleObject.ProjectId); - Delete(role); - } - } - ProjectRole projectRole = new ProjectRole() - { - ProjectId = projectRoleObject.ProjectId, - UserId = projectRoleObject.User.Id, - RoleId = projectRoleObject.Role.Id - }; - Insert(projectRole); - return projectRole; - } - - public void CheckIfLastOwnerWillBeRemoved(Guid roleId, Guid projectId) - { - RoleModel roleModel = new RoleModel(); - var ownerRole = roleModel.GetOwnerRole(); - - if (roleId == ownerRole.Id) - { - var moreThanOneOwnerExists = GetAllWhere((projectRole) => - projectRole.ProjectId == projectId - && projectRole.RoleId == ownerRole.Id - ).Count() > 1; - if (!moreThanOneOwnerExists) - { - throw new NotAuthorizedException("The last owner cannot be removed!"); - } - } - } - - public override Expression<Func<ProjectRole, Guid>> GetIdFromObject() - { - return databaseObject => databaseObject.RelationId; - } - - public override ITable<ProjectRole> GetITableFromDatabase(CoscineDB db) - { - return db.ProjectRoles; - } - - public override void SetObjectId(ProjectRole databaseObject, Guid id) - { - databaseObject.RelationId = id; - } - } -} diff --git a/src/Project/Models/RDSResourceTypeModel.cs b/src/Project/Models/RDSResourceTypeModel.cs deleted file mode 100644 index d8aada145190e475d40fc7d7e5ff1ef437bdd03c..0000000000000000000000000000000000000000 --- a/src/Project/Models/RDSResourceTypeModel.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.Models -{ - public class RDSResourceTypeModel : DatabaseModel<RDSResourceType> - { - public RDSResourceTypeModel() : base(Program.Configuration) - { - - } - - public override Expression<Func<RDSResourceType, Guid>> GetIdFromObject() - { - return (rdsResourceType) => rdsResourceType.Id; - } - - public override ITable<RDSResourceType> GetITableFromDatabase(CoscineDB db) - { - return db.RDSResourceTypes; - } - - public override void SetObjectId(RDSResourceType databaseObject, Guid id) - { - databaseObject.Id = id; - } - } -} diff --git a/src/Project/Models/ResourceDisciplineModel.cs b/src/Project/Models/ResourceDisciplineModel.cs deleted file mode 100644 index 8dbfc92b4da52fc31e2bf2f59c78144f473dbf50..0000000000000000000000000000000000000000 --- a/src/Project/Models/ResourceDisciplineModel.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.Models -{ - public class ResourceDisciplineModel : DatabaseModel<ResourceDiscipline> - { - public ResourceDisciplineModel() : base(Program.Configuration) - { - - } - - public override Expression<Func<ResourceDiscipline, Guid>> GetIdFromObject() - { - return (resourceDiscipline) => resourceDiscipline.RelationId; - } - - public override ITable<ResourceDiscipline> GetITableFromDatabase(CoscineDB db) - { - return db.ResourceDisciplines; - } - - public override void SetObjectId(ResourceDiscipline databaseObject, Guid id) - { - databaseObject.RelationId = id; - } - } -} diff --git a/src/Project/Models/ResourceModel.cs b/src/Project/Models/ResourceModel.cs deleted file mode 100644 index a44a64d6cd3206d401c988aa28947432ad0f271b..0000000000000000000000000000000000000000 --- a/src/Project/Models/ResourceModel.cs +++ /dev/null @@ -1,351 +0,0 @@ -using Coscine.Api.Project.ReturnObjects; -using Coscine.ApiCommons.Models; -using Coscine.Configuration; -using Coscine.Database.Model; -using LinqToDB; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; - -namespace Coscine.Api.Project.Models -{ - public class ResourceModel : DatabaseModel<Resource> - { - private readonly IConfiguration _configuration; - - public ResourceModel() : base(Program.Configuration) - { - _configuration = Program.Configuration; - } - - public Resource StoreFromObject(ResourceObject resourceObject) - { - if (resourceObject.Disciplines.Count() == 0 || resourceObject.ResourceTypeOption == null) - { - throw new ArgumentException("Discipline and ResourceTypeOption are necessary!"); - } - - Resource resource = new Resource() - { - DisplayName = resourceObject.DisplayName, - ResourceName = resourceObject.ResourceName, - Description = resourceObject.Description, - Keywords = resourceObject.Keywords, - UsageRights = resourceObject.UsageRights, - TypeId = resourceObject.Type.Id, - Type = new ResourceTypeModel().GetById(resourceObject.Type.Id), - VisibilityId = resourceObject.Visibility.Id, - ApplicationProfile = resourceObject.ApplicationProfile, - FixedValues = resourceObject.FixedValues != null ? resourceObject.FixedValues.ToString() :"{}", - Creator = resourceObject.Creator - }; - if(resourceObject.License != null) - { - resource.LicenseId = resourceObject.License.Id; - } - Insert(resource); - - try - { - SetDisciplines(resource, resourceObject.Disciplines); - SetResourceTypeObject(resource, resourceObject.ResourceTypeOption); - } - catch (Exception e) - { - Delete(resource); - throw e; - } - - return resource; - } - - public int DeleteResource(Resource resource) - { - ProjectResourceModel projectResourceModel = new ProjectResourceModel(); - foreach (var projectResource in projectResourceModel.GetAllWhere((projectResource) => projectResource.ResourceId == resource.Id)) - { - projectResourceModel.Delete(projectResource); - } - - ResourceDisciplineModel resourceDisciplineModel = new ResourceDisciplineModel(); - foreach (var resourceDiscipline in resourceDisciplineModel.GetAllWhere((resourceDicipline) => resourceDicipline.ResourceId == resource.Id)) - { - resourceDisciplineModel.Delete(resourceDiscipline); - } - - DeleteResourceTypeObject(resource); - - return Delete(resource); - } - - private void SetResourceTypeObject(Resource resource, JObject resourceTypeOption) - { - if (resource.Type.DisplayName == "rds") - { - RDSResourceTypeObject rdsResourceTypeObject = resourceTypeOption.ToObject<RDSResourceTypeObject>(); - RDSResourceTypeModel rdsResourceTypeModel = new RDSResourceTypeModel(); - if (resource.ResourceTypeOptionId != null) - { - RDSResourceType rdsResourceType = rdsResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value); - rdsResourceTypeModel.Update(rdsResourceType); - } - else - { - RDSResourceType rdsResourceType = new RDSResourceType() - { - BucketName = GetRDSBucketName(), - Size = rdsResourceTypeObject.Size, - }; - rdsResourceTypeModel.Insert(rdsResourceType); - resource.ResourceTypeOptionId = rdsResourceType.Id; - Update(resource); - } - } - else if (resource.Type.DisplayName == "s3") - { - S3ResourceTypeObject s3ResourceTypeObject = resourceTypeOption.ToObject<S3ResourceTypeObject>(); - S3ResourceTypeModel s3ResourceTypeModel = new S3ResourceTypeModel(); - if (resource.ResourceTypeOptionId != null) - { - S3ResourceType s3ResourceType = s3ResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value); - - s3ResourceType.BucketName = s3ResourceTypeObject.BucketName; - s3ResourceType.AccessKey = s3ResourceTypeObject.AccessKey ?? s3ResourceType.AccessKey; - s3ResourceType.SecretKey = s3ResourceTypeObject.SecretKey ?? s3ResourceType.SecretKey; - - s3ResourceTypeModel.Update(s3ResourceType); - } - else - { - S3ResourceType s3ResourceType = new S3ResourceType() - { - BucketName = s3ResourceTypeObject.BucketName, - AccessKey = s3ResourceTypeObject.AccessKey, - SecretKey = s3ResourceTypeObject.SecretKey - }; - s3ResourceTypeModel.Insert(s3ResourceType); - resource.ResourceTypeOptionId = s3ResourceType.Id; - Update(resource); - } - } - else if (resource.Type.DisplayName == "gitlab") - { - GitlabResourceTypeObject gitlabResourceTypeObject = resourceTypeOption.ToObject<GitlabResourceTypeObject>(); - GitlabResourceTypeModel gitlabResourceTypeModel = new GitlabResourceTypeModel(); - if (resource.ResourceTypeOptionId != null) - { - GitlabResourceType gitlabResourceType = gitlabResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value); - - gitlabResourceType.RepositoryNumber = gitlabResourceTypeObject.RepositoryNumber; - gitlabResourceType.RepositoryUrl = gitlabResourceTypeObject.RepositoryUrl; - gitlabResourceType.Token = gitlabResourceTypeObject.Token ?? gitlabResourceType.Token; - - gitlabResourceTypeModel.Update(gitlabResourceType); - } - else - { - GitlabResourceType gitlabResourceType = new GitlabResourceType() - { - RepositoryNumber = gitlabResourceTypeObject.RepositoryNumber, - RepositoryUrl = gitlabResourceTypeObject.RepositoryUrl, - Token = gitlabResourceTypeObject.Token - }; - gitlabResourceTypeModel.Insert(gitlabResourceType); - resource.ResourceTypeOptionId = gitlabResourceType.Id; - Update(resource); - } - } - else - { - throw new ArgumentException("Not supported resource type!"); - } - } - - private string GetRDSBucketName() - { - var prefix = _configuration.GetStringAndWait("coscine/global/buckets/prefix"); - var number = Int32.Parse(_configuration.GetStringAndWait("coscine/global/buckets/currentid")); - var maxNumber = Int32.Parse(_configuration.GetStringAndWait("coscine/global/buckets/highestid")); - var newNumber = number % maxNumber == 0 ? 1 : number + 1; - _configuration.Put("coscine/global/buckets/currentid", "" + newNumber); - - return String.Format("{0}{1,3:000}", prefix, number); - } - - private void SetDisciplines(Resource resource, IEnumerable<DisciplineObject> disciplines) - { - ResourceDisciplineModel resourceDisciplineModel = new ResourceDisciplineModel(); - foreach (var oldDiscipline in resourceDisciplineModel.GetAllWhere((resourceDiscipline) => resourceDiscipline.ResourceId == resource.Id)) - { - resourceDisciplineModel.Delete(oldDiscipline); - } - foreach (var discipline in disciplines) - { - ResourceDiscipline resourceDiscipline = new ResourceDiscipline() - { - DisciplineId = discipline.Id, - ResourceId = resource.Id - }; - resourceDisciplineModel.Insert(resourceDiscipline); - } - } - - public bool HasAccess(User user, Database.Model.Resource resource, params string[] allowedAccess) - { - IEnumerable<string> allowedAccessLabels = allowedAccess.Select(x => x.ToLower().Trim()).ToList(); - return DatabaseConnection.ConnectToDatabase((db) => (from relation in db.ProjectRoles - where relation.Project.ProjectResourceProjectIdIds != null && relation.Project.ProjectResourceProjectIdIds - .Any((projectResource) => projectResource.Resource.Id == resource.Id) - && relation.User.Id == user.Id - && allowedAccessLabels.Contains(relation.Role.DisplayName.ToLower()) - select relation).Any()); - } - - public int UpdateByObject(Resource resource, ResourceObject resourceObject) - { - if (resourceObject.Disciplines.Count() == 0 || resourceObject.ResourceTypeOption == null) - { - throw new ArgumentException("Discipline and ResourceTypeOption are necessary!"); - } - - if (resource.TypeId != resourceObject.Type.Id) - { - DeleteResourceTypeObject(resource); - } - - resource.DisplayName = resourceObject.DisplayName; - resource.ResourceName = resourceObject.ResourceName; - resource.Description = resourceObject.Description; - resource.Keywords = resourceObject.Keywords; - resource.UsageRights = resourceObject.UsageRights; - resource.TypeId = resourceObject.Type.Id; - resource.Type = new ResourceTypeModel().GetById(resourceObject.Type.Id); - resource.VisibilityId = resourceObject.Visibility.Id; - if(resourceObject.License != null) - { - resource.LicenseId = resourceObject.License.Id; - } - - // the application profile can not be altered after creation - // resource.ApplicationProfile = resourceObject.ApplicationProfile; - - resource.FixedValues = resourceObject.FixedValues != null ? resourceObject.FixedValues.ToString() : "{}"; - - // the resource creator can not be altered after creation - // resource.Creator = resourceObject.Creator; - - SetDisciplines(resource, resourceObject.Disciplines); - SetResourceTypeObject(resource, resourceObject.ResourceTypeOption); - - return Update(resource); - } - - // TODO: Find out why resource.Type is not set - public void SetType(Resource resource) - { - if (resource.Type == null) - { - ResourceTypeModel resourceTypeModel = new ResourceTypeModel(); - resource.Type = resourceTypeModel.GetById(resource.TypeId); - } - } - - public void DeleteResourceTypeObject(Resource resource) - { - SetType(resource); - if (resource.Type.DisplayName == "rds" && resource.ResourceTypeOptionId != null) - { - RDSResourceTypeModel rdsResourceTypeModel = new RDSResourceTypeModel(); - rdsResourceTypeModel.Delete(rdsResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value)); - } - else if (resource.Type.DisplayName == "s3" && resource.ResourceTypeOptionId != null) - { - S3ResourceTypeModel s3ResourceTypeModel = new S3ResourceTypeModel(); - s3ResourceTypeModel.Delete(s3ResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value)); - } - else if (resource.Type.DisplayName == "gitlab" && resource.ResourceTypeOptionId != null) - { - GitlabResourceTypeModel gitlabResourceTypeModel = new GitlabResourceTypeModel(); - gitlabResourceTypeModel.Delete(gitlabResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value)); - } - } - - public ResourceObject CreateReturnObjectFromDatabaseObject(Resource resource) - { - SetType(resource); - - DisciplineModel disciplineModel = new DisciplineModel(); - var disciplines = disciplineModel.GetAllWhere((discipline) => - (from relation in discipline.ResourceDisciplineDisciplineIdIds - where relation.ResourceId == resource.Id - select relation).Any()) - .Select((discipline) => new DisciplineObject(discipline.Id, discipline.Url, discipline.DisplayNameDe, discipline.DisplayNameEn)); - - if (resource.Visibility == null && resource.VisibilityId != null) - { - VisibilityModel visibilityModel = new VisibilityModel(); - resource.Visibility = visibilityModel.GetById(resource.VisibilityId.Value); - } - - if (resource.License == null && resource.LicenseId != null) - { - LicenseModel licenseModel = new LicenseModel(); - resource.License = licenseModel.GetById(resource.LicenseId.Value); - } - - ResourceTypeOptionObject resourceTypeOptionObject = null; - if(resource.Type.DisplayName == "rds" && resource.ResourceTypeOptionId != null) - { - RDSResourceTypeModel rdsResourceTypeModel = new RDSResourceTypeModel(); - var rdsResourceType = rdsResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value); - resourceTypeOptionObject = new RDSResourceTypeObject(rdsResourceType.Id, rdsResourceType.BucketName, (int)rdsResourceType.Size); - } - else if (resource.Type.DisplayName == "s3" && resource.ResourceTypeOptionId != null) - { - S3ResourceTypeModel s3ResourceTypeModel = new S3ResourceTypeModel(); - var s3ResourceType = s3ResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value); - resourceTypeOptionObject = new S3ResourceTypeObject(s3ResourceType.Id, s3ResourceType.BucketName, null, null); - } - else if(resource.Type.DisplayName == "gitlab" && resource.ResourceTypeOptionId != null) - { - GitlabResourceTypeModel gitlabResourceTypeModel = new GitlabResourceTypeModel(); - var gitlabResourceType = gitlabResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value); - resourceTypeOptionObject = new GitlabResourceTypeObject(gitlabResourceType.Id, gitlabResourceType.RepositoryNumber, gitlabResourceType.RepositoryUrl, null); - } - - return new ResourceObject( - resource.Id, - resource.DisplayName, - resource.ResourceName, - resource.Description, - resource.Keywords, - resource.UsageRights, - new ResourceTypeObject(resource.Type.Id, resource.Type.DisplayName, resource.Type.Enabled), - disciplines, - (resource.Visibility != null) ? new VisibilityObject(resource.Visibility.Id, resource.Visibility.DisplayName) : null, - (resource.License != null) ? new LicenseObject(resource.License.Id, resource.License.DisplayName) : null, - JObject.FromObject(resourceTypeOptionObject), - resource.ApplicationProfile, - JToken.Parse(resource.FixedValues == null ? "{}": resource.FixedValues ), - (resource.Creator != null) ? resource.Creator : null - ); - } - - public override Expression<Func<Resource, Guid>> GetIdFromObject() - { - return databaseObject => databaseObject.Id; - } - - public override ITable<Resource> GetITableFromDatabase(CoscineDB db) - { - return db.Resources; - } - - public override void SetObjectId(Resource databaseObject, Guid id) - { - databaseObject.Id = id; - } - } -} diff --git a/src/Project/Models/ResourceTypeModel.cs b/src/Project/Models/ResourceTypeModel.cs deleted file mode 100644 index 5770105796cec6e4f35eff7a904212de9568331e..0000000000000000000000000000000000000000 --- a/src/Project/Models/ResourceTypeModel.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; -using System; -using System.Linq.Expressions; - -namespace Coscine.Api.Project.Models -{ - public class ResourceTypeModel : DatabaseModel<ResourceType> - { - public ResourceTypeModel() : base(Program.Configuration) - { - - } - - public override Expression<Func<ResourceType, Guid>> GetIdFromObject() - { - return databaseObject => databaseObject.Id; - } - - public override ITable<ResourceType> GetITableFromDatabase(CoscineDB db) - { - return db.ResourceTypes; - } - - public override void SetObjectId(ResourceType databaseObject, Guid id) - { - databaseObject.Id = id; - } - } -} diff --git a/src/Project/Models/RoleModel.cs b/src/Project/Models/RoleModel.cs deleted file mode 100644 index 318d0f3cc22d0b4b43cca2f610aeab0e23e3de70..0000000000000000000000000000000000000000 --- a/src/Project/Models/RoleModel.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; -using System; -using System.Linq; -using System.Linq.Expressions; - -namespace Coscine.Api.Project.Models -{ - public class RoleModel : DatabaseModel<Role> - { - - public RoleModel() : base(Program.Configuration) - { - - } - - public override Expression<Func<Role, Guid>> GetIdFromObject() - { - return databaseObject => databaseObject.Id; - } - - public override ITable<Role> GetITableFromDatabase(CoscineDB db) - { - return db.Roles; - } - - public override void SetObjectId(Role databaseObject, Guid id) - { - databaseObject.Id = id; - } - - public Role GetOwnerRole() - { - return DatabaseConnection.ConnectToDatabase((db) => - (from tableEntry in GetITableFromDatabase(db) - where tableEntry.DisplayName == "Owner" - select tableEntry).First()); - } - } -} diff --git a/src/Project/Models/S3ResourceTypeModel.cs b/src/Project/Models/S3ResourceTypeModel.cs deleted file mode 100644 index 33aef5403e9a91f35dc2d856eb58fc19b0641e4c..0000000000000000000000000000000000000000 --- a/src/Project/Models/S3ResourceTypeModel.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.Models -{ - public class S3ResourceTypeModel : DatabaseModel<S3ResourceType> - { - public S3ResourceTypeModel() : base(Program.Configuration) - { - - } - - public override Expression<Func<S3ResourceType, Guid>> GetIdFromObject() - { - return (rdsResourceType) => rdsResourceType.Id; - } - - public override ITable<S3ResourceType> GetITableFromDatabase(CoscineDB db) - { - return db.S3ResourceTypes; - } - - public override void SetObjectId(S3ResourceType databaseObject, Guid id) - { - databaseObject.Id = id; - } - } -} diff --git a/src/Project/Models/SubProjectModel.cs b/src/Project/Models/SubProjectModel.cs deleted file mode 100644 index 8db29f82914a0017ac881854a02f8c9dc9350ea9..0000000000000000000000000000000000000000 --- a/src/Project/Models/SubProjectModel.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Linq.Expressions; -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; - -namespace Coscine.Api.Project.Models -{ - public class SubProjectModel : DatabaseModel<SubProject> - { - public SubProjectModel() : base(Program.Configuration) - { - - } - - public override Expression<Func<SubProject, Guid>> GetIdFromObject() - { - return databaseObject => databaseObject.RelationId; - } - - public override ITable<SubProject> GetITableFromDatabase(CoscineDB db) - { - return db.SubProjects; - } - - public void LinkSubProject(Guid parentId, Guid childId) - { - Insert(new SubProject() - { - ProjectId = parentId, - SubProjectId = childId, - }); - } - - public override void SetObjectId(SubProject databaseObject, Guid id) - { - databaseObject.RelationId = id; - } - } -} diff --git a/src/Project/Models/UserModel.cs b/src/Project/Models/UserModel.cs deleted file mode 100644 index ca0eeb2c2cdbd5752449661467ef7359805cc691..0000000000000000000000000000000000000000 --- a/src/Project/Models/UserModel.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Coscine.ApiCommons.Models; - -namespace Coscine.Api.Project.Models -{ - public class UserModel : UserPlainModel - { - - public UserModel() : base(Program.Configuration) - { - } - - } -} \ No newline at end of file diff --git a/src/Project/Models/VisibilityModel.cs b/src/Project/Models/VisibilityModel.cs deleted file mode 100644 index 12b79b8f1db36806de33ddc5ea6eabafb15201ea..0000000000000000000000000000000000000000 --- a/src/Project/Models/VisibilityModel.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Coscine.ApiCommons.Models; -using Coscine.Database.Model; -using LinqToDB; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.Models -{ - public class VisibilityModel : DatabaseModel<Visibility> - { - public VisibilityModel() : base(Program.Configuration) - { - - } - public override Expression<Func<Visibility, Guid>> GetIdFromObject() - { - return (visibility) => visibility.Id; - } - - public override ITable<Visibility> GetITableFromDatabase(CoscineDB db) - { - return db.Visibilities; - } - - public override void SetObjectId(Visibility databaseObject, Guid id) - { - databaseObject.Id = id; - } - } -} diff --git a/src/Project/Project.csproj b/src/Project/Project.csproj index f24000a9c8fcc7790dd19a0008ab52e5cfee2c65..8720511db489f50ea83a428f5a0bfa7e13cd7226 100644 --- a/src/Project/Project.csproj +++ b/src/Project/Project.csproj @@ -43,20 +43,23 @@ <WarningLevel>4</WarningLevel> </PropertyGroup> <ItemGroup> + <Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL"> + <HintPath>..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll</HintPath> + </Reference> <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.Action, Version=1.9.0.0, Culture=neutral, processorArchitecture=AMD64"> - <HintPath>..\packages\Coscine.Action.1.9.0\lib\net461\Coscine.Action.dll</HintPath> + <Reference Include="Coscine.Action, Version=1.10.0.0, Culture=neutral, processorArchitecture=AMD64"> + <HintPath>..\packages\Coscine.Action.1.10.0\lib\net461\Coscine.Action.dll</HintPath> </Reference> - <Reference Include="Coscine.ApiCommons, Version=1.5.0.0, Culture=neutral, PublicKeyToken=af4c1345df96546b, processorArchitecture=MSIL"> - <HintPath>..\packages\Coscine.ApiCommons.1.5.0\lib\net461\Coscine.ApiCommons.dll</HintPath> + <Reference Include="Coscine.ApiCommons, Version=1.6.0.0, Culture=neutral, PublicKeyToken=af4c1345df96546b, processorArchitecture=MSIL"> + <HintPath>..\packages\Coscine.ApiCommons.1.6.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> - <Reference Include="Coscine.Database, Version=1.15.1.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL"> - <HintPath>..\packages\Coscine.Database.1.15.1\lib\net461\Coscine.Database.dll</HintPath> + <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> <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> @@ -64,14 +67,8 @@ <Reference Include="Coscine.ProxyApi, Version=1.2.1.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\packages\Coscine.ProxyApi.1.2.1\lib\net461\Coscine.ProxyApi.dll</HintPath> </Reference> - <Reference Include="Coscine.SharePoint.Webparts.Vue, Version=1.4.0.0, Culture=neutral, PublicKeyToken=0fe8d3e516df6d98, processorArchitecture=MSIL"> - <HintPath>..\packages\Coscine.SharePoint.Webparts.Vue.1.4.0\lib\net461\Coscine.SharePoint.Webparts.Vue.dll</HintPath> - </Reference> - <Reference Include="dotNetRDF, Version=2.2.1.0, Culture=neutral, PublicKeyToken=6055ffe4c97cc780, processorArchitecture=MSIL"> - <HintPath>..\packages\dotNetRDF.2.2.1\lib\net40\dotNetRDF.dll</HintPath> - </Reference> - <Reference Include="dotNetRDF.Data.Virtuoso, Version=2.2.1.0, Culture=neutral, PublicKeyToken=6055ffe4c97cc780, processorArchitecture=MSIL"> - <HintPath>..\packages\dotNetRDF.Data.Virtuoso.2.2.1\lib\net40\dotNetRDF.Data.Virtuoso.dll</HintPath> + <Reference Include="Coscine.SharePoint.Webparts.Vue, Version=1.5.0.0, Culture=neutral, PublicKeyToken=0fe8d3e516df6d98, processorArchitecture=MSIL"> + <HintPath>..\packages\Coscine.SharePoint.Webparts.Vue.1.5.0\lib\net461\Coscine.SharePoint.Webparts.Vue.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> @@ -85,11 +82,8 @@ <Reference Include="linq2db, Version=2.6.4.0, Culture=neutral, PublicKeyToken=e41013125f9e410a, processorArchitecture=MSIL"> <HintPath>..\packages\linq2db.2.6.4\lib\net46\linq2db.dll</HintPath> </Reference> - <Reference Include="LinqKit, Version=1.1.16.0, Culture=neutral, PublicKeyToken=bc217f8844052a91, processorArchitecture=MSIL"> - <HintPath>..\packages\LinqKit.1.1.16\lib\net45\LinqKit.dll</HintPath> - </Reference> - <Reference Include="Metadata, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> - <HintPath>..\packages\Metadata.1.0.0\lib\net461\Metadata.dll</HintPath> + <Reference Include="LinqKit, Version=1.1.17.0, Culture=neutral, PublicKeyToken=bc217f8844052a91, processorArchitecture=MSIL"> + <HintPath>..\packages\LinqKit.1.1.17\lib\net45\LinqKit.dll</HintPath> </Reference> <Reference Include="Microsoft.AspNetCore, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.AspNetCore.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.dll</HintPath> @@ -387,9 +381,11 @@ <Reference Include="Microsoft.Win32.Registry, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.Win32.Registry.4.5.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath> </Reference> + <Reference Include="Moq, Version=4.13.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> + <HintPath>..\packages\Moq.4.13.1\lib\net45\Moq.dll</HintPath> + </Reference> <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> - <HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath> - <Private>True</Private> + <HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> </Reference> <Reference Include="Newtonsoft.Json.Bson, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\packages\Newtonsoft.Json.Bson.1.0.2\lib\net45\Newtonsoft.Json.Bson.dll</HintPath> @@ -615,57 +611,18 @@ </Reference> </ItemGroup> <ItemGroup> - <Compile Include="Controllers\DataSourceController.cs" /> - <Compile Include="Controllers\MetadataController.cs" /> <Compile Include="Controllers\LicenseController.cs" /> <Compile Include="Controllers\SearchController.cs" /> <Compile Include="Controllers\VisibilityController.cs" /> <Compile Include="Controllers\InstituteController.cs" /> <Compile Include="Controllers\DisciplineController.cs" /> <Compile Include="Controllers\ProjectController.cs" /> - <Compile Include="Controllers\ResourceController.cs" /> - <Compile Include="Controllers\ResourceTypeController.cs" /> <Compile Include="Controllers\RoleController.cs" /> <Compile Include="Controllers\SubProjectController.cs" /> <Compile Include="Controllers\ProjectRoleController.cs" /> - <Compile Include="Models\DisciplineModel.cs" /> - <Compile Include="Models\GitlabResourceTypeModel.cs" /> - <Compile Include="Models\InstituteModel.cs" /> - <Compile Include="Models\LicenseModel.cs" /> - <Compile Include="Models\ProjectDisciplineModel.cs" /> - <Compile Include="Models\ProjectInstituteModel.cs" /> - <Compile Include="Models\ProjectModel.cs" /> - <Compile Include="Models\ProjectResourceModel.cs" /> - <Compile Include="Models\ProjectRoleModel.cs" /> - <Compile Include="Models\S3ResourceTypeModel.cs" /> - <Compile Include="Models\RDSResourceTypeModel.cs" /> - <Compile Include="Models\ResourceDisciplineModel.cs" /> - <Compile Include="Models\MetadataModel.cs" /> - <Compile Include="Models\ResourceModel.cs" /> - <Compile Include="Models\ResourceTypeModel.cs" /> - <Compile Include="Models\RoleModel.cs" /> - <Compile Include="Models\SubProjectModel.cs" /> - <Compile Include="Models\UserModel.cs" /> - <Compile Include="Models\VisibilityModel.cs" /> <Compile Include="Program.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="ReturnObjects\GitlabResourceTypeObject.cs" /> - <Compile Include="ReturnObjects\LicenseObject.cs" /> - <Compile Include="ReturnObjects\S3ResourceTypeObject.cs" /> - <Compile Include="ReturnObjects\RDSResourceTypeObject.cs" /> - <Compile Include="ReturnObjects\ResourceTypeOptionObject.cs" /> - <Compile Include="ReturnObjects\VisibilityObject.cs" /> - <Compile Include="ReturnObjects\InstituteObject.cs" /> - <Compile Include="ReturnObjects\DisciplineObject.cs" /> - <Compile Include="ReturnObjects\ProjectObject.cs" /> - <Compile Include="ReturnObjects\ProjectRoleObject.cs" /> - <Compile Include="ReturnObjects\ResourceObject.cs" /> - <Compile Include="ReturnObjects\ResourceTypeObject.cs" /> - <Compile Include="ReturnObjects\RoleObject.cs" /> - <Compile Include="ReturnObjects\UserObject.cs" /> - <Compile Include="ReturnObjects\WaterbutlerFolder.cs" /> <Compile Include="Startup.cs" /> - <Compile Include="UserRoles.cs" /> </ItemGroup> <ItemGroup> <None Include="App.config" /> diff --git a/src/Project/ReturnObjects/DisciplineObject.cs b/src/Project/ReturnObjects/DisciplineObject.cs deleted file mode 100644 index 5a2fed7b9ff54a4dbeed030401d239467f7f31d6..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/DisciplineObject.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Coscine.ApiCommons.ReturnObjects; -using Coscine.Database.Model; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.ReturnObjects -{ - public class DisciplineObject : IReturnObject - { - public Guid Id { get; set; } - - public string Url { get; set; } - public string DisplayNameDe { get; set; } - - public string DisplayNameEn { get; set; } - - public DisciplineObject(Guid id, string url, string displayNameDe, string displayNameEn) - { - Id = id; - Url = url; - DisplayNameDe = displayNameDe; - DisplayNameEn = displayNameEn; - } - } -} diff --git a/src/Project/ReturnObjects/GitlabResourceTypeObject.cs b/src/Project/ReturnObjects/GitlabResourceTypeObject.cs deleted file mode 100644 index 54d2189b64f2f606b7b67b283843394d151cc9e6..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/GitlabResourceTypeObject.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; - -namespace Coscine.Api.Project.ReturnObjects -{ - [Serializable] - public class GitlabResourceTypeObject : ResourceTypeOptionObject - { - public Guid Id { get; set; } - - public int RepositoryNumber { get; set; } - public string RepositoryUrl { get; set; } - public string Token { get; set; } - - public GitlabResourceTypeObject(Guid id, int repositoryNumber, string repositoryUrl, string token) - { - Id = id; - RepositoryNumber = repositoryNumber; - RepositoryUrl = repositoryUrl; - Token = token; - } - } -} diff --git a/src/Project/ReturnObjects/InstituteObject.cs b/src/Project/ReturnObjects/InstituteObject.cs deleted file mode 100644 index 01a77b1f468c4b2ff8b9398ee3598c7014eb9faf..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/InstituteObject.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Coscine.ApiCommons.ReturnObjects; -using Coscine.Database.Model; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.ReturnObjects -{ - public class InstituteObject : IReturnObject - { - public Guid Id { get; set; } - - public string Ikz { get; set; } - public string DisplayName { get; set; } - - public InstituteObject(Guid id, string ikz, string displayName) - { - Id = id; - Ikz = ikz; - DisplayName = displayName; - } - } -} diff --git a/src/Project/ReturnObjects/LicenseObject.cs b/src/Project/ReturnObjects/LicenseObject.cs deleted file mode 100644 index 16f617bb1c98d86d8a982094c8cc03a101376a6b..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/LicenseObject.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Coscine.ApiCommons.ReturnObjects; -using System; - -namespace Coscine.Api.Project.ReturnObjects -{ - [Serializable] - public class LicenseObject : IReturnObject - { - public Guid Id { get; set; } - - public string DisplayName { get; set; } - - public LicenseObject(Guid id, string displayName) - { - Id = id; - DisplayName = displayName; - } - } -} \ No newline at end of file diff --git a/src/Project/ReturnObjects/ProjectObject.cs b/src/Project/ReturnObjects/ProjectObject.cs deleted file mode 100644 index 389ea945aa8c5805ceb6a6849b5a9f7698ac7026..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/ProjectObject.cs +++ /dev/null @@ -1,49 +0,0 @@ -using Coscine.Api.Project.Models; -using Coscine.ApiCommons.ReturnObjects; -using System; -using System.Collections.Generic; - -namespace Coscine.Api.Project.ReturnObjects -{ - - [Serializable] - public class ProjectObject : IReturnObject - { - public Guid Id { get; set; } - - public string Description { get; set; } - public string DisplayName { get; set; } - public DateTime StartDate { get; set; } - public DateTime EndDate { get; set; } - public string Keywords { get; set; } - - public string ProjectName { get; set; } - public string PrincipleInvestigators { get; set; } - public string GrantId { get; set; } - - public IEnumerable<DisciplineObject> Disciplines { get; set; } - public IEnumerable<InstituteObject> Institutes { get; set; } - public VisibilityObject Visibility { get; set; } - - public Guid ParentId { get; set; } - - public ProjectObject(Guid id, string description, string displayName, DateTime startDate, DateTime endDate, string keywords, string projectName, string principleInvestigators, string grantId, IEnumerable<DisciplineObject> discipline, IEnumerable<InstituteObject> institute, VisibilityObject visibility, Guid parentId = new Guid()) - { - Id = id; - Description = description; - DisplayName = displayName; - StartDate = startDate; - EndDate = endDate; - Keywords = keywords; - ParentId = parentId; - - ProjectName = projectName; - PrincipleInvestigators = principleInvestigators; - GrantId = grantId; - - Disciplines = discipline; - Institutes = institute; - Visibility = visibility; - } - } -} diff --git a/src/Project/ReturnObjects/ProjectRoleObject.cs b/src/Project/ReturnObjects/ProjectRoleObject.cs deleted file mode 100644 index a35826e48dc528dd79f3bdeeffb941ad377437f2..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/ProjectRoleObject.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Coscine.ApiCommons.ReturnObjects; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.ReturnObjects -{ - [Serializable] - public class ProjectRoleObject : IReturnObject - { - public Guid ProjectId { get; set; } - public UserObject User { get; set; } - public RoleObject Role { get; set; } - - public ProjectRoleObject(Guid projectId, UserObject user, RoleObject role) - { - ProjectId = projectId; - User = user; - Role = role; - } - - } -} diff --git a/src/Project/ReturnObjects/RDSResourceTypeObject.cs b/src/Project/ReturnObjects/RDSResourceTypeObject.cs deleted file mode 100644 index daa4de5dca7007240612934685a83e5820a6145c..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/RDSResourceTypeObject.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; - -namespace Coscine.Api.Project.ReturnObjects -{ - [Serializable] - public class RDSResourceTypeObject : ResourceTypeOptionObject - { - public Guid Id { get; set; } - public string BucketName { get; set; } - public int Size { get; set; } - - public RDSResourceTypeObject(Guid id, string bucketName, int size) - { - Id = id; - BucketName = bucketName; - Size = size; - } - } -} diff --git a/src/Project/ReturnObjects/ResourceObject.cs b/src/Project/ReturnObjects/ResourceObject.cs deleted file mode 100644 index 9f0132f6b1ca7fa8711f4cdc8c88e7a287d3b351..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/ResourceObject.cs +++ /dev/null @@ -1,50 +0,0 @@ -using Coscine.ApiCommons.ReturnObjects; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; - -namespace Coscine.Api.Project.ReturnObjects -{ - [Serializable] - public class ResourceObject : IReturnObject - { - public Guid Id { get; set; } - public string PID { get { return Program.Configuration.GetStringAndWait("coscine/global/epic/prefix") + "/" + Id.ToString(); } } - public string DisplayName { get; set; } - public string ResourceName { get; set; } - public string Description { get; set; } - public string Keywords { get; set; } - public string UsageRights { get; set; } - public ResourceTypeObject Type { get; set; } - public IEnumerable<DisciplineObject> Disciplines { get; set; } - public VisibilityObject Visibility { get; set; } - public LicenseObject License { get; set; } - public JObject ResourceTypeOption { get; set; } - public string ApplicationProfile { get; set; } - public JToken FixedValues { get; set; } - public Guid? Creator { get; set; } - - public ResourceObject(Guid id, string displayName, string resourceName, string description, string keywords, string usageRights, ResourceTypeObject type, IEnumerable<DisciplineObject> disciplines, VisibilityObject visibility, LicenseObject license, JObject resourceTypeOption, string applicationProfile, JToken fixedValues, Guid? creator = null) - { - Id = id; - - DisplayName = displayName; - ResourceName = resourceName; - Description = description; - Keywords = keywords; - UsageRights = usageRights; - - Type = type; - Disciplines = disciplines; - Visibility = visibility; - License = license; - - ResourceTypeOption = resourceTypeOption; - - ApplicationProfile = applicationProfile; - FixedValues = fixedValues; - - Creator = creator; - } - } -} diff --git a/src/Project/ReturnObjects/ResourceTypeObject.cs b/src/Project/ReturnObjects/ResourceTypeObject.cs deleted file mode 100644 index 63e26afcb139d9dbe521617b21c878c9487d22d6..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/ResourceTypeObject.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Coscine.ApiCommons.ReturnObjects; -using System; - -namespace Coscine.Api.Project.ReturnObjects -{ - [Serializable] - public class ResourceTypeObject : IReturnObject - { - public Guid Id { get; set; } - - public string DisplayName { get; set; } - - public bool Enabled { get; set; } - - public ResourceTypeObject(Guid id, string displayName, bool enabled) - { - Id = id; - DisplayName = displayName; - Enabled = enabled; - } - - } -} diff --git a/src/Project/ReturnObjects/ResourceTypeOptionObject.cs b/src/Project/ReturnObjects/ResourceTypeOptionObject.cs deleted file mode 100644 index 194e529afebb74835a45b9a045a2663703edba63..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/ResourceTypeOptionObject.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Coscine.ApiCommons.ReturnObjects; -using System; - -namespace Coscine.Api.Project.ReturnObjects -{ - [Serializable] - public abstract class ResourceTypeOptionObject : IReturnObject - { - } -} \ No newline at end of file diff --git a/src/Project/ReturnObjects/RoleObject.cs b/src/Project/ReturnObjects/RoleObject.cs deleted file mode 100644 index a9b2afa8d2aa8e57d52727196877ae047cc3a052..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/RoleObject.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Coscine.ApiCommons.ReturnObjects; -using System; - -namespace Coscine.Api.Project.ReturnObjects -{ - [Serializable] - public class RoleObject : IReturnObject - { - public Guid Id { get; set; } - - public string DisplayName { get; set; } - - public RoleObject(Guid id, string displayName) - { - Id = id; - DisplayName = displayName; - } - } -} \ No newline at end of file diff --git a/src/Project/ReturnObjects/S3ResourceTypeObject.cs b/src/Project/ReturnObjects/S3ResourceTypeObject.cs deleted file mode 100644 index f539a9744ae788649efd7b7c21d5527ed36396a6..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/S3ResourceTypeObject.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; - -namespace Coscine.Api.Project.ReturnObjects -{ - [Serializable] - public class S3ResourceTypeObject : ResourceTypeOptionObject - { - public Guid Id { get; set; } - public string BucketName { get; set; } - public string AccessKey { get; set; } - public string SecretKey { get; set; } - - public S3ResourceTypeObject(Guid id, string bucketName, string accessKey, string secretKey) - { - Id = id; - BucketName = bucketName; - - AccessKey = accessKey; - SecretKey = secretKey; - } - } -} diff --git a/src/Project/ReturnObjects/UserObject.cs b/src/Project/ReturnObjects/UserObject.cs deleted file mode 100644 index 13114f86363b2c4bdf19821627b18cf28a82ce49..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/UserObject.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Coscine.ApiCommons.ReturnObjects; -using System; - -namespace Coscine.Api.Project.ReturnObjects -{ - [Serializable] - public class UserObject : IReturnObject - { - public Guid Id { get; set; } - - public string DisplayName { get; set; } - - public string Givenname { get; set; } - - public string Surname { get; set; } - - public string EmailAddress { get; set; } - - public UserObject(Guid id, string displayName, string givenname, string surname, string emailAddress) - { - Id = id; - DisplayName = displayName; - Givenname = givenname; - Surname = surname; - EmailAddress = emailAddress; - } - } -} diff --git a/src/Project/ReturnObjects/VisibilityObject.cs b/src/Project/ReturnObjects/VisibilityObject.cs deleted file mode 100644 index 63fca3be1a2fabd7e85bf0ffdff5c313fa3b2346..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/VisibilityObject.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Coscine.ApiCommons.ReturnObjects; -using Coscine.Database.Model; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.Api.Project.ReturnObjects -{ - public class VisibilityObject : IReturnObject - { - public Guid Id { get; set; } - - public string DisplayName { get; set; } - - public VisibilityObject(Guid id, string displayName) - { - Id = id; - DisplayName = displayName; - } - } -} diff --git a/src/Project/ReturnObjects/WaterbutlerFolder.cs b/src/Project/ReturnObjects/WaterbutlerFolder.cs deleted file mode 100644 index 5af33b7e7ba0d60c21f1f34430bcdf3e0a9f8c65..0000000000000000000000000000000000000000 --- a/src/Project/ReturnObjects/WaterbutlerFolder.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using Newtonsoft.Json.Linq; - -namespace Coscine.Api.Project.ReturnObjects -{ - public class WaterbutlerObject - { - public bool IsFolder { get; set; } = false; - public string Absolutepath { get; set; } = null; - public string Name { get; set; } = null; - public string LastModified { get; set; } - public string Created { get; set; } - public string Size { get; set; } - // Shallow! Only one level deep. - // Should the folder contain additional folders, they will be empty/null. - public List<WaterbutlerObject> Content { get; set; } = null; - - public WaterbutlerObject() - { - - } - - public WaterbutlerObject(string path, JToken data) - { - Absolutepath = path; - Content = new List<WaterbutlerObject>(); - IsFolder = true; - - if (data == null) - { - throw new ArgumentNullException("The data for the WaterbutlerFolder cannot be null."); - } - - foreach (var obj in data) - { - if (obj["type"].ToObject<string>() == "files") - { - Content.Add(new WaterbutlerObject - { - IsFolder = obj["attributes"]["kind"].ToObject<string>() == "folder", - Absolutepath = obj["attributes"]["path"].ToObject<string>(), - Name = obj["attributes"]["name"].ToObject<string>(), - Created = obj["attributes"]["modified_utc"]?.ToObject<string>(), - LastModified = obj["attributes"]["LastModified_utc"]?.ToObject<string>(), - Size = obj["attributes"]["size"]?.ToObject<string>(), - }); - } - } - } - } -} diff --git a/src/Project/UserRoles.cs b/src/Project/UserRoles.cs deleted file mode 100644 index 4a3b85301f9344ddc458577e6533dd782f871e22..0000000000000000000000000000000000000000 --- a/src/Project/UserRoles.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Coscine.Api.Project -{ - public static class UserRoles - { - public static string Member { get; } = "member"; - public static string Owner { get; } = "owner"; - } -} diff --git a/src/Project/packages.config b/src/Project/packages.config index 05173a40b6acca0131c64e0b7fbd76d20340ccca..65ac45bf4956ca051199e47836192659ab9822c8 100644 --- a/src/Project/packages.config +++ b/src/Project/packages.config @@ -2,23 +2,21 @@ <packages> <package id="AutoMapper" version="8.0.0" targetFramework="net472" /> <package id="AutoMapper.Extensions.Microsoft.DependencyInjection" version="6.0.0" targetFramework="net472" /> + <package id="Castle.Core" version="4.4.0" targetFramework="net472" /> <package id="Consul" version="0.7.2.6" targetFramework="net472" /> - <package id="Coscine.Action" version="1.9.0" targetFramework="net472" /> - <package id="Coscine.ApiCommons" version="1.5.0" targetFramework="net472" /> + <package id="Coscine.Action" version="1.10.0" targetFramework="net472" /> + <package id="Coscine.ApiCommons" version="1.6.0" targetFramework="net472" /> <package id="Coscine.Configuration" version="1.4.0" targetFramework="net472" /> - <package id="Coscine.Database" version="1.15.1" targetFramework="net472" /> + <package id="Coscine.Database" version="1.16.0" targetFramework="net472" /> <package id="Coscine.Logging" version="1.0.1" targetFramework="net472" /> <package id="Coscine.ProxyApi" version="1.2.1" targetFramework="net472" /> - <package id="Coscine.SharePoint.Webparts.Vue" version="1.4.0" targetFramework="net472" /> - <package id="dotNetRDF" version="2.2.1" targetFramework="net472" /> - <package id="dotNetRDF.Data.Virtuoso" version="2.2.1" targetFramework="net472" /> + <package id="Coscine.SharePoint.Webparts.Vue" version="1.5.0" targetFramework="net472" /> <package id="EntityFramework" version="6.2.0" targetFramework="net472" /> <package id="HtmlAgilityPack" version="1.8.2" targetFramework="net472" /> <package id="linq2db" version="2.6.4" targetFramework="net472" /> <package id="linq2db.SqlServer" version="2.6.4" targetFramework="net472" /> <package id="linq2db.t4models" version="2.6.4" targetFramework="net472" /> - <package id="LinqKit" version="1.1.16" targetFramework="net472" /> - <package id="Metadata" version="1.0.0" targetFramework="net472" /> + <package id="LinqKit" version="1.1.17" targetFramework="net472" /> <package id="Microsoft.AspNetCore" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.AspNetCore.Antiforgery" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.AspNetCore.Authentication" version="2.2.0" targetFramework="net472" /> @@ -121,7 +119,8 @@ <package id="Microsoft.IdentityModel.Tokens" version="5.6.0" targetFramework="net472" /> <package id="Microsoft.Net.Http.Headers" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.Win32.Registry" version="4.5.0" targetFramework="net472" /> - <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net472" /> + <package id="Moq" version="4.13.1" targetFramework="net472" /> + <package id="Newtonsoft.Json" version="12.0.3" targetFramework="net472" /> <package id="Newtonsoft.Json.Bson" version="1.0.2" targetFramework="net472" /> <package id="NLog" version="4.6.8" targetFramework="net472" /> <package id="NLog.Config" version="4.6.8" targetFramework="net472" />