58 lines
1.2 KiB
C#
58 lines
1.2 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Key is userName
|
|
/// </summary>
|
|
private readonly Dictionary<string, Guid> Tokens;
|
|
|
|
public SocketTokenManager()
|
|
{
|
|
Tokens = new Dictionary<string, Guid>();
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
/// <returns>User name associated to the guid or null.</returns>
|
|
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;
|
|
}
|
|
}
|
|
}
|