101 lines
3.6 KiB
C#

using System.Collections.Generic;
using System.Security.Claims;
using System.Threading.Tasks;
using gehGassi.Domain.Users;
namespace gehGassi.Core.Interfaces
{
/// <summary>
/// Schnittstellenbeschreibung für einen Service der Token erstellt
/// </summary>
public interface ITokenService
{
/// <summary>
/// Erstellen eines Tokens
/// </summary>
/// <param name="claims">Zu setzende Claims</param>
/// <returns>Token als string</returns>
string GenerateAccessToken(IEnumerable<Claim> claims);
/// <summary>
/// Gibt das ClaimsPricipal basierend auf einem abgelaufenen Token zurück
/// </summary>
/// <param name="token">Abgelaufenes Token</param>
/// <returns>ClaimsPrincipal</returns>
ClaimsPrincipal GetPrincipalFromExpiredToken(string token);
}
/// <summary>
/// Schnittestellenbeschreibung für einen Service der die Verwaltung von Refresh-Tokens realisiert
/// </summary>
public interface IRefreshTokenService : IService<RefreshToken>
{
/// <summary>
/// Erstellten eines Tokens
/// </summary>
/// <returns>RefreshToken</returns>
RefreshToken Create();
/// <summary>
/// Gibt eine Liste aller RefreshTokens eines Benutzers zurück
/// </summary>
/// <param name="userId">Id des Benutzers</param>
/// <returns>Liste Refreshtokens</returns>
Task<List<RefreshToken>> GetAllAsync(string userId);
/// <summary>
/// Gibt ein Refreshtoken zurück
/// </summary>
/// <param name="userId">Id des Benutzers</param>
/// <param name="token">Refreshtoken</param>
/// <returns>RefreshToken</returns>
Task<RefreshToken> GetAsync(string userId, string token);
/// <summary>
/// Gibt ein Refreshtoken anhand des Tokens selbst zurück
/// </summary>
/// <param name="token">Token</param>
/// <returns>RefreshToken</returns>
Task<RefreshToken> GetByTokenAsync(string token);
/// <summary>
/// Gibt zurück ob ein Token gültig ist. Bedeutet, gibt es das Token und ist es noch nicht abgelaufen
/// </summary>
/// <param name="userId">Id des Benutzers</param>
/// <param name="token">Refreshtoken</param>
/// <returns>true wenn gültig, false sonst</returns>
Task<bool> IsValidAsync(string userId, string token);
/// <summary>
/// Löschen eines Refreshtokens
/// </summary>
/// <param name="id">Id des Tokens</param>
/// <param name="userName">Benutzername</param>
/// <returns>true wenn gelöscht, false sonst</returns>
Task<bool> RemoveAsync(long id, string userName);
/// <summary>
/// Löscht alle Refreshtokens eines Benutzers
/// </summary>
/// <param name="userId">Id des Tokens</param>
/// <param name="userName">Benutzername</param>
/// <returns>true wenn erfolgreich, false sonst</returns>
Task<bool> RemoveAllAsync(string userId, string userName);
/// <summary>
/// Löscht alle abgelaufenen Refreshtokens eines Benutzers
/// </summary>
/// <param name="userId">Id des Tokens</param>
/// <param name="userName">Benutzername</param>
/// <returns>true wenn erfolgreich, false sonst</returns>
Task<bool> RemoveExpiredAsync(string userId, string userName);
/// <summary>
/// Löscht alle abgelaufenen Refreshtokens
/// </summary>
/// <param name="userName">Benutzername</param>
/// <returns>true wenn erfolgreich, false sonst</returns>
Task<bool> RemoveExpiredAsync(string userName);
}
}