Skip to content
Snippets Groups Projects
Commit faa7f91f authored by L. Ellenbeck's avatar L. Ellenbeck
Browse files

WIP: additional function coscine/issues#1125

parent aa66283c
Branches
No related tags found
1 merge request!100New: Add ApiToken Database Model
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<#@ include file="$(ProjectDir)\LinqToDB.Templates\PluralizationService.ttinclude" #> <#@ include file="$(ProjectDir)\LinqToDB.Templates\PluralizationService.ttinclude" #>
<#@ assembly name="$(ProjectDir)..\packages\Coscine.Configuration.1.5.0\lib\net461\Coscine.Configuration.dll"#> <#@ assembly name="$(ProjectDir)..\packages\Coscine.Configuration.1.5.0\lib\net461\Coscine.Configuration.dll"#>
<#@ assembly name="$(ProjectDir)..\packages\Coscine.Migrations.1.8.0-topic-1125-apito0001\lib\net461\Coscine.Migrations.dll" #> <#@ assembly name="$(ProjectDir)..\packages\Coscine.Migrations.1.8.0-topic-1125-apito0003\lib\net461\Coscine.Migrations.dll" #>
<#@ assembly name="$(ProjectDir)..\packages\Coscine.Database.Helpers.1.1.0\lib\net461\Coscine.Database.Helpers.dll" #> <#@ assembly name="$(ProjectDir)..\packages\Coscine.Database.Helpers.1.1.0\lib\net461\Coscine.Database.Helpers.dll" #>
<#@ assembly name="$(ProjectDir)..\packages\Microsoft.Extensions.DependencyInjection.2.0.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.dll"#> <#@ assembly name="$(ProjectDir)..\packages\Microsoft.Extensions.DependencyInjection.2.0.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.dll"#>
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
<HintPath>..\packages\Coscine.Database.Helpers.1.1.0\lib\net461\Coscine.Database.Helpers.dll</HintPath> <HintPath>..\packages\Coscine.Database.Helpers.1.1.0\lib\net461\Coscine.Database.Helpers.dll</HintPath>
</Reference> </Reference>
<Reference Include="Coscine.Migrations, Version=1.8.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Coscine.Migrations, Version=1.8.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Coscine.Migrations.1.8.0-topic-1125-apito0001\lib\net461\Coscine.Migrations.dll</HintPath> <HintPath>..\packages\Coscine.Migrations.1.8.0-topic-1125-apito0003\lib\net461\Coscine.Migrations.dll</HintPath>
</Reference> </Reference>
<Reference Include="FluentMigrator, Version=3.2.8.0, Culture=neutral, PublicKeyToken=aacfc7de5acabf05, processorArchitecture=MSIL"> <Reference Include="FluentMigrator, Version=3.2.8.0, Culture=neutral, PublicKeyToken=aacfc7de5acabf05, processorArchitecture=MSIL">
<HintPath>..\packages\FluentMigrator.3.2.8\lib\net461\FluentMigrator.dll</HintPath> <HintPath>..\packages\FluentMigrator.3.2.8\lib\net461\FluentMigrator.dll</HintPath>
......
...@@ -9,8 +9,8 @@ using System.Reflection; ...@@ -9,8 +9,8 @@ using System.Reflection;
[assembly: AssemblyDescription("Database.T4 is a part of the CoScInE group.")] [assembly: AssemblyDescription("Database.T4 is a part of the CoScInE group.")]
[assembly: AssemblyCompany("IT Center, RWTH Aachen University")] [assembly: AssemblyCompany("IT Center, RWTH Aachen University")]
[assembly: AssemblyProduct("Database.T4")] [assembly: AssemblyProduct("Database.T4")]
[assembly: AssemblyVersion("1.25.0")] [assembly: AssemblyVersion("1.26.0")]
[assembly: AssemblyFileVersion("1.25.0")] [assembly: AssemblyFileVersion("1.26.0")]
[assembly: AssemblyInformationalVersion("1.25.0-topic-1060-affil0001")] [assembly: AssemblyInformationalVersion("1.26.0-topic-1125-apito0001")]
[assembly: AssemblyCopyright("2020 IT Center, RWTH Aachen University")] [assembly: AssemblyCopyright("2020 IT Center, RWTH Aachen University")]
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<package id="Consul" version="0.7.2.6" targetFramework="net461" /> <package id="Consul" version="0.7.2.6" targetFramework="net461" />
<package id="Coscine.Configuration" version="1.5.0" targetFramework="net461" /> <package id="Coscine.Configuration" version="1.5.0" targetFramework="net461" />
<package id="Coscine.Database.Helpers" version="1.1.0" targetFramework="net461" /> <package id="Coscine.Database.Helpers" version="1.1.0" targetFramework="net461" />
<package id="Coscine.Migrations" version="1.8.0-topic-1125-apito0001" targetFramework="net461" /> <package id="Coscine.Migrations" version="1.8.0-topic-1125-apito0003" targetFramework="net461" />
<package id="FluentMigrator" version="3.2.8" targetFramework="net461" /> <package id="FluentMigrator" version="3.2.8" targetFramework="net461" />
<package id="FluentMigrator.Abstractions" version="3.2.8" targetFramework="net461" /> <package id="FluentMigrator.Abstractions" version="3.2.8" targetFramework="net461" />
<package id="FluentMigrator.Extensions.Oracle" version="3.2.8" targetFramework="net461" /> <package id="FluentMigrator.Extensions.Oracle" version="3.2.8" targetFramework="net461" />
......
...@@ -43,8 +43,8 @@ ...@@ -43,8 +43,8 @@
<Reference Include="Coscine.Database.Helpers, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Coscine.Database.Helpers, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Coscine.Database.Helpers.1.1.0\lib\net461\Coscine.Database.Helpers.dll</HintPath> <HintPath>..\packages\Coscine.Database.Helpers.1.1.0\lib\net461\Coscine.Database.Helpers.dll</HintPath>
</Reference> </Reference>
<Reference Include="Coscine.Migrations, Version=1.7.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Coscine.Migrations, Version=1.8.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Coscine.Migrations.1.7.0\lib\net461\Coscine.Migrations.dll</HintPath> <HintPath>..\packages\Coscine.Migrations.1.8.0-topic-1125-apito0003\lib\net461\Coscine.Migrations.dll</HintPath>
</Reference> </Reference>
<Reference Include="FluentMigrator, Version=3.2.8.0, Culture=neutral, PublicKeyToken=aacfc7de5acabf05, processorArchitecture=MSIL"> <Reference Include="FluentMigrator, Version=3.2.8.0, Culture=neutral, PublicKeyToken=aacfc7de5acabf05, processorArchitecture=MSIL">
<HintPath>..\packages\FluentMigrator.3.2.8\lib\net461\FluentMigrator.dll</HintPath> <HintPath>..\packages\FluentMigrator.3.2.8\lib\net461\FluentMigrator.dll</HintPath>
......
...@@ -9,8 +9,8 @@ using System.Reflection; ...@@ -9,8 +9,8 @@ using System.Reflection;
[assembly: AssemblyDescription("Database.Tests is a part of the CoScInE group.")] [assembly: AssemblyDescription("Database.Tests is a part of the CoScInE group.")]
[assembly: AssemblyCompany("IT Center, RWTH Aachen University")] [assembly: AssemblyCompany("IT Center, RWTH Aachen University")]
[assembly: AssemblyProduct("Database.Tests")] [assembly: AssemblyProduct("Database.Tests")]
[assembly: AssemblyVersion("1.25.0")] [assembly: AssemblyVersion("1.26.0")]
[assembly: AssemblyFileVersion("1.25.0")] [assembly: AssemblyFileVersion("1.26.0")]
[assembly: AssemblyInformationalVersion("1.25.0-topic-1060-affil0001")] [assembly: AssemblyInformationalVersion("1.26.0-topic-1125-apito0001")]
[assembly: AssemblyCopyright("2020 IT Center, RWTH Aachen University")] [assembly: AssemblyCopyright("2020 IT Center, RWTH Aachen University")]
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<package id="Consul" version="0.7.2.6" targetFramework="net461" /> <package id="Consul" version="0.7.2.6" targetFramework="net461" />
<package id="Coscine.Configuration" version="1.5.0" targetFramework="net461" /> <package id="Coscine.Configuration" version="1.5.0" targetFramework="net461" />
<package id="Coscine.Database.Helpers" version="1.1.0" targetFramework="net461" /> <package id="Coscine.Database.Helpers" version="1.1.0" targetFramework="net461" />
<package id="Coscine.Migrations" version="1.7.0" targetFramework="net461" /> <package id="Coscine.Migrations" version="1.8.0-topic-1125-apito0003" targetFramework="net461" />
<package id="FluentMigrator" version="3.2.8" targetFramework="net461" /> <package id="FluentMigrator" version="3.2.8" targetFramework="net461" />
<package id="FluentMigrator.Abstractions" version="3.2.8" targetFramework="net461" /> <package id="FluentMigrator.Abstractions" version="3.2.8" targetFramework="net461" />
<package id="FluentMigrator.Extensions.Oracle" version="3.2.8" targetFramework="net461" /> <package id="FluentMigrator.Extensions.Oracle" version="3.2.8" targetFramework="net461" />
......
...@@ -81,6 +81,7 @@ ...@@ -81,6 +81,7 @@
<Compile Include="Models\ExternalIdModel.cs" /> <Compile Include="Models\ExternalIdModel.cs" />
<Compile Include="Models\FeaturesModel.cs" /> <Compile Include="Models\FeaturesModel.cs" />
<Compile Include="Models\ProjectQuotasModel.cs" /> <Compile Include="Models\ProjectQuotasModel.cs" />
<Compile Include="Models\ApiTokenModel.cs" />
<Compile Include="Models\TOSModel.cs" /> <Compile Include="Models\TOSModel.cs" />
<Compile Include="ReturnObjects\ActivatedFeatureObject.cs" /> <Compile Include="ReturnObjects\ActivatedFeatureObject.cs" />
<Compile Include="Models\LogModel.cs" /> <Compile Include="Models\LogModel.cs" />
...@@ -99,6 +100,7 @@ ...@@ -99,6 +100,7 @@
<Compile Include="ReturnObjects\ResourceObject.cs" /> <Compile Include="ReturnObjects\ResourceObject.cs" />
<Compile Include="ReturnObjects\ResourceTypeObject.cs" /> <Compile Include="ReturnObjects\ResourceTypeObject.cs" />
<Compile Include="ReturnObjects\ResourceTypeOptionObject.cs" /> <Compile Include="ReturnObjects\ResourceTypeOptionObject.cs" />
<Compile Include="ReturnObjects\ApiTokenObject.cs" />
<Compile Include="ReturnObjects\RoleObject.cs" /> <Compile Include="ReturnObjects\RoleObject.cs" />
<Compile Include="ReturnObjects\S3ResourceTypeObject.cs" /> <Compile Include="ReturnObjects\S3ResourceTypeObject.cs" />
<Compile Include="ReturnObjects\TitleObject.cs" /> <Compile Include="ReturnObjects\TitleObject.cs" />
......
using Coscine.Database.DataModel;
using Coscine.Database.ReturnObjects;
using LinqToDB;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Linq;
namespace Coscine.Database.Models
{
public class ApiTokenModel : DatabaseModel<ApiToken>
{
public override Expression<Func<ApiToken, Guid>> GetIdFromObject()
{
return databaseObject => databaseObject.Id;
}
public override ITable<ApiToken> GetITableFromDatabase(CoscineDB db)
{
return db.ApiTokens;
}
public override void SetObjectId(ApiToken databaseObject, Guid id)
{
databaseObject.Id = id;
}
public IEnumerable<ApiTokenObject> GetTokens(string userId)
{
return GetTokens(new Guid(userId));
}
public IEnumerable<ApiTokenObject> GetTokens(User user)
{
return GetTokens(user.Id);
}
public IEnumerable<ApiTokenObject> GetTokens(Guid userId)
{
return GetAllWhere((tableEntry) => tableEntry.UserId == userId)
.Select(x => new ApiTokenObject { Created = x.Creation, Expires = x.Expiration, Token = x.Token, Description = x.Description })
.OrderBy(x => x.Created);
}
public ApiTokenObject GetToken(string userId, string token)
{
var t = GetWhere(x => x.Token.ToLower() == token.ToLower() && x.UserId.ToString() == userId);
return new ApiTokenObject { Created = t.Creation, Expires = t.Expiration, Token = t.Token, Description = t.Description };
}
private ApiToken GetApiToken(string token)
{
return GetWhere(x => x.Token.ToLower() == token.ToLower());
}
public bool Valiate(string token, User user)
{
return Valiate(token, user.Id);
}
public bool Valiate(string token, string userId)
{
return Valiate(token, new Guid(userId));
}
public bool Valiate(string token, Guid userId)
{
var t = GetApiToken(token);
return t != null && t.UserId == userId
&& t.Expiration.ToUniversalTime() < DateTime.Now.ToUniversalTime()
&& t.Creation.ToUniversalTime() > DateTime.Now.ToUniversalTime();
}
public User GetUser(string token)
{
return GetUser(GetApiToken(token));
}
public User GetUser(ApiToken token)
{
var userModel = new UserModel();
return userModel.GetWhere(x => x.Id == token.UserId);
}
public string GenerateToken(Guid user, string desciption, uint expiresInDays = 370)
{
// Minimum of 7 and maximum of 370
expiresInDays = Math.Min(expiresInDays, 370);
expiresInDays = Math.Max(expiresInDays, 7);
var token = Guid.NewGuid().ToString("N").ToLower();
Insert(new ApiToken {
Creation = DateTime.Now.ToUniversalTime(),
Expiration = DateTime.Now.AddDays(expiresInDays).ToUniversalTime(),
UserId = user,
Token = token,
Description = desciption
});
return token;
}
public void Revoke(ApiToken token)
{
Delete(token);
}
public void Revoke(Guid tokenId)
{
Revoke(GetApiToken(tokenId.ToString()));
}
public void Revoke(string tokenId)
{
Revoke(GetApiToken(tokenId));
}
}
}
...@@ -9,8 +9,8 @@ using System.Reflection; ...@@ -9,8 +9,8 @@ using System.Reflection;
[assembly: AssemblyDescription("Database is a part of the CoScInE group.")] [assembly: AssemblyDescription("Database is a part of the CoScInE group.")]
[assembly: AssemblyCompany("IT Center, RWTH Aachen University")] [assembly: AssemblyCompany("IT Center, RWTH Aachen University")]
[assembly: AssemblyProduct("Database")] [assembly: AssemblyProduct("Database")]
[assembly: AssemblyVersion("1.25.0")] [assembly: AssemblyVersion("1.26.0")]
[assembly: AssemblyFileVersion("1.25.0")] [assembly: AssemblyFileVersion("1.26.0")]
[assembly: AssemblyInformationalVersion("1.25.0-topic-1060-affil0001")] [assembly: AssemblyInformationalVersion("1.26.0-topic-1125-apito0001")]
[assembly: AssemblyCopyright("2020 IT Center, RWTH Aachen University")] [assembly: AssemblyCopyright("2020 IT Center, RWTH Aachen University")]
using System;
namespace Coscine.Database.ReturnObjects
{
[Serializable]
public class ApiTokenObject : IReturnObject
{
public string Token { get; set; }
public string Description { get; set; }
public DateTime Created { get; set; }
public DateTime Expires { get; set; }
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment