mirror of
https://git.uploadfilter24.eu/lerentis/terraform-provider-gitea.git
synced 2024-11-16 15:08:12 +00:00
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
|
||
|
}
|