using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Websockets.Managers
{
public interface ISocketTokenManager
{
Guid GenerateToken(string s);
string GetUsername(Guid g);
}
public class SocketTokenManager : ISocketTokenManager
{
///
/// Key is userName
///
private readonly Dictionary Tokens;
public SocketTokenManager()
{
Tokens = new Dictionary();
}
public Guid GenerateToken(string userName)
{
var guid = Guid.NewGuid();
if (Tokens.ContainsKey(userName))
{
Tokens.Remove(userName);
}
Tokens.Add(userName, guid);
_ = Task.Run(async () =>
{
await Task.Delay(TimeSpan.FromMinutes(1));
Tokens.Remove(userName);
});
return guid;
}
/// User name associated to the guid or null.
public string GetUsername(Guid guid)
{
if (Tokens.ContainsValue(guid))
{
var username = Tokens.First(kvp => kvp.Value == guid).Key;
Tokens.Remove(username);
return username;
}
return null;
}
}
}