forked from grafana/tanka
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathalert.go
44 lines (34 loc) · 853 Bytes
/
alert.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package term
import (
"bufio"
"fmt"
"io"
"os"
"github.com/pkg/errors"
)
var ErrConfirmationFailed = errors.New("aborted by user")
// Confirm asks the user for confirmation
func Confirm(msg, approval string) error {
return confirmFrom(os.Stdin, os.Stdout, msg, approval)
}
func confirmFrom(r io.Reader, w io.Writer, msg, approval string) error {
reader := bufio.NewScanner(r)
_, err := fmt.Fprintln(w, msg)
if err != nil {
return errors.Wrap(err, "writing to stdout")
}
_, err = fmt.Fprintf(w, "Please type '%s' to confirm: ", approval)
if err != nil {
return errors.Wrap(err, "writing to stdout")
}
if !reader.Scan() {
if err := reader.Err(); err != nil {
return errors.Wrap(err, "reading from stdin")
}
return ErrConfirmationFailed
}
if reader.Text() != approval {
return ErrConfirmationFailed
}
return nil
}