From a4accfc4ad55be5d36c24287857e4877c69d1aac Mon Sep 17 00:00:00 2001 From: EngincanV Date: Tue, 27 Apr 2021 14:49:55 +0300 Subject: [PATCH] Update LogoutAsync for deallocate developer seat when logged out --- .../Volo/Abp/Cli/Auth/AuthService.cs | 63 +++++++++++++++++-- .../Volo/Abp/Cli/CliConsts.cs | 2 + 2 files changed, 59 insertions(+), 6 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs index f3cb291f56..1f88d2a5a4 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs @@ -1,8 +1,16 @@ using System; using System.IO; +using System.Net.Http; using System.Text; +using System.Text.Json; +using System.Threading; using System.Threading.Tasks; using IdentityModel; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; +using Volo.Abp.Cli.Commands; +using Volo.Abp.Cli.Http; +using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.DependencyInjection; using Volo.Abp.IdentityModel; using Volo.Abp.IO; @@ -12,10 +20,18 @@ namespace Volo.Abp.Cli.Auth public class AuthService : ITransientDependency { protected IIdentityModelAuthenticationService AuthenticationService { get; } - - public AuthService(IIdentityModelAuthenticationService authenticationService) + protected ILogger Logger { get; } + protected CliHttpClientFactory CliHttpClientFactory { get; } + + public AuthService( + IIdentityModelAuthenticationService authenticationService, + ILogger logger, + CliHttpClientFactory cliHttpClientFactory + ) { AuthenticationService = authenticationService; + Logger = logger; + CliHttpClientFactory = cliHttpClientFactory; } public async Task LoginAsync(string userName, string password, string organizationName = null) @@ -40,11 +56,46 @@ namespace Volo.Abp.Cli.Auth File.WriteAllText(CliPaths.AccessToken, accessToken, Encoding.UTF8); } - public Task LogoutAsync() + public async Task LogoutAsync() { - FileHelper.DeleteIfExists(CliPaths.AccessToken); - FileHelper.DeleteIfExists(CliPaths.Lic); - return Task.CompletedTask; + string accessToken = ""; + if (File.Exists(CliPaths.AccessToken)) + { + accessToken = File.ReadAllText(CliPaths.AccessToken); + FileHelper.DeleteIfExists(CliPaths.AccessToken); + } + + if (File.Exists(CliPaths.Lic)) + { + if (!string.IsNullOrWhiteSpace(accessToken)) + { + await LogoutAsync(accessToken); + } + + FileHelper.DeleteIfExists(CliPaths.Lic); + } + } + + private async Task LogoutAsync(string accessToken) + { + try + { + var client = CliHttpClientFactory.CreateClient(); + var data = JsonSerializer.Serialize(new { token = accessToken }); + var content = new StringContent(data, Encoding.UTF8, "application/json"); + + using (var response = await client.PostAsync(CliConsts.LogoutUrl, content, CancellationToken.None)) + { + if (!response.IsSuccessStatusCode) + { + Logger.LogWarning($"Cannot logout! Status Code: '{response.StatusCode}'"); + } + } + } + catch (Exception e) + { + Logger.LogWarning($"Cannot logout. {e.Message}"); + } } public static bool IsLoggedIn() diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs index 37dbbba318..77fa3b8236 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs @@ -9,5 +9,7 @@ public const string DocsLink = "https://docs.abp.io"; public const string HttpClientName = "AbpHttpClient"; + + public const string LogoutUrl = CliUrls.WwwAbpIo + "api/license/logout"; } }