From 8f092044503a3f7c91fd65f1f064463ea458849b Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Mon, 18 Apr 2016 01:26:14 -0700 Subject: [PATCH] add prompt Signed-off-by: Jess Frazelle --- rootfs_ops.go | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/rootfs_ops.go b/rootfs_ops.go index a7ed9c3..d567f16 100644 --- a/rootfs_ops.go +++ b/rootfs_ops.go @@ -1,16 +1,30 @@ package main import ( + "bufio" "bytes" "encoding/base64" + "fmt" + "io" "os" "github.com/docker/docker/pkg/archive" + "github.com/docker/docker/pkg/term" "github.com/jfrazelle/binctr/cryptar" "github.com/opencontainers/runtime-spec/specs-go" ) -func unpackRootfs(spec *specs.Spec, keyin string) error { +func unpackRootfs(spec *specs.Spec, keyin string) (err error) { + fmt.Fprintf(os.Stdout, "Hello.\n") + fmt.Fprintf(os.Stdout, "Let's play Global Thermonuclear War.\n") + + if keyin == "" { + keyin, err = promptPasskey() + if err != nil { + return err + } + } + key, err := base64.StdEncoding.DecodeString(keyin) if err != nil { return err @@ -32,3 +46,30 @@ func unpackRootfs(spec *specs.Spec, keyin string) error { return nil } + +// prompt for passkey +func promptPasskey() (string, error) { + inFd, _ := term.GetFdInfo(os.Stdin) + oldState, err := term.SaveState(inFd) + if err != nil { + return "", err + } + fmt.Fprintf(os.Stdout, "Key: ") + term.DisableEcho(inFd, oldState) + + keyin := readInput(os.Stdin, os.Stdout) + fmt.Fprint(os.Stdout, "\n") + + term.RestoreTerminal(inFd, oldState) + return keyin, nil +} + +func readInput(in io.Reader, out io.Writer) string { + reader := bufio.NewReader(in) + line, _, err := reader.ReadLine() + if err != nil { + fmt.Fprintln(out, err.Error()) + os.Exit(1) + } + return string(line) +}