From 8dade76b6db26f14ce4a4687c0a0954aeb0b61da Mon Sep 17 00:00:00 2001 From: manuel Date: Mon, 22 Sep 2025 19:49:44 +0200 Subject: [PATCH] correcciones ObtenerAccessTokenAsync --- GmailTokenManager.cs | 48 +++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 16 deletions(-) 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