From 320875a4b25e6280eae74bcf27ad812143f9b5a2 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 4 May 2021 15:27:10 +0300 Subject: [PATCH] Created LoginInfoCommand --- .../Volo/Abp/Cli/AbpCliCoreModule.cs | 1 + .../Volo/Abp/Cli/Auth/AuthService.cs | 43 +++++++++++-- .../Volo/Abp/Cli/Auth/LoginInfo.cs | 16 +++++ .../Abp/Cli/Commands/LoginInfoCommand..cs | 63 +++++++++++++++++++ 4 files changed, 119 insertions(+), 4 deletions(-) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/LoginInfo.cs create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginInfoCommand..cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs index 330cbeb77a..ce6ab1e831 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs @@ -36,6 +36,7 @@ namespace Volo.Abp.Cli options.Commands["add-module"] = typeof(AddModuleCommand); options.Commands["list-modules"] = typeof(ListModulesCommand); options.Commands["login"] = typeof(LoginCommand); + options.Commands["login-info"] = typeof(LoginInfoCommand); options.Commands["logout"] = typeof(LogoutCommand); options.Commands[GenerateProxyCommand.Name] = typeof(GenerateProxyCommand); options.Commands[RemoveProxyCommand.Name] = typeof(RemoveProxyCommand); 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 61008ee826..bb16733e16 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 @@ -9,8 +9,10 @@ using IdentityModel; 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.Json; using Volo.Abp.Threading; namespace Volo.Abp.Cli.Auth @@ -18,21 +20,54 @@ namespace Volo.Abp.Cli.Auth public class AuthService : ITransientDependency { protected IIdentityModelAuthenticationService AuthenticationService { get; } - protected ILogger Logger { get; } + protected ILogger Logger { get; } protected CliHttpClientFactory CliHttpClientFactory { get; } + public RemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } + public IJsonSerializer JsonSerializer { get; } public ICancellationTokenProvider CancellationTokenProvider { get; } public AuthService( IIdentityModelAuthenticationService authenticationService, - ILogger logger, + ILogger logger, ICancellationTokenProvider cancellationTokenProvider, - CliHttpClientFactory cliHttpClientFactory + CliHttpClientFactory cliHttpClientFactory, + RemoteServiceExceptionHandler remoteServiceExceptionHandler, + IJsonSerializer jsonSerializer ) { AuthenticationService = authenticationService; Logger = logger; CancellationTokenProvider = cancellationTokenProvider; CliHttpClientFactory = cliHttpClientFactory; + RemoteServiceExceptionHandler = remoteServiceExceptionHandler; + JsonSerializer = jsonSerializer; + } + + public async Task GetLoginInfoAsync() + { + if (!IsLoggedIn()) + { + return null; + } + + var url = $"{CliUrls.WwwAbpIo}api/license/login-info"; + + var client = CliHttpClientFactory.CreateClient(); + + using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger)) + { + if (!response.IsSuccessStatusCode) + { + Logger.LogError("Remote server returns '{response.StatusCode}'"); + return null; + } + + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); + + var responseContent = await response.Content.ReadAsStringAsync(); + + return JsonSerializer.Deserialize(responseContent); + } } public async Task LoginAsync(string userName, string password, string organizationName = null) @@ -108,4 +143,4 @@ namespace Volo.Abp.Cli.Auth return File.Exists(CliPaths.AccessToken); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/LoginInfo.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/LoginInfo.cs new file mode 100644 index 0000000000..2ad31421e5 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/LoginInfo.cs @@ -0,0 +1,16 @@ + +namespace Volo.Abp.Cli.Auth +{ + public class LoginInfo + { + public string Name { get; set; } + + public string Surname { get; set; } + + public string Username { get; set; } + + public string EmailAddress { get; set; } + + public string Organization { get; set; } + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginInfoCommand..cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginInfoCommand..cs new file mode 100644 index 0000000000..e5bd62c393 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginInfoCommand..cs @@ -0,0 +1,63 @@ +using System; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Cli.Args; +using Volo.Abp.Cli.Auth; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Cli.Commands +{ + public class LoginInfoCommand : IConsoleCommand, ITransientDependency + { + public ILogger Logger { get; set; } + + protected AuthService AuthService { get; } + + public LoginInfoCommand(AuthService authService) + { + AuthService = authService; + Logger = NullLogger.Instance; + } + + public async Task ExecuteAsync(CommandLineArgs commandLineArgs) + { + var loginInfo = await AuthService.GetLoginInfoAsync(); + + if (loginInfo == null) + { + Logger.LogError("Unable to get login info."); + return; + } + + var sb = new StringBuilder(); + sb.AppendLine(""); + sb.AppendLine($"Login info:"); + sb.AppendLine($"Name: {loginInfo.Name}"); + sb.AppendLine($"Surname: {loginInfo.Surname}"); + sb.AppendLine($"Username: {loginInfo.Username}"); + sb.AppendLine($"Email Address: {loginInfo.EmailAddress}"); + sb.AppendLine($"Organization: {loginInfo.Organization}"); + Logger.LogInformation(sb.ToString()); + } + + public string GetUsageInfo() + { + var sb = new StringBuilder(); + + sb.AppendLine(""); + sb.AppendLine("Usage:"); + sb.AppendLine(" abp login-info"); + sb.AppendLine(""); + sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI"); + + return sb.ToString(); + } + + public string GetShortDescription() + { + return "Show your login info."; + } + } +}