Password (unix, macOS).
This commit is contained in:
parent
4c753a3c39
commit
967da07465
5 changed files with 99 additions and 15 deletions
|
@ -29,6 +29,7 @@ var (
|
||||||
infoDlg bool
|
infoDlg bool
|
||||||
warningDlg bool
|
warningDlg bool
|
||||||
questionDlg bool
|
questionDlg bool
|
||||||
|
passwordDlg bool
|
||||||
fileSelectionDlg bool
|
fileSelectionDlg bool
|
||||||
colorSelectionDlg bool
|
colorSelectionDlg bool
|
||||||
|
|
||||||
|
@ -95,7 +96,7 @@ func main() {
|
||||||
errResult(zenity.Notify(text, opts...))
|
errResult(zenity.Notify(text, opts...))
|
||||||
|
|
||||||
case entryDlg:
|
case entryDlg:
|
||||||
strResult(zenity.Entry(text, opts...))
|
strOKResult(zenity.Entry(text, opts...))
|
||||||
|
|
||||||
case errorDlg:
|
case errorDlg:
|
||||||
okResult(zenity.Error(text, opts...))
|
okResult(zenity.Error(text, opts...))
|
||||||
|
@ -106,6 +107,10 @@ func main() {
|
||||||
case questionDlg:
|
case questionDlg:
|
||||||
okResult(zenity.Question(text, opts...))
|
okResult(zenity.Question(text, opts...))
|
||||||
|
|
||||||
|
case passwordDlg:
|
||||||
|
_, pw, ok, err := zenity.Password(opts...)
|
||||||
|
strOKResult(pw, ok, err)
|
||||||
|
|
||||||
case fileSelectionDlg:
|
case fileSelectionDlg:
|
||||||
switch {
|
switch {
|
||||||
default:
|
default:
|
||||||
|
@ -131,6 +136,7 @@ func setupFlags() {
|
||||||
flag.BoolVar(&infoDlg, "info", false, "Display info dialog")
|
flag.BoolVar(&infoDlg, "info", false, "Display info dialog")
|
||||||
flag.BoolVar(&warningDlg, "warning", false, "Display warning dialog")
|
flag.BoolVar(&warningDlg, "warning", false, "Display warning dialog")
|
||||||
flag.BoolVar(&questionDlg, "question", false, "Display question dialog")
|
flag.BoolVar(&questionDlg, "question", false, "Display question dialog")
|
||||||
|
flag.BoolVar(&passwordDlg, "password", false, "Display password dialog")
|
||||||
flag.BoolVar(&fileSelectionDlg, "file-selection", false, "Display file selection dialog")
|
flag.BoolVar(&fileSelectionDlg, "file-selection", false, "Display file selection dialog")
|
||||||
flag.BoolVar(&colorSelectionDlg, "color-selection", false, "Display color selection dialog")
|
flag.BoolVar(&colorSelectionDlg, "color-selection", false, "Display color selection dialog")
|
||||||
|
|
||||||
|
@ -207,6 +213,9 @@ func validateFlags() {
|
||||||
if questionDlg {
|
if questionDlg {
|
||||||
n++
|
n++
|
||||||
}
|
}
|
||||||
|
if passwordDlg {
|
||||||
|
n++
|
||||||
|
}
|
||||||
if fileSelectionDlg {
|
if fileSelectionDlg {
|
||||||
n++
|
n++
|
||||||
}
|
}
|
||||||
|
@ -255,6 +264,10 @@ func loadFlags() []zenity.Option {
|
||||||
setDefault(&text, "Are you sure you want to proceed?")
|
setDefault(&text, "Are you sure you want to proceed?")
|
||||||
setDefault(&okLabel, "Yes")
|
setDefault(&okLabel, "Yes")
|
||||||
setDefault(&cancelLabel, "No")
|
setDefault(&cancelLabel, "No")
|
||||||
|
case passwordDlg:
|
||||||
|
setDefault(&icon, "dialog-password")
|
||||||
|
setDefault(&okLabel, "OK")
|
||||||
|
setDefault(&cancelLabel, "Cancel")
|
||||||
default:
|
default:
|
||||||
setDefault(&text, "")
|
setDefault(&text, "")
|
||||||
}
|
}
|
||||||
|
@ -386,11 +399,11 @@ func listResult(l []string, err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errResult(err)
|
errResult(err)
|
||||||
}
|
}
|
||||||
os.Stdout.WriteString(strings.Join(l, zenutil.Separator))
|
|
||||||
os.Stdout.WriteString(zenutil.LineBreak)
|
|
||||||
if l == nil {
|
if l == nil {
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
os.Stdout.WriteString(strings.Join(l, zenutil.Separator))
|
||||||
|
os.Stdout.WriteString(zenutil.LineBreak)
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -406,6 +419,18 @@ func colorResult(c color.Color, err error) {
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func strOKResult(s string, ok bool, err error) {
|
||||||
|
if err != nil {
|
||||||
|
errResult(err)
|
||||||
|
}
|
||||||
|
if !ok {
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
os.Stdout.WriteString(s)
|
||||||
|
os.Stdout.WriteString(zenutil.LineBreak)
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
|
||||||
func ingestPath(path string) string {
|
func ingestPath(path string) string {
|
||||||
if runtime.GOOS == "windows" && path != "" {
|
if runtime.GOOS == "windows" && path != "" {
|
||||||
var args []string
|
var args []string
|
||||||
|
|
18
entry.go
18
entry.go
|
@ -2,14 +2,23 @@ package zenity
|
||||||
|
|
||||||
// Entry displays the text entry dialog.
|
// Entry displays the text entry dialog.
|
||||||
//
|
//
|
||||||
// Returns nil on cancel.
|
// Returns false on cancel, or ErrExtraButton.
|
||||||
//
|
//
|
||||||
// Valid options: Title, Width, Height, OKLabel, CancelLabel, ExtraButton,
|
// Valid options: Title, Width, Height, OKLabel, CancelLabel, ExtraButton,
|
||||||
// Icon, EntryText, HideText.
|
// Icon, EntryText, HideText.
|
||||||
func Entry(text string, options ...Option) (string, error) {
|
func Entry(text string, options ...Option) (string, bool, error) {
|
||||||
return entry(text, applyOptions(options))
|
return entry(text, applyOptions(options))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Password displays the password dialog.
|
||||||
|
//
|
||||||
|
// Returns false on cancel, or ErrExtraButton.
|
||||||
|
//
|
||||||
|
// Valid options: Title, OKLabel, CancelLabel, ExtraButton, Icon, Username.
|
||||||
|
func Password(options ...Option) (usr string, pw string, ok bool, err error) {
|
||||||
|
return password(applyOptions(options))
|
||||||
|
}
|
||||||
|
|
||||||
// EntryText returns an Option to set the entry text.
|
// EntryText returns an Option to set the entry text.
|
||||||
func EntryText(text string) Option {
|
func EntryText(text string) Option {
|
||||||
return funcOption(func(o *options) { o.entryText = text })
|
return funcOption(func(o *options) { o.entryText = text })
|
||||||
|
@ -19,3 +28,8 @@ func EntryText(text string) Option {
|
||||||
func HideText() Option {
|
func HideText() Option {
|
||||||
return funcOption(func(o *options) { o.hideText = true })
|
return funcOption(func(o *options) { o.hideText = true })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Username returns an Option to display the username (Unix only).
|
||||||
|
func Username() Option {
|
||||||
|
return funcOption(func(o *options) { o.username = true })
|
||||||
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"github.com/ncruces/zenity/internal/zenutil"
|
"github.com/ncruces/zenity/internal/zenutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
func entry(text string, opts options) (string, error) {
|
func entry(text string, opts options) (string, bool, error) {
|
||||||
var data zenutil.Dialog
|
var data zenutil.Dialog
|
||||||
data.Text = text
|
data.Text = text
|
||||||
data.Operation = "displayDialog"
|
data.Operation = "displayDialog"
|
||||||
|
@ -47,12 +47,18 @@ func entry(text string, opts options) (string, error) {
|
||||||
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
|
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
|
||||||
if len(out) > 0 && opts.extraButton != nil &&
|
if len(out) > 0 && opts.extraButton != nil &&
|
||||||
string(out[:len(out)-1]) == *opts.extraButton {
|
string(out[:len(out)-1]) == *opts.extraButton {
|
||||||
return "", ErrExtraButton
|
return "", false, ErrExtraButton
|
||||||
}
|
}
|
||||||
return "", nil
|
return "", false, nil
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", false, err
|
||||||
}
|
}
|
||||||
return string(out[:len(out)-1]), err
|
return string(out[:len(out)-1]), true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func password(opts options) (string, string, bool, error) {
|
||||||
|
opts.hideText = true
|
||||||
|
pass, ok, err := entry("Type your password", opts)
|
||||||
|
return "", pass, ok, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,11 +5,12 @@ package zenity
|
||||||
import (
|
import (
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/ncruces/zenity/internal/zenutil"
|
"github.com/ncruces/zenity/internal/zenutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
func entry(text string, opts options) (string, error) {
|
func entry(text string, opts options) (string, bool, error) {
|
||||||
args := []string{"--entry", "--text", text, "--entry-text", opts.entryText}
|
args := []string{"--entry", "--text", text, "--entry-text", opts.entryText}
|
||||||
if opts.title != nil {
|
if opts.title != nil {
|
||||||
args = append(args, "--title", *opts.title)
|
args = append(args, "--title", *opts.title)
|
||||||
|
@ -47,12 +48,49 @@ func entry(text string, opts options) (string, error) {
|
||||||
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
|
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
|
||||||
if len(out) > 0 && opts.extraButton != nil &&
|
if len(out) > 0 && opts.extraButton != nil &&
|
||||||
string(out[:len(out)-1]) == *opts.extraButton {
|
string(out[:len(out)-1]) == *opts.extraButton {
|
||||||
return "", ErrExtraButton
|
return "", false, ErrExtraButton
|
||||||
}
|
}
|
||||||
return "", nil
|
return "", false, nil
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", false, err
|
||||||
}
|
}
|
||||||
return string(out[:len(out)-1]), err
|
return string(out[:len(out)-1]), true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func password(opts options) (string, string, bool, error) {
|
||||||
|
args := []string{"--password"}
|
||||||
|
if opts.title != nil {
|
||||||
|
args = append(args, "--title", *opts.title)
|
||||||
|
}
|
||||||
|
if opts.okLabel != nil {
|
||||||
|
args = append(args, "--ok-label", *opts.okLabel)
|
||||||
|
}
|
||||||
|
if opts.cancelLabel != nil {
|
||||||
|
args = append(args, "--cancel-label", *opts.cancelLabel)
|
||||||
|
}
|
||||||
|
if opts.extraButton != nil {
|
||||||
|
args = append(args, "--extra-button", *opts.extraButton)
|
||||||
|
}
|
||||||
|
if opts.username {
|
||||||
|
args = append(args, "--username")
|
||||||
|
}
|
||||||
|
|
||||||
|
out, err := zenutil.Run(opts.ctx, args)
|
||||||
|
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
|
||||||
|
if len(out) > 0 && opts.extraButton != nil &&
|
||||||
|
string(out[:len(out)-1]) == *opts.extraButton {
|
||||||
|
return "", "", false, ErrExtraButton
|
||||||
|
}
|
||||||
|
return "", "", false, nil
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return "", "", false, err
|
||||||
|
}
|
||||||
|
if opts.username {
|
||||||
|
if split := strings.SplitN(string(out[:len(out)-1]), "|", 2); len(split) == 2 {
|
||||||
|
return split[0], split[1], true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "", string(out[:len(out)-1]), true, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ type options struct {
|
||||||
// Entry options
|
// Entry options
|
||||||
entryText string
|
entryText string
|
||||||
hideText bool
|
hideText bool
|
||||||
|
username bool
|
||||||
|
|
||||||
// Message options
|
// Message options
|
||||||
noWrap bool
|
noWrap bool
|
||||||
|
|
Loading…
Reference in a new issue