Skip to content
Snippets Groups Projects

Compare revisions

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

Source

Select target project
No results found
Select Git revision
Loading items

Target

Select target project
  • coscine/backend/libraries/database
1 result
Select Git revision
Loading items
Show changes
Commits on Source (3)
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<RootNamespace>Coscine.Database.Actions</RootNamespace>
<AssemblyName>Coscine.Database.Actions</AssemblyName>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<Version>2.11.0</Version></PropertyGroup>
<ItemGroup>
<PackageReference Include="Coscine.Database.Helpers" Version="2.*-*" />
<PackageReference Include="Coscine.Migrations" Version="2.*-*" />
......
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Library</OutputType>
<RootNamespace>Coscine.Database.Tests</RootNamespace>
<AssemblyName>Coscine.Database.Tests</AssemblyName>
<TargetFrameworks>net6.0;net461</TargetFrameworks>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
<Version>2.11.0</Version></PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Database\Database.csproj" />
</ItemGroup>
......
......@@ -4,7 +4,7 @@
<RootNamespace>Coscine.Database</RootNamespace>
<AssemblyName>Coscine.Database</AssemblyName>
<TargetFrameworks>net6.0;net461</TargetFrameworks>
<Version>2.10.1</Version>
<Version>2.11.0</Version>
</PropertyGroup>
<PropertyGroup>
<Authors>RWTH Aachen University</Authors>
......
using Coscine.Database.DataModel;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
namespace Coscine.Database.Models
{
public class RdsS3WormResourceTypeModel : DatabaseModel<RdsS3wormResourceType>
{
public override Expression<Func<RdsS3wormResourceType, Guid>> GetIdFromObject()
{
return (rdsResourceType) => rdsResourceType.Id;
}
public override Microsoft.EntityFrameworkCore.DbSet<RdsS3wormResourceType> GetITableFromDatabase(CoscineDB db)
{
return db.RdsS3wormResourceTypes;
}
public override void SetObjectId(RdsS3wormResourceType databaseObject, Guid id)
{
databaseObject.Id = id;
}
public Dictionary<string, string> GetResourceTypeOptions(Guid id)
{
var resourceType = GetById(id);
var dictionary = new Dictionary<string, string>
{
{ "accessKey", resourceType.AccessKey },
{ "secretKey", resourceType.SecretKey },
{ "accessKeyRead", resourceType.AccessKeyRead },
{ "secretKeyRead", resourceType.SecretKeyRead },
{ "accessKeyWrite", resourceType.AccessKeyWrite },
{ "secretKeyWrite", resourceType.SecretKeyWrite },
{ "bucketname", resourceType.BucketName },
{ "endpoint", resourceType.Endpoint },
{ "size", $"{resourceType.Size}" }
};
return dictionary;
}
}
}
\ No newline at end of file
......@@ -13,22 +13,6 @@ namespace Coscine.Database.Models
{
public class ResourceModel : DatabaseModel<Resource>
{
private readonly IConfiguration _configuration = new ConsulConfiguration();
private static readonly Dictionary<string, string> _configs = new Dictionary<string, string>
{
// RDS-Web
{ "rds", "coscine/global/rds/ecs-rwth/rds" },
{ "rdsude", "coscine/global/rds/ecs-ude/rds" },
{ "rdsnrw", "coscine/global/rds/ecs-nrw/rds" },
{ "rdstudo", "coscine/global/rds/ecs-tudo/rds" },
// RDS-S3
{ "rdss3", "coscine/global/rds/ecs-rwth/rds-s3" },
{ "rdss3ude", "coscine/global/rds/ecs-ude/rds-s3" },
{ "rdss3nrw", "coscine/global/rds/ecs-nrw/rds-s3" },
{ "rdss3tudo", "coscine/global/rds/ecs-tudo/rds-s3" }
};
public Resource StoreFromObject(ResourceObject resourceObject)
{
if (!resourceObject.Disciplines.Any() || resourceObject.ResourceTypeOption == null)
......@@ -59,7 +43,6 @@ namespace Coscine.Database.Models
try
{
SetDisciplines(resource, resourceObject.Disciplines);
SetResourceTypeObject(resource, resourceObject.ResourceTypeOption);
}
catch (Exception)
{
......@@ -116,161 +99,34 @@ namespace Coscine.Database.Models
from jrt in joinedRt.DefaultIfEmpty()
where !jp.Deleted &&
IsLikeRds(jrt.DisplayName)
jrt.Type == "rds"
group r by jpi.OrganizationUrl into g
select new OrganizationResourceListObject(g.Key, g.ToList())).ToList();
});
}
private void SetResourceTypeObject(Resource resource, JObject resourceTypeOption)
{
if (IsLikeRds(resource.Type.DisplayName))
{
RDSResourceTypeObject rdsResourceTypeObject = resourceTypeOption.ToObject<RDSResourceTypeObject>();
RDSResourceTypeModel rdsResourceTypeModel = new RDSResourceTypeModel();
if (resource.ResourceTypeOptionId != null)
{
RdsresourceType rdsResourceType = rdsResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value);
rdsResourceTypeModel.Update(rdsResourceType);
}
else
{
var prefix = _configs[resource.Type.DisplayName];
RdsresourceType rdsResourceType = new RdsresourceType()
{
BucketName = resource.Id.ToString(),
Size = rdsResourceTypeObject.Size,
AccessKey = _configuration.GetString($"{prefix}/object_user_name"),
SecretKey = _configuration.GetString($"{prefix}/object_user_secretkey"),
Endpoint = _configuration.GetString($"{prefix}/s3_endpoint"),
};
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 if (resource.Type.DisplayName == "linked")
{
LinkedResourceTypeModel linkedResourceTypeModel = new LinkedResourceTypeModel();
if (resource.ResourceTypeOptionId == null)
{
LinkedResourceType linkedResourceType = new LinkedResourceType();
linkedResourceTypeModel.Insert(linkedResourceType);
resource.ResourceTypeOptionId = linkedResourceType.Id;
Update(resource);
}
}
else if (IsLikeRdsS3(resource.Type.DisplayName))
{
var rdsS3ResourceTypeObject = resourceTypeOption.ToObject<RdsS3ResourceTypeObject>();
var rdsS3ResourceTypeModel = new RdsS3ResourceTypeModel();
if (resource.ResourceTypeOptionId != null)
{
var rdsS3ResourceType = rdsS3ResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value);
rdsS3ResourceTypeModel.Update(rdsS3ResourceType);
}
else
{
var prefix = _configs[resource.Type.DisplayName];
var rdsS3ResourceType = new RdsS3resourceType()
{
BucketName = resource.Id.ToString(),
AccessKey = _configuration.GetString($"{prefix}/object_user_name"),
SecretKey = _configuration.GetString($"{prefix}/object_user_secretkey"),
AccessKeyRead = $"read_{resource.Id}",
SecretKeyRead = RandomHelper.GenerateRandomChunk(32),
AccessKeyWrite = $"write_{resource.Id}",
SecretKeyWrite = RandomHelper.GenerateRandomChunk(32),
Endpoint = _configuration.GetString($"{prefix}/s3_endpoint"),
Size = rdsS3ResourceTypeObject.Size,
};
rdsS3ResourceTypeModel.Insert(rdsS3ResourceType);
resource.ResourceTypeOptionId = rdsS3ResourceType.Id;
Update(resource);
}
}
else
{
throw new ArgumentException("Not supported resource type!");
}
}
public Dictionary<string, string> GetResourceTypeOptions(Guid id)
{
var resource = GetById(id);
var resourceType = new ResourceTypeModel().GetById((Guid)resource.TypeId);
var resourceType = new ResourceTypeModel().GetById(resource.TypeId);
var resourceTypeOptionId = (Guid)resource.ResourceTypeOptionId;
if (resourceType.DisplayName == "gitlab")
if (resourceType.Type == "gitlab")
{
return new GitlabResourceTypeModel().GetResourceTypeOptions(resourceTypeOptionId);
}
else if (IsLikeRds(resourceType.DisplayName))
else if (resourceType.Type == "rds")
{
return new RDSResourceTypeModel().GetResourceTypeOptions(resourceTypeOptionId);
}
else if (resourceType.DisplayName == "s3")
else if (resourceType.Type == "s3")
{
return new S3ResourceTypeModel().GetResourceTypeOptions(resourceTypeOptionId);
}
else if (resourceType.DisplayName == "linked")
else if (resourceType.Type == "linked")
{
return new LinkedResourceTypeModel().GetResourceTypeOptions(resourceTypeOptionId);
}
else if (IsLikeRdsS3(resourceType.DisplayName))
else if (resourceType.Type == "rdss3")
{
return new RdsS3ResourceTypeModel().GetResourceTypeOptions(resourceTypeOptionId);
}
......@@ -347,12 +203,10 @@ namespace Coscine.Database.Models
// 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)
......@@ -365,27 +219,27 @@ namespace Coscine.Database.Models
public void DeleteResourceTypeObject(Resource resource)
{
SetType(resource);
if (IsLikeRds(resource.Type.DisplayName) && resource.ResourceTypeOptionId != null)
if (resource.Type.Type == "rds" && resource.ResourceTypeOptionId != null)
{
RDSResourceTypeModel rdsResourceTypeModel = new RDSResourceTypeModel();
rdsResourceTypeModel.Delete(rdsResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value));
}
else if (resource.Type.DisplayName == "s3" && resource.ResourceTypeOptionId != null)
else if (resource.Type.Type == "s3" && resource.ResourceTypeOptionId != null)
{
S3ResourceTypeModel s3ResourceTypeModel = new S3ResourceTypeModel();
s3ResourceTypeModel.Delete(s3ResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value));
}
else if (resource.Type.DisplayName == "gitlab" && resource.ResourceTypeOptionId != null)
else if (resource.Type.Type == "gitlab" && resource.ResourceTypeOptionId != null)
{
GitlabResourceTypeModel gitlabResourceTypeModel = new GitlabResourceTypeModel();
gitlabResourceTypeModel.Delete(gitlabResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value));
}
else if (resource.Type.DisplayName == "linked" && resource.ResourceTypeOptionId != null)
else if (resource.Type.Type == "linked" && resource.ResourceTypeOptionId != null)
{
LinkedResourceTypeModel linkedResourceTypeModel = new LinkedResourceTypeModel();
linkedResourceTypeModel.Delete(linkedResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value));
}
else if (IsLikeRdsS3(resource.Type.DisplayName) && resource.ResourceTypeOptionId != null)
else if (resource.Type.Type == "rdss3" && resource.ResourceTypeOptionId != null)
{
var rdsS3ResourceTypeModel = new RdsS3ResourceTypeModel();
rdsS3ResourceTypeModel.Delete(rdsS3ResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value));
......@@ -396,7 +250,7 @@ namespace Coscine.Database.Models
{
SetType(resource);
DisciplineModel disciplineModel = new DisciplineModel();
var disciplineModel = new DisciplineModel();
var disciplines = disciplineModel.GetAllWhere((discipline) =>
(from relation in discipline.ResourceDisciplines//ResourceDisciplineDisciplineIdIds
where relation.ResourceId == resource.Id
......@@ -416,31 +270,31 @@ namespace Coscine.Database.Models
}
ResourceTypeOptionObject resourceTypeOptionObject = null;
if (IsLikeRds(resource.Type.DisplayName) && resource.ResourceTypeOptionId != null)
if (resource.Type.Type == "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)
else if (resource.Type.Type == "s3" && resource.ResourceTypeOptionId != null)
{
S3ResourceTypeModel s3ResourceTypeModel = new S3ResourceTypeModel();
var s3ResourceType = s3ResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value);
resourceTypeOptionObject = new S3ResourceTypeObject(s3ResourceType.Id, s3ResourceType.BucketName, null, null, s3ResourceType.ResourceUrl);
}
else if (resource.Type.DisplayName == "gitlab" && resource.ResourceTypeOptionId != null)
else if (resource.Type.Type == "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);
}
else if (resource.Type.DisplayName == "linked" && resource.ResourceTypeOptionId != null)
else if (resource.Type.Type == "linked" && resource.ResourceTypeOptionId != null)
{
LinkedResourceTypeModel linkedResourceTypeModel = new LinkedResourceTypeModel();
var linkedResourceType = linkedResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value);
resourceTypeOptionObject = new LinkedResourceTypeObject(linkedResourceType.Id);
}
else if (IsLikeRdsS3(resource.Type.DisplayName) && resource.ResourceTypeOptionId != null)
else if (resource.Type.Type == "rdss3" && resource.ResourceTypeOptionId != null)
{
var rdsS3ResourceTypeModel = new RdsS3ResourceTypeModel();
var rdsS3ResourceType = rdsS3ResourceTypeModel.GetById(resource.ResourceTypeOptionId.Value);
......@@ -464,7 +318,7 @@ namespace Coscine.Database.Models
resource.Description,
resource.Keywords,
resource.UsageRights,
new ResourceTypeObject(resource.Type.Id, resource.Type.DisplayName),
new ResourceTypeObject(resource.Type.Id, resource.Type.SpecificType),
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,
......@@ -558,15 +412,5 @@ namespace Coscine.Database.Models
return $"{counted}/{maxCount}";
}
private bool IsLikeRds(string compare)
{
return compare == "rds" || compare == "rdsude" || compare == "rdsnrw" || compare == "rdstudo";
}
private bool IsLikeRdsS3(string compare)
{
return compare == "rdss3" || compare == "rdss3ude" || compare == "rdss3nrw" || compare == "rdss3tudo";
}
}
}
\ No newline at end of file
......@@ -42,6 +42,7 @@ namespace Coscine.Database.DataModel
public virtual DbSet<ProjectResource> ProjectResources { get; set; }
public virtual DbSet<ProjectRole> ProjectRoles { get; set; }
public virtual DbSet<RdsS3resourceType> RdsS3resourceTypes { get; set; }
public virtual DbSet<RdsS3wormResourceType> RdsS3wormResourceTypes { get; set; }
public virtual DbSet<RdsresourceType> RdsresourceTypes { get; set; }
public virtual DbSet<Resource> Resources { get; set; }
public virtual DbSet<ResourceDiscipline> ResourceDisciplines { get; set; }
......@@ -543,6 +544,45 @@ namespace Coscine.Database.DataModel
.HasMaxLength(200);
});
modelBuilder.Entity<RdsS3wormResourceType>(entity =>
{
entity.ToTable("RdsS3WormResourceType");
entity.Property(e => e.Id).HasDefaultValueSql("(newid())");
entity.Property(e => e.AccessKey)
.IsRequired()
.HasMaxLength(200);
entity.Property(e => e.AccessKeyRead)
.IsRequired()
.HasMaxLength(200);
entity.Property(e => e.AccessKeyWrite)
.IsRequired()
.HasMaxLength(200);
entity.Property(e => e.BucketName)
.IsRequired()
.HasMaxLength(63);
entity.Property(e => e.Endpoint)
.IsRequired()
.HasMaxLength(200);
entity.Property(e => e.SecretKey)
.IsRequired()
.HasMaxLength(200);
entity.Property(e => e.SecretKeyRead)
.IsRequired()
.HasMaxLength(200);
entity.Property(e => e.SecretKeyWrite)
.IsRequired()
.HasMaxLength(200);
});
modelBuilder.Entity<RdsresourceType>(entity =>
{
entity.ToTable("RDSResourceType");
......@@ -634,6 +674,10 @@ namespace Coscine.Database.DataModel
entity.Property(e => e.Enabled)
.IsRequired()
.HasDefaultValueSql("((1))");
entity.Property(e => e.SpecificType).HasMaxLength(200);
entity.Property(e => e.Type).HasMaxLength(200);
});
modelBuilder.Entity<Role>(entity =>
......
using System;
using System.Collections.Generic;
// Code scaffolded by EF Core assumes nullable reference types (NRTs) are not used or disabled.
// If you have enabled NRTs for your project, then un-comment the following line:
// #nullable disable
namespace Coscine.Database.DataModel
{
public partial class RdsS3wormResourceType
{
public Guid Id { get; set; }
public string BucketName { get; set; }
public string AccessKey { get; set; }
public string SecretKey { get; set; }
public string AccessKeyRead { get; set; }
public string SecretKeyRead { get; set; }
public string AccessKeyWrite { get; set; }
public string SecretKeyWrite { get; set; }
public string Endpoint { get; set; }
public int Size { get; set; }
}
}
......@@ -18,6 +18,8 @@ namespace Coscine.Database.DataModel
public Guid Id { get; set; }
public string DisplayName { get; set; }
public bool? Enabled { get; set; }
public string Type { get; set; }
public string SpecificType { get; set; }
public virtual ICollection<ProjectQuota> ProjectQuotas { get; set; }
public virtual ICollection<Resource> Resources { get; set; }
......
......@@ -2,7 +2,7 @@
<PropertyGroup>
<RootNamespace>Coscine.Database</RootNamespace>
<TargetFrameworks>net6.0;net461</TargetFrameworks>
</PropertyGroup>
<Version>2.11.0</Version></PropertyGroup>
<ItemGroup>
<PackageReference Include="Inflector.NetStandard" Version="1.2.2" />
<!-- Note: use Microsoft.EntityFrameworkCore Version 3.x.x for compatibility with net461 -->
......