mirror of
https://github.com/kemko/nomad.git
synced 2026-01-06 18:35:44 +03:00
This PR switches the Nomad repository from using govendor to Go modules for managing dependencies. Aspects of the Nomad workflow remain pretty much the same. The usual Makefile targets should continue to work as they always did. The API submodule simply defers to the parent Nomad version on the repository, keeping the semantics of API versioning that currently exists.
42 lines
864 B
Go
42 lines
864 B
Go
// +build windows
|
|
|
|
package speakeasy
|
|
|
|
import (
|
|
"syscall"
|
|
)
|
|
|
|
// SetConsoleMode function can be used to change value of ENABLE_ECHO_INPUT:
|
|
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx
|
|
const ENABLE_ECHO_INPUT = 0x0004
|
|
|
|
func getPassword() (password string, err error) {
|
|
var oldMode uint32
|
|
|
|
err = syscall.GetConsoleMode(syscall.Stdin, &oldMode)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var newMode uint32 = (oldMode &^ ENABLE_ECHO_INPUT)
|
|
|
|
err = setConsoleMode(syscall.Stdin, newMode)
|
|
defer setConsoleMode(syscall.Stdin, oldMode)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return readline()
|
|
}
|
|
|
|
func setConsoleMode(console syscall.Handle, mode uint32) (err error) {
|
|
dll := syscall.MustLoadDLL("kernel32")
|
|
proc := dll.MustFindProc("SetConsoleMode")
|
|
r, _, err := proc.Call(uintptr(console), uintptr(mode))
|
|
|
|
if r == 0 {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|