using System; using System.Collections.Concurrent; using System.Security.Cryptography; using System.Text; namespace Gott.Services; public class AuthService { private readonly ConcurrentDictionary _tokens = new(); // token -> userId public string HashPassword(string password) { var bytes = SHA256.HashData(Encoding.UTF8.GetBytes(password)); return Convert.ToHexStringLower(bytes); } public bool VerifyPassword(string password, string hash) { return HashPassword(password) == hash; } public string CreateToken(string userId) { var token = Convert.ToHexStringLower(RandomNumberGenerator.GetBytes(32)); _tokens[token] = userId; return token; } public string ValidateToken(string token) { if (string.IsNullOrEmpty(token)) return null; return _tokens.TryGetValue(token, out var userId) ? userId : null; } public void RevokeToken(string token) { if (!string.IsNullOrEmpty(token)) _tokens.TryRemove(token, out _); } }