From 5ce8b4442c364976334a8d8df293a32d2cacb95d Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Tue, 2 Nov 2021 12:26:11 +0300 Subject: [PATCH] Log error messages for HTML pages as well. volosoft/volo#7719 --- .../Volo/Abp/Cli/Commands/LoginCommand.cs | 69 +++++++++++++++++-- 1 file changed, 65 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs index 1111918932..a92328f60a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs @@ -3,7 +3,9 @@ using Microsoft.Extensions.Logging.Abstractions; using System; using System.Text; using System.Text.Json; +using System.Text.RegularExpressions; using System.Threading.Tasks; +using System.Web; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Auth; using Volo.Abp.Cli.Http; @@ -49,9 +51,8 @@ namespace Volo.Abp.Cli.Commands var organization = commandLineArgs.Options.GetOrNull(Options.Organization.Short, Options.Organization.Long); - if (string.IsNullOrWhiteSpace(organization) && await CheckMultipleOrganizationsAsync(commandLineArgs.Target)) + if (await HasMultipleOrganizationAndThisNotSpecified(commandLineArgs, organization)) { - Logger.LogError($"You have multiple organizations, please specify your organization with `--organization` parameter."); return; } @@ -80,13 +81,73 @@ namespace Volo.Abp.Cli.Commands } catch (Exception ex) { - Logger.LogError(ex.Message); + LogCliError(ex, commandLineArgs); return; } - + Logger.LogInformation($"Successfully logged in as '{commandLineArgs.Target}'"); } + private async Task HasMultipleOrganizationAndThisNotSpecified(CommandLineArgs commandLineArgs, string organization) + { + if (string.IsNullOrWhiteSpace(organization) && + await CheckMultipleOrganizationsAsync(commandLineArgs.Target)) + { + Logger.LogError($"You have multiple organizations, please specify your organization with `--organization` parameter."); + return true; + } + + return false; + } + + private void LogCliError(Exception ex, CommandLineArgs args) + { + if (ex.Message.Contains("Invalid username or password")) + { + Logger.LogError("Invalid username or password!"); + return; + } + + if (TryGetErrorMessageFromHtmlPage(ex.Message, out var errorMsg)) + { + Logger.LogError(errorMsg); + return; + } + + Logger.LogError(ex.Message); + } + + private static bool TryGetErrorMessageFromHtmlPage(string htmlPage, out string errorMessage) + { + if (!htmlPage.Contains("error-page-container")) + { + errorMessage = null; + return false; + } + + var decodedHtml = HttpUtility.HtmlDecode(htmlPage); + + var error = Regex.Match(decodedHtml, + @"(.*?)", + RegexOptions.IgnoreCase | + RegexOptions.IgnorePatternWhitespace | + RegexOptions.Singleline | + RegexOptions.Multiline); + + if (error.Success && error.Groups.Count > 1) + { + errorMessage = error.Groups[1].Value; + errorMessage = errorMessage + .Replace("", string.Empty) + .Replace("", string.Empty); + + return true; + } + + errorMessage = null; + return false; + } + private async Task CheckMultipleOrganizationsAsync(string username) { var url = $"{CliUrls.WwwAbpIo}api/license/check-multiple-organizations?username={username}";