1
0
mirror of https://github.com/ssh-vault/ssh-vault.git synced 2025-04-19 07:42:18 +03:00
ssh-vault/create.go
2016-10-09 15:28:14 +02:00

50 lines
990 B
Go

package sshvault
import (
"bufio"
"io/ioutil"
"os"
"os/exec"
)
// Create reads from STDIN or opens $EDITOR default to vi
func (v *vault) Create() ([]byte, error) {
// check if there is someting to read on STDIN
stat, _ := os.Stdin.Stat()
if (stat.Mode() & os.ModeCharDevice) == 0 {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanBytes)
var stdin []byte
for scanner.Scan() {
stdin = append(stdin, scanner.Bytes()...)
}
if err := scanner.Err(); err != nil {
return nil, err
}
return stdin, nil
}
// use $EDITOR
tmpfile, err := ioutil.TempFile("", v.Fingerprint)
if err != nil {
return nil, err
}
defer Shred(tmpfile.Name())
editor := os.Getenv("EDITOR")
if editor == "" {
editor = "vi"
}
cmd := exec.Command(editor, tmpfile.Name())
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
err = cmd.Run()
if err != nil {
return nil, err
}
b, err := ioutil.ReadFile(tmpfile.Name())
if err != nil {
return nil, err
}
return b, nil
}