private void CheckAndRespond(Process process, StreamWriter stdin, CommandLine.StreamData data) { if (process.HasExited) { return; } // The password prompt text won't have a trailing newline, so read ahead on stdout to locate it. var stdoutData = GetBufferedData(0); var stdoutText = Aggregate(stdoutData).text; var password = _promptToPasswordDictionary .Where(kvp => stdoutText.Contains(kvp.Key)) .Select(kvp => kvp.Value) .FirstOrDefault(); if (password == null) { return; } Flush(); // UTF8 to match "--pass-encoding utf-8" argument passed to apksigner. foreach (var value in Encoding.UTF8.GetBytes(password + Environment.NewLine)) { stdin.BaseStream.WriteByte(value); } stdin.BaseStream.Flush(); }
private void CheckAndRespond(Process process, StreamWriter stdin, CommandLine.StreamData data) { if (process.HasExited) { return; } // The password prompt text won't have a trailing newline, so read ahead on stdout to locate it. var stderrData = GetBufferedData(CommandLine.StandardErrorStreamDataHandle); var stderrText = Aggregate(stderrData).text; var password = _promptToPasswordDictionary .Where(kvp => kvp.Key.IsMatch(stderrText)) .Select(kvp => kvp.Value) .FirstOrDefault(); if (password == null) { return; } Flush(); // Use UTF8 to support non ASCII passwords var passwordBytes = Encoding.UTF8.GetBytes(password + Environment.NewLine); stdin.BaseStream.Write(passwordBytes, 0, passwordBytes.Length); stdin.BaseStream.Flush(); }