Files
raven-test-integration/CredRepo.cs
2020-05-13 22:36:32 +00:00

58 lines
1.7 KiB
C#

using System;
using System.Threading.Tasks;
using System.Threading;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
namespace raven_integration
{
public class CredRepo
{
static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1,1);
// private readonly object valueLock = new object();
private static Dictionary<string, string> authDict = new Dictionary<string, string>();
public CredRepo()
{
}
public static async Task<string> GetTokenAsync(string login, string password = null)
{
await semaphoreSlim.WaitAsync();
try{
if (password == null)
password = login;
if (!authDict.ContainsKey(login))
{
dynamic creds = new JObject();
creds.login = login;
creds.password = password;
ApiResponse a = await Util.PostAsync("auth", null, creds.ToString());
//Put this in when having concurrency issue during auth and old style dl token creation during login
// ValidateDataReturnResponseOk(a);
authDict[login] = a.ObjectResponse["data"]["token"].Value<string>();
}
return authDict[login];
}
finally{
semaphoreSlim.Release();
}
}
// public uint GetNext()
// {
// lock (valueLock)
// {
// currentValue += 1;
// if (currentValue == 0)
// currentValue += 1;
// return currentValue;
// }
// }
}
}