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