Select Git revision
-
Marcel Nellesen authoredMarcel Nellesen authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ApiTokenModel.cs 2.57 KiB
using Coscine.Database.DataModel;
using Microsoft.EntityFrameworkCore;
using Coscine.Database.ReturnObjects;
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 DbSet<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 { TokenId = x.Id, Created = x.IssuedAt, Expires = x.Expiration, Name = x.Name })
.OrderBy(x => x.Created);
}
public ApiTokenObject GetToken(Guid userId, Guid tokenId)
{
var t = GetWhere(x => x.UserId == userId && x.Id == tokenId);
if (t == null)
{
return null;
}
return new ApiTokenObject { TokenId = t.Id, Created = t.IssuedAt, Expires = t.Expiration, Name = t.Name };
}
public User GetUser(Guid tokenId)
{
return GetUser(GetById(tokenId));
}
public User GetUser(ApiToken token)
{
var userModel = new UserModel();
return userModel.GetWhere(x => x.Id == token.UserId);
}
public void InsertToken(Guid tokenId, DateTime issuedAt, DateTime expires, Guid userId, string name)
{
Insert(new ApiToken
{
Id = tokenId,
IssuedAt = issuedAt,
Expiration = expires,
UserId = userId,
Name = name
});
}
public int Revoke(Guid userId, Guid tokenId)
{
var apiToken = GetById(tokenId);
if (apiToken.UserId == userId)
{
return Delete(apiToken);
}
else
{
return 0;
}
}
}
}