using Microsoft.AspNetCore.DataProtection; namespace Bit.Core.Tokens { public class Token { private readonly string _token; public Token(string token) { _token = token; } public Token WithPrefix(string prefix) { return new Token($"{prefix}{_token}"); } public Token RemovePrefix(string expectedPrefix) { if (!_token.StartsWith(expectedPrefix)) { throw new BadTokenException($"Expected prefix, {expectedPrefix}, was not present."); } return new Token(_token[expectedPrefix.Length..]); } public Token ProtectWith(IDataProtector dataProtector) => new(dataProtector.Protect(ToString())); public Token UnprotectWith(IDataProtector dataProtector) => new(dataProtector.Unprotect(ToString())); public override string ToString() => _token; } }