UserGetAPIKeyCommand.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using BO.AppServer.Metadata.Enums;
  5. using BO.Console.Commands.Base;
  6. using BO.Console.Commands.Enums;
  7. using Quadarax.Foundation.Core.QConsole;
  8. using Quadarax.Foundation.Core.QConsole.Argument;
  9. using Quadarax.Foundation.Core.QConsole.Attributes;
  10. using Quadarax.Foundation.Core.QConsole.Value;
  11. using Quadarax.Foundation.Core.Value;
  12. using Quadarax.Foundation.Core.Value.Extensions;
  13. // ReSharper disable InconsistentNaming
  14. namespace BO.Console.Commands.User
  15. {
  16. [CommandDefinition]
  17. internal class UserGetAPIKeyCommand : AbstractGetCommand
  18. {
  19. #region *** Constants ***
  20. private const string CS_CMD_USERGET_NAME = "user_getapikey";
  21. private const string CS_CMD_USERGET_DESCR = "Get default single user workspace api-key or api-password and process result. Should be run as Administrator.";
  22. private const string CS_ARG_NAME_TYPE = "outt";
  23. private const string CS_ARG_HINT_TYPE = "<output_target>";
  24. private const string CS_ARG_DESC_TYPE = "Defines output target (no - none, clp - clipboard,var - env. variable). Default is no.";
  25. private const string CS_ARG_NAME_VALUE = "vt";
  26. private const string CS_ARG_HINT_VALUE = "<value_type>";
  27. private const string CS_ARG_DESC_VALUE = "Defines value type to return (apikey,apipwd,apiboth). Default is apiboth.";
  28. private const string CS_ENV_VAR_VALUE_KEY = "bo_apikey";
  29. private const string CS_ENV_VAR_VALUE_PWD = "bo_apipwd";
  30. #endregion
  31. #region *** Properties ***
  32. public override string Name => CS_CMD_USERGET_NAME;
  33. public override string Description => CS_CMD_USERGET_DESCR;
  34. private OutputTargetEnum Target { get; set; }
  35. private ValueTypeApiKeyEnum ValueType { get; set; }
  36. #endregion
  37. #region *** Constructor ***
  38. public UserGetAPIKeyCommand(Engine engine) : base(engine)
  39. {
  40. }
  41. #endregion
  42. #region *** EXECUTE ***
  43. protected override Result OnExecute()
  44. {
  45. var user = Client.GetUserAsync(IdentificationType, IdentificationValue).Result;
  46. WriteInfo($"User '{user.Name}' [{user.Id}] validated (Created:{user.Created.ToFileShortDateTimeString()}, Logged:{user.LastLogged?.ToFileShortDateTimeString()}) ");
  47. var workspaces = Client.GetWorkspacesAsync(WorkspaceScopeEnums.MyDefault, user.Name).Result;
  48. if (!workspaces.Any())
  49. throw new Exception($"No default workspace for user '{user.Name}' set.");
  50. var workspace = workspaces.First();
  51. WriteInfo($"User has default workspace named '{workspace.Name}' [{workspace.Id}] (Created:{workspace.Audit.Created.ToFileShortDateTimeString()}, Changed:{workspace.Audit.Changed?.ToFileShortDateTimeString()})");
  52. WriteCaption($"APIKey: {workspace.ApiKeyNormalized}");
  53. WriteInfo($"APIPassword: {workspace.Apipassword}");
  54. var value = ValueType == ValueTypeApiKeyEnum.ApiKey
  55. ? workspace.ApiKeyNormalized
  56. : ValueType == ValueTypeApiKeyEnum.ApiPwd ? workspace.Apipassword : workspace.ApiKeyNormalized + ";" + workspace.Apipassword;
  57. switch (Target)
  58. {
  59. case OutputTargetEnum.No:
  60. WriteCaption("No output target set.");
  61. break;
  62. case OutputTargetEnum.Clp:
  63. TextCopy.ClipboardService.SetText(value);
  64. WriteCaption($"Value '{value}' was set to clipboard.");
  65. break;
  66. case OutputTargetEnum.Var:
  67. WriteWarning("This feature must run in Administration mode (as Administrator).");
  68. if (ValueType == ValueTypeApiKeyEnum.ApiKey || ValueType == ValueTypeApiKeyEnum.ApiBoth)
  69. {
  70. Environment.SetEnvironmentVariable(CS_ENV_VAR_VALUE_KEY, workspace.ApiKeyNormalized, EnvironmentVariableTarget.Process);
  71. WriteCaption($"Value '{workspace.ApiKeyNormalized}' was set to environment value '{CS_ENV_VAR_VALUE_KEY}' in scope current process.");
  72. }
  73. if (ValueType == ValueTypeApiKeyEnum.ApiPwd || ValueType == ValueTypeApiKeyEnum.ApiBoth)
  74. {
  75. Environment.SetEnvironmentVariable(CS_ENV_VAR_VALUE_PWD, workspace.Apipassword, EnvironmentVariableTarget.Process);
  76. WriteCaption($"Value '{workspace.Apipassword}' was set to environment value '{CS_ENV_VAR_VALUE_PWD}' in scope current process.");
  77. }
  78. WriteInfo($"To use environment value: use %{CS_ENV_VAR_VALUE_KEY}% and/or %{CS_ENV_VAR_VALUE_PWD}%");
  79. break;
  80. }
  81. return new Result();
  82. }
  83. #endregion
  84. #region *** Private Overrides ***
  85. protected override void OnValidateArguments()
  86. {
  87. base.OnValidateArguments();
  88. ValidateArgumentValueEnum<OutputTargetEnum>(CS_ARG_NAME_TYPE);
  89. ValidateArgumentValueEnum<ValueTypeApiKeyEnum>(CS_ARG_NAME_VALUE);
  90. Target = GetArgumentValueOrDefault<OutputTargetEnum>(CS_ARG_NAME_TYPE);
  91. ValueType = GetArgumentValueOrDefault<ValueTypeApiKeyEnum>(CS_ARG_NAME_VALUE);
  92. }
  93. protected override IEnumerable<AbstractArgument> OnSetupArguments()
  94. {
  95. var args = base.OnSetupArguments().ToList();
  96. args.Add(new NamedArgument(CS_ARG_NAME_TYPE, CS_ARG_DESC_TYPE, CS_ARG_HINT_TYPE, TypeValuesEnum.String, "no", false));
  97. args.Add(new NamedArgument(CS_ARG_NAME_VALUE, CS_ARG_DESC_VALUE, CS_ARG_HINT_VALUE, TypeValuesEnum.String, "apiboth", false));
  98. return args;
  99. }
  100. #endregion
  101. #region *** Private operations ***
  102. #endregion
  103. }
  104. }