using System; using System.Collections.Generic; using System.Linq; using BO.AppServer.Metadata.Enums; using BO.Console.Commands.Base; using BO.Console.Commands.Enums; using Quadarax.Foundation.Core.QConsole; using Quadarax.Foundation.Core.QConsole.Argument; using Quadarax.Foundation.Core.QConsole.Attributes; using Quadarax.Foundation.Core.QConsole.Value; using Quadarax.Foundation.Core.Value; using Quadarax.Foundation.Core.Value.Extensions; // ReSharper disable InconsistentNaming namespace BO.Console.Commands.User { [CommandDefinition] internal class UserGetAPIKeyCommand : AbstractGetCommand { #region *** Constants *** private const string CS_CMD_USERGET_NAME = "user_getapikey"; private const string CS_CMD_USERGET_DESCR = "Get default single user workspace api-key or api-password and process result."; private const string CS_ARG_NAME_TYPE = "outt"; private const string CS_ARG_HINT_TYPE = ""; private const string CS_ARG_DESC_TYPE = "Defines output target (no - none, clp - clipboard,var - env. variable). Default is no."; private const string CS_ARG_NAME_VALUE = "vt"; private const string CS_ARG_HINT_VALUE = ""; private const string CS_ARG_DESC_VALUE = "Defines value type to return (apikey,apipwd,apiboth). Default is apiboth."; private const string CS_ENV_VAR_VALUE_KEY = "bo_apikey"; private const string CS_ENV_VAR_VALUE_PWD = "bo_apipwd"; #endregion #region *** Properties *** public override string Name => CS_CMD_USERGET_NAME; public override string Description => CS_CMD_USERGET_DESCR; private OutputTargetEnum Target { get; set; } private ValueTypeApiKeyEnum ValueType { get; set; } #endregion #region *** Constructor *** public UserGetAPIKeyCommand(Engine engine) : base(engine) { } #endregion #region *** EXECUTE *** protected override Result OnExecute() { var user = Client.GetUserAsync(IdentificationType, IdentificationValue).Result; WriteInfo($"User '{user.Name}' [{user.Id}] validated (Created:{user.Created.ToFileShortDateTimeString()}, Logged:{user.LastLogged?.ToFileShortDateTimeString()}) "); var workspaces = Client.GetWorkspacesAsync(WorkspaceScopeEnums.MyDefault, user.Name).Result; if (!workspaces.Any()) throw new Exception($"No default workspace for user '{user.Name}' set."); var workspace = workspaces.First(); WriteInfo($"User has default workspace named '{workspace.Name}' [{workspace.Id}] (Created:{workspace.Audit.Created.ToFileShortDateTimeString()}, Changed:{workspace.Audit.Changed?.ToFileShortDateTimeString()})"); WriteCaption($"APIKey: {workspace.ApiKeyNormalized}"); WriteInfo($"APIPassword: {workspace.Apipassword}"); var value = ValueType == ValueTypeApiKeyEnum.ApiKey ? workspace.ApiKeyNormalized : ValueType == ValueTypeApiKeyEnum.ApiPwd ? workspace.Apipassword : workspace.ApiKeyNormalized + ";" + workspace.Apipassword; switch (Target) { case OutputTargetEnum.No: WriteCaption("No output target set."); break; case OutputTargetEnum.Clp: TextCopy.ClipboardService.SetText(value); WriteCaption($"Value '{value}' was set to clipboard."); break; case OutputTargetEnum.Var: if (ValueType == ValueTypeApiKeyEnum.ApiKey || ValueType == ValueTypeApiKeyEnum.ApiBoth) { Environment.SetEnvironmentVariable(CS_ENV_VAR_VALUE_KEY, workspace.ApiKeyNormalized, EnvironmentVariableTarget.Process); WriteCaption($"Value '{workspace.ApiKeyNormalized}' was set to environment value '{CS_ENV_VAR_VALUE_KEY}' in scope current process."); } if (ValueType == ValueTypeApiKeyEnum.ApiPwd || ValueType == ValueTypeApiKeyEnum.ApiBoth) { Environment.SetEnvironmentVariable(CS_ENV_VAR_VALUE_PWD, workspace.Apipassword, EnvironmentVariableTarget.Process); WriteCaption($"Value '{workspace.Apipassword}' was set to environment value '{CS_ENV_VAR_VALUE_PWD}' in scope current process."); } WriteInfo($"To use environment value: use %{CS_ENV_VAR_VALUE_KEY}% and/or %{CS_ENV_VAR_VALUE_PWD}%"); break; } return new Result(); } #endregion #region *** Private Overrides *** protected override void OnValidateArguments() { base.OnValidateArguments(); ValidateArgumentValueEnum(CS_ARG_NAME_TYPE); ValidateArgumentValueEnum(CS_ARG_NAME_VALUE); Target = GetArgumentValueOrDefault(CS_ARG_NAME_TYPE); ValueType = GetArgumentValueOrDefault(CS_ARG_NAME_VALUE); } protected override IEnumerable OnSetupArguments() { var args = base.OnSetupArguments().ToList(); args.Add(new NamedArgument(CS_ARG_NAME_TYPE, CS_ARG_DESC_TYPE, CS_ARG_HINT_TYPE, TypeValuesEnum.String, "no", false)); args.Add(new NamedArgument(CS_ARG_NAME_VALUE, CS_ARG_DESC_VALUE, CS_ARG_HINT_VALUE, TypeValuesEnum.String, "apiboth", false)); return args; } #endregion #region *** Private operations *** #endregion } }