internal bool BitbucketOAuthPrompt(string title, TargetUri targetUri, Bitbucket.AuthenticationResultType resultType, string username)
 => _bitbucketOauthPrompt(this, title, targetUri, resultType, username);
Example #2
0
        public static bool OAuthPrompt(Program program, string title, TargetUri targetUri, Bitbucket.AuthenticationResultType resultType, string username)
        {
            const int BufferReadSize = 16 * 1024;

            Debug.Assert(targetUri != null);

            var  buffer  = new StringBuilder(BufferReadSize);
            uint read    = 0;
            uint written = 0;

            string accessToken = null;

            var fileAccessFlags         = NativeMethods.FileAccess.GenericRead | NativeMethods.FileAccess.GenericWrite;
            var fileAttributes          = NativeMethods.FileAttributes.Normal;
            var fileCreationDisposition = NativeMethods.FileCreationDisposition.OpenExisting;
            var fileShareFlags          = NativeMethods.FileShare.Read | NativeMethods.FileShare.Write;

            using (var stdout = NativeMethods.CreateFile(NativeMethods.ConsoleOutName, fileAccessFlags, fileShareFlags,
                                                         IntPtr.Zero, fileCreationDisposition, fileAttributes, IntPtr.Zero))
            {
                using (var stdin = NativeMethods.CreateFile(NativeMethods.ConsoleInName, fileAccessFlags, fileShareFlags,
                                                            IntPtr.Zero, fileCreationDisposition, fileAttributes, IntPtr.Zero))
                {
                    buffer.AppendLine()
                    .Append(title)
                    .Append(" OAuth Access Token: ");

                    if (!NativeMethods.WriteConsole(stdout, buffer, (uint)buffer.Length, out written, IntPtr.Zero))
                    {
                        var error = Marshal.GetLastWin32Error();
                        throw new Win32Exception(error, "Unable to write to standard output (" + NativeMethods.Win32Error.GetText(error) + ").");
                    }
                    buffer.Clear();

                    // read input from the user
                    if (!NativeMethods.ReadConsole(stdin, buffer, BufferReadSize, out read, IntPtr.Zero))
                    {
                        var error = Marshal.GetLastWin32Error();
                        throw new Win32Exception(error, "Unable to read from standard input (" + NativeMethods.Win32Error.GetText(error) + ").");
                    }

                    accessToken = buffer.ToString(0, (int)read);
                    accessToken = accessToken.Trim(Program.NewLineChars);
                }
            }
            return(accessToken != null);
        }
Example #3
0
        public static bool OAuthPrompt(Program program, string title, TargetUri targetUri, Bitbucket.AuthenticationResultType resultType, string username)
        {
            const int BufferReadSize = 16 * 1024;

            Debug.Assert(targetUri != null);

            var  buffer  = new StringBuilder(BufferReadSize);
            uint read    = 0;
            uint written = 0;

            string accessToken = null;

            var fileAccessFlags = FileAccess.GenericRead
                                  | FileAccess.GenericWrite;
            var fileAttributes          = FileAttributes.Normal;
            var fileCreationDisposition = FileCreationDisposition.OpenExisting;
            var fileShareFlags          = FileShare.Read
                                          | FileShare.Write;

            using (var stdout = CreateFile(fileName: ConsoleOutName,
                                           desiredAccess: fileAccessFlags,
                                           shareMode: fileShareFlags,
                                           securityAttributes: IntPtr.Zero,
                                           creationDisposition: fileCreationDisposition,
                                           flagsAndAttributes: fileAttributes,
                                           templateFile: IntPtr.Zero))
                using (var stdin = CreateFile(fileName: ConsoleInName,
                                              desiredAccess: fileAccessFlags,
                                              shareMode: fileShareFlags,
                                              securityAttributes: IntPtr.Zero,
                                              creationDisposition: fileCreationDisposition,
                                              flagsAndAttributes: fileAttributes,
                                              templateFile: IntPtr.Zero))
                {
                    buffer.AppendLine()
                    .Append(title)
                    .Append(" OAuth Access Token: ");

                    if (!WriteConsole(buffer: buffer,
                                      consoleOutputHandle: stdout,
                                      numberOfCharsToWrite: (uint)buffer.Length,
                                      numberOfCharsWritten: out written,
                                      reserved: IntPtr.Zero))
                    {
                        var error = Marshal.GetLastWin32Error();
                        throw new Win32Exception(error, "Unable to write to standard output (" + Win32Error.GetText(error) + ").");
                    }
                    buffer.Clear();

                    // read input from the user
                    if (!ReadConsole(buffer: buffer,
                                     consoleInputHandle: stdin,
                                     numberOfCharsToRead: BufferReadSize,
                                     numberOfCharsRead: out read,
                                     reserved: IntPtr.Zero))
                    {
                        var error = Marshal.GetLastWin32Error();
                        throw new Win32Exception(error, "Unable to read from standard input (" + Win32Error.GetText(error) + ").");
                    }

                    accessToken = buffer.ToString(0, (int)read);
                    accessToken = accessToken.Trim(program.NewLineChars);
                }

            return(accessToken != null);
        }