diff --git a/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj b/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj index df4d76cce5..41cb647649 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj +++ b/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj @@ -21,6 +21,7 @@ + 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 eaa7aa0175..2dd39cdfce 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 @@ -1,6 +1,7 @@ using System.Text; using Volo.Abp.Cli.Commands; using Volo.Abp.Domain; +using Volo.Abp.IdentityModel; using Volo.Abp.Json; using Volo.Abp.Modularity; @@ -8,7 +9,8 @@ namespace Volo.Abp.Cli { [DependsOn( typeof(AbpDddDomainModule), - typeof(AbpJsonModule) + typeof(AbpJsonModule), + typeof(AbpIdentityModelModule) )] public class AbpCliCoreModule : AbpModule { 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 692e699e75..68dfc52cf9 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,18 +1,43 @@ -using System.Threading.Tasks; +using System.IO; +using System.Text; +using System.Threading.Tasks; +using IdentityModel; using Volo.Abp.DependencyInjection; +using Volo.Abp.IdentityModel; +using Volo.Abp.IO; namespace Volo.Abp.Cli.Auth { public class AuthService : ITransientDependency { + protected IIdentityModelAuthenticationService AuthenticationService { get; } + + public AuthService(IIdentityModelAuthenticationService authenticationService) + { + AuthenticationService = authenticationService; + } + public async Task LoginAsync(string userName, string password) { + var accessToken = await AuthenticationService.GetAccessTokenAsync( + new IdentityClientConfiguration( + "https://localhost:44333", //TODO: Configure + "role email abpio_www", + "abp-cli", + "1q2w3e*", + OidcConstants.GrantTypes.Password, + userName, + password + ) + ); + File.WriteAllText(CliPaths.AccessToken, accessToken, Encoding.UTF8); } - public async Task LogoutAsync() + public Task LogoutAsync() { - + FileHelper.DeleteIfExists(CliPaths.AccessToken); + return Task.CompletedTask; } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliPaths.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliPaths.cs index b0296671b3..9c3f5a458c 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliPaths.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliPaths.cs @@ -5,8 +5,10 @@ namespace Volo.Abp.Cli { public static class CliPaths { - public static string TemplateCachePath => Path.Combine(AbpRootPath, "templates"); - public static string CliLogPath => Path.Combine(AbpRootPath, "cli", "logs"); + public static string TemplateCache => Path.Combine(AbpRootPath, "templates"); //TODO: Move somewhere else? + public static string Log => Path.Combine(AbpRootPath, "cli", "logs"); + public static string Root => Path.Combine(AbpRootPath, "cli"); + public static string AccessToken => Path.Combine(AbpRootPath, "cli", "access-token.bin"); private static readonly string AbpRootPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".abp"); } 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 e1a215b201..b0c96a7297 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 @@ -1,9 +1,10 @@ -using System; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using System; +using System.Threading.Tasks; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Auth; +using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; namespace Volo.Abp.Cli.Commands @@ -24,8 +25,33 @@ namespace Volo.Abp.Cli.Commands { if (commandLineArgs.Target.IsNullOrEmpty()) { + Logger.LogWarning("Username is missing."); + LogHelp(); + return; + } + Console.Write("Password: "); + var password = ConsoleHelper.ReadSecret(); + if (password.IsNullOrWhiteSpace()) + { + Logger.LogWarning("Password is missing."); + LogHelp(); + return; } + + await AuthService.LoginAsync(commandLineArgs.Target, password); + + Console.WriteLine($"Successfully logged in as '{commandLineArgs.Target}'"); + } + + private void LogHelp() + { + Logger.LogWarning(""); + Logger.LogWarning("Usage:"); + Logger.LogWarning(" abp login "); + Logger.LogWarning(""); + Logger.LogWarning("Example:"); + Logger.LogWarning(" abp login john"); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewProjectCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs similarity index 100% rename from framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewProjectCommand.cs rename to framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ConsoleHelper.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ConsoleHelper.cs new file mode 100644 index 0000000000..6e05e118d1 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ConsoleHelper.cs @@ -0,0 +1,26 @@ +using System; +using System.Text; + +namespace Volo.Abp.Cli.Utils +{ + public static class ConsoleHelper + { + public static string ReadSecret() + { + var sb = new StringBuilder(); + + while (true) + { + var keyInfo = Console.ReadKey(true); + if (keyInfo.Key == ConsoleKey.Enter) + { + break; + } + + sb.Append(keyInfo.KeyChar); + } + + return sb.ToString(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/ProjectBuilding/AbpIoTemplateStore.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/ProjectBuilding/AbpIoTemplateStore.cs index 6f3956f604..4715d3558e 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/ProjectBuilding/AbpIoTemplateStore.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/ProjectBuilding/AbpIoTemplateStore.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.ProjectBuilding public async Task GetAsync(string templateName, string version) { - var localCacheFolder = Path.Combine(CliPaths.TemplateCachePath, version); + var localCacheFolder = Path.Combine(CliPaths.TemplateCache, version); DirectoryHelper.CreateIfNotExists(localCacheFolder); var localCacheFile = Path.Combine(localCacheFolder, templateName + ".zip"); diff --git a/framework/src/Volo.Abp.Cli/Volo/Abp/Cli/AbpCliModule.cs b/framework/src/Volo.Abp.Cli/Volo/Abp/Cli/AbpCliModule.cs index 339041ef8a..7a3fbdc2bf 100644 --- a/framework/src/Volo.Abp.Cli/Volo/Abp/Cli/AbpCliModule.cs +++ b/framework/src/Volo.Abp.Cli/Volo/Abp/Cli/AbpCliModule.cs @@ -9,6 +9,9 @@ namespace Volo.Abp.Cli )] public class AbpCliModule : AbpModule { - + public override void ConfigureServices(ServiceConfigurationContext context) + { + + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli/Volo/Abp/Cli/Program.cs b/framework/src/Volo.Abp.Cli/Volo/Abp/Cli/Program.cs index 02759655ff..0bcff277c6 100644 --- a/framework/src/Volo.Abp.Cli/Volo/Abp/Cli/Program.cs +++ b/framework/src/Volo.Abp.Cli/Volo/Abp/Cli/Program.cs @@ -14,7 +14,7 @@ namespace Volo.Abp.Cli .MinimumLevel.Information() .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) .Enrich.FromLogContext() - .WriteTo.File(Path.Combine(CliPaths.CliLogPath, "abp-cli-logs.txt")) + .WriteTo.File(Path.Combine(CliPaths.Log, "abp-cli-logs.txt")) .WriteTo.Console() .CreateLogger();