protected string GetValue(List <string> aliases, Spi.Input.Options options)
 {
     return(aliases
            .Select(a => options.ValueOrDefault(a))
            .Where(v => !string.IsNullOrWhiteSpace(v))
            .FirstOrDefault());
 }
Пример #2
0
        public override string Run(Spi.Input.Options options)
        {
            var credentials = new Security.Common.Credentials(options);
            var result      = Task.Run(() => _credentialStore.Write(credentials)).Result;

            if (result)
            {
                Logger.LogError($"Failed to save {credentials}");
            }

            return(string.Empty);
        }
Пример #3
0
        public Task <ICredentialKey> GenerateKey(Spi.Input.Options options)
        {
            // TODO magic boo
            var uri = new UriBuilder()
            {
                UserName = options.ValueOrDefault("user"),
                Host     = options.ValueOrDefault("host"),
                Scheme   = options.ValueOrDefault("protocol"),
                Path     = options.ValueOrDefault("path")
            };

            return(Task.FromResult(new GcmwCredentialKey(uri.Uri) as ICredentialKey));
        }
        public override string Run(Spi.Input.Options options)
        {
            var credentials = new Security.Common.Credentials(options);

            Logger.LogDebug($"Attempting to delete {credentials}");

            var result = Task.Run(() => _credentialStore.Delete(credentials)).Result;

            if (result)
            {
                return("true");
            }

            return("false");
        }
        public virtual string Run(Spi.Input.Options options)
        {
            Console.WriteLine($"Called [{Name}] with options:");

            foreach (var option in options)
            {
                Console.Write($"{option.Key}=[");
                foreach (var value in option.Value)
                {
                    Console.Write($"{value},");
                }
                Console.WriteLine($"]");
            }

            return(null);
        }
        protected Spi.Input.Options GetRuntimeOptions(CommandLineApplication command, IEnumerable <IOptionDefinition> commandOptions)
        {
            var options = new Spi.Input.Options();

            // get env vars
            // - get all found
            GetEnvironmentVariableOptions().ToList().ForEach(x => options[x.Key] = x.Value);
            // get command line args
            // - get all found + overwrite/override env var
            var dave = command.Options.Distinct().ToDictionary(o => o.LongName, o => o.Values).ToList();

            dave.ForEach(x => options[x.Key] = x.Value);
            // do we have all we need?
            if (!options.Any(op =>
                             op.Value.Any() && commandOptions.Any(co => co.Name.Equals(op.Key, StringComparison.InvariantCultureIgnoreCase))))
            {
                // - if not
                //  - get interactive values
                var operationArguments = new Manager.Model.OperationArguments();

                // Parse the operations arguments from stdin (this is how git sends commands)
                // see: https://www.kernel.org/pub/software/scm/git/docs/technical/api-credentials.html
                // see: https://www.kernel.org/pub/software/scm/git/docs/git-credential.html
                using (var stdin = Console.OpenStandardInput())
                {
                    Task.Run(async() => await operationArguments.ReadInput(stdin)).Wait();
                }

                operationArguments.Options.ToList().ForEach(x => options[x.Key] = x.Value);
            }

            foreach (var option in options)
            {
                StringBuilder buffer = new StringBuilder();
                buffer.Append($"{option.Key}=[");
                foreach (var value in option.Value)
                {
                    buffer.Append($"{value},");
                }
                buffer.Append($"]");
                buffer.Append(System.Environment.NewLine);

                Logger.LogDebug(buffer.ToString());
            }

            return(options);
        }
Пример #7
0
        public override string Run(Spi.Input.Options options)
        {
            // get host
            var host = _hosts
                       .Select(h => new
            {
                Handler = h,
                Weight  = h.CanHandle(
                    options.ValueOrDefault(Manager.Options.Command.Host.CanonicalName)
                    ).Result
            }
                               )
                       .OrderBy(a => a.Weight).Where(a => a.Weight >= 1)
                       .FirstOrDefault().Handler;
            //read from credential store
            var foundCredentials = Task.Run(() => _credentialStore.Read(_credentialKeyFactory.GenerateKey(options).Result)).Result;

            if (foundCredentials != null)
            {
                return(foundCredentials.GetResponse());
            }

            if (!IsInteractive(options))
            {
                return(null);
            }
            var guiHost = host as Spi.Gui.Hosts.IHost;

            if (UseModalPrompt(options) && guiHost != null)
            {
                Program.BuildAvaloniaApp().Start((app, args) =>
                {
                    foundCredentials = guiHost.PromptGui(app);
                },
                                                 System.Environment.GetCommandLineArgs());

                return(foundCredentials.GetResponse());
            }
            else
            {
                foundCredentials = Task.Run(() => host.PromptCli()).Result;
                return(foundCredentials.GetResponse());
            }
        }
Пример #8
0
 public Credentials(Spi.Input.Options options) : this(options.ValueOrDefault("user"), options.ValueOrDefault("protocol"), options.ValueOrDefault("host"), options.ValueOrDefault("path"), options.ValueOrDefault("password"))
 {
 }
        protected bool UseModalPrompt(Spi.Input.Options options)
        {
            var val = GetValue(new Manager.Options.Command.ModalPrompt().Aliases.ToList(), options);

            return(val == null || val.Equals("true", StringComparison.InvariantCultureIgnoreCase));
        }
        protected bool IsInteractive(Spi.Input.Options options)
        {
            var val = GetValue(new Manager.Options.Command.Interactive().Aliases.ToList(), options);

            return(val == null || val.Equals("Always", StringComparison.InvariantCultureIgnoreCase) || val.Equals("Auto", StringComparison.InvariantCultureIgnoreCase));
        }