diff --git a/GmailTokenManager.cs b/GmailTokenManager.cs index 1ce2cef..ecd9bbc 100644 --- a/GmailTokenManager.cs +++ b/GmailTokenManager.cs @@ -6,26 +6,42 @@ using System.Threading.Tasks; public static class GmailTokenManager { + //public static async Task ObtenerAccessTokenAsync(GmailConfig config) + //{ + // var stream = new MemoryStream(config.ClientSecret); + + // var credencial = await GoogleWebAuthorizationBroker.AuthorizeAsync( + // GoogleClientSecrets.FromStream(stream).Secrets, + // new[] { "https://mail.google.com/" }, + // config.Usuario, + // CancellationToken.None, + // new FileDataStore(config.TokenFolder, true) + // ); + + // return await credencial.GetAccessTokenForRequestAsync(); + //} + private static readonly SemaphoreSlim _tokenSemaphore = new SemaphoreSlim(1, 1); + public static async Task ObtenerAccessTokenAsync(GmailConfig config) { - //var stream = new FileStream(config.ClientSecretPath, FileMode.Open, FileAccess.Read); var stream = new MemoryStream(config.ClientSecret); - //var credencial = await GoogleWebAuthorizationBroker.AuthorizeAsync( - // GoogleClientSecrets.FromStream(stream).Secrets, - // new[] { "https://www.googleapis.com/auth/gmail.send" }, - // config.Usuario, - // CancellationToken.None, - // new FileDataStore(config.TokenFolder, true) - //); - var credencial = await GoogleWebAuthorizationBroker.AuthorizeAsync( - GoogleClientSecrets.FromStream(stream).Secrets, - new[] { "https://mail.google.com/" }, - config.Usuario, - CancellationToken.None, - new FileDataStore(config.TokenFolder, true) - ); + await _tokenSemaphore.WaitAsync(); + try + { + var credencial = await GoogleWebAuthorizationBroker.AuthorizeAsync( + GoogleClientSecrets.FromStream(stream).Secrets, + new[] { "https://mail.google.com/" }, + config.Usuario, + CancellationToken.None, + new FileDataStore(config.TokenFolder, true) + ); - return await credencial.GetAccessTokenForRequestAsync(); + return await credencial.GetAccessTokenForRequestAsync(); + } + finally + { + _tokenSemaphore.Release(); + } } } \ No newline at end of file