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();