using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using xCommons.Extensions; using xIdentityModels.Models; using xIdentityService.Interfaces; namespace xIdentityService.Providers { public partial class XInMemoryTokenProvider : IXTokenProvider { private IDictionary DbContext; public XInMemoryTokenProvider () { // this.DbContext = new Dictionary (); } public async Task IsTokenExists (string accessToken) { // // Validate Args ... if (accessToken.IsNullOrEmpty ()) { return false; } // // Process Result ... var result = DbContext.Keys.Any (k => k == accessToken); return await Task.FromResult (result); } public async Task IsTokenExists (XTokenResponse tokens) { // // Validate Args ... if (tokens.IsNull () || tokens.AccessToken.IsNullOrEmpty () || !await IsTokenExists (tokens.AccessToken)) { return false; }; // // Process Result ... var result = await IsTokenExists (tokens.AccessToken); return result; } public async Task RemoveToken (string accessToken) { // // Validate Args ... if (accessToken.IsNullOrEmpty ()) { return false; } // // Process Result ... var result = DbContext.Remove (accessToken); return await Task.FromResult (result); } public async Task RemoveToken (XTokenResponse tokens) { // // Validate Args ... if (tokens.IsNull () || tokens.AccessToken.IsNullOrEmpty () || !await IsTokenExists (tokens.AccessToken)) { return false; }; // // Process Result ... var result = await RemoveToken (tokens.AccessToken); return result; } public async Task RetrieveToken (string accessToken) { // // Validate Args ... if (accessToken.IsNullOrEmpty () || !await IsTokenExists (accessToken)) { return null; } // // Process Result ... var result = DbContext[accessToken]; return result; } public async Task AddToken (XTokenResponse tokens) { // // Validate Args ... if (tokens.IsNull () || tokens.AccessToken.IsNullOrEmpty () || await IsTokenExists (tokens.AccessToken)) { return false; }; // // Process Result ... try { // DbContext.Add (tokens.AccessToken, tokens); return true; } catch { return false; } } public async Task UpdateToken (XTokenResponse tokens) { // // Validate Args ... if (tokens.IsNull () || tokens.AccessToken.IsNullOrEmpty () || !await IsTokenExists (tokens.AccessToken)) { return false; }; // // Process Result ... try { // DbContext[tokens.AccessToken] = tokens; return true; } catch { return false; } } public async Task AddOrUpdateToken (XTokenResponse tokens) { // // Validate Args ... if (tokens.IsNull () || tokens.AccessToken.IsNullOrEmpty () ) { return false; }; // // Process Result ... try { // var isExists = await IsTokenExists (tokens); if (isExists) { return await UpdateToken (tokens); } else { return await AddToken (tokens); } } catch { return false; } } } }