mirror of
https://github.com/Threnklyn/jira.git
synced 2026-05-18 20:23:28 +02:00
Merge pull request #285 from patrickpichler/add-gopass-support
Add gopass as password source support
This commit is contained in:
@@ -31,6 +31,13 @@ func (o *GlobalOptions) keyName() string {
|
|||||||
}
|
}
|
||||||
return fmt.Sprintf("GoJira/%s", user)
|
return fmt.Sprintf("GoJira/%s", user)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if o.PasswordSource.Value == "gopass" {
|
||||||
|
if o.PasswordName.Value != "" {
|
||||||
|
return o.PasswordName.Value
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("GoJira/%s", user)
|
||||||
|
}
|
||||||
return user
|
return user
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,6 +50,25 @@ func (o *GlobalOptions) GetPass() string {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
} else if o.PasswordSource.Value == "gopass" {
|
||||||
|
if o.PasswordDirectory.Value != "" {
|
||||||
|
orig := os.Getenv("PASSWORD_STORE_DIR")
|
||||||
|
os.Setenv("PASSWORD_STORE_DIR", o.PasswordDirectory.Value)
|
||||||
|
defer os.Setenv("PASSWORD_STORE_DIR", orig)
|
||||||
|
}
|
||||||
|
if bin, err := exec.LookPath("gopass"); err == nil {
|
||||||
|
buf := bytes.NewBufferString("")
|
||||||
|
cmd := exec.Command(bin, "show", "-o", o.keyName())
|
||||||
|
cmd.Stdout = buf
|
||||||
|
cmd.Stderr = buf
|
||||||
|
if err := cmd.Run(); err == nil {
|
||||||
|
passwd = strings.TrimSpace(buf.String())
|
||||||
|
} else {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Warning("Gopass binary was not found! Fallback to default password behaviour!")
|
||||||
|
}
|
||||||
} else if o.PasswordSource.Value == "pass" {
|
} else if o.PasswordSource.Value == "pass" {
|
||||||
if o.PasswordDirectory.Value != "" {
|
if o.PasswordDirectory.Value != "" {
|
||||||
orig := os.Getenv("PASSWORD_STORE_DIR")
|
orig := os.Getenv("PASSWORD_STORE_DIR")
|
||||||
@@ -56,7 +82,11 @@ func (o *GlobalOptions) GetPass() string {
|
|||||||
cmd.Stderr = buf
|
cmd.Stderr = buf
|
||||||
if err := cmd.Run(); err == nil {
|
if err := cmd.Run(); err == nil {
|
||||||
passwd = strings.TrimSpace(buf.String())
|
passwd = strings.TrimSpace(buf.String())
|
||||||
|
} else {
|
||||||
|
panic(err)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
log.Warning("Pass binary was not found! Fallback to default password behaviour!")
|
||||||
}
|
}
|
||||||
} else if o.PasswordSource.Value == "stdin" {
|
} else if o.PasswordSource.Value == "stdin" {
|
||||||
allBytes, err := ioutil.ReadAll(os.Stdin)
|
allBytes, err := ioutil.ReadAll(os.Stdin)
|
||||||
@@ -109,6 +139,34 @@ func (o *GlobalOptions) SetPass(passwd string) error {
|
|||||||
log.Errorf("Failed to set password in keyring: %s", err)
|
log.Errorf("Failed to set password in keyring: %s", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
} else if o.PasswordSource.Value == "gopass" {
|
||||||
|
if o.PasswordDirectory.Value != "" {
|
||||||
|
orig := os.Getenv("PASSWORD_STORE_DIR")
|
||||||
|
os.Setenv("PASSWORD_STORE_DIR", o.PasswordDirectory.Value)
|
||||||
|
defer os.Setenv("PASSWORD_STORE_DIR", orig)
|
||||||
|
}
|
||||||
|
if bin, err := exec.LookPath("gopass"); err == nil {
|
||||||
|
log.Debugf("using %s", bin)
|
||||||
|
passName := o.keyName()
|
||||||
|
if passwd != "" {
|
||||||
|
in := bytes.NewBufferString(fmt.Sprintf("%s\n", passwd))
|
||||||
|
out := bytes.NewBufferString("")
|
||||||
|
cmd := exec.Command(bin, "insert", "--force", passName)
|
||||||
|
cmd.Stdin = in
|
||||||
|
cmd.Stdout = out
|
||||||
|
cmd.Stderr = out
|
||||||
|
if err := cmd.Run(); err != nil {
|
||||||
|
return fmt.Errorf("Failed to insert password: %s", out.String())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// clear the `pass` entry on empty password
|
||||||
|
if err := exec.Command(bin, "rm", "--force", passName).Run(); err != nil {
|
||||||
|
return fmt.Errorf("Failed to clear password for %s", passName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return fmt.Errorf("Gopass binary not found!")
|
||||||
|
}
|
||||||
} else if o.PasswordSource.Value == "pass" {
|
} else if o.PasswordSource.Value == "pass" {
|
||||||
if o.PasswordDirectory.Value != "" {
|
if o.PasswordDirectory.Value != "" {
|
||||||
orig := os.Getenv("PASSWORD_STORE_DIR")
|
orig := os.Getenv("PASSWORD_STORE_DIR")
|
||||||
@@ -134,6 +192,8 @@ func (o *GlobalOptions) SetPass(passwd string) error {
|
|||||||
return fmt.Errorf("Failed to clear password for %s", passName)
|
return fmt.Errorf("Failed to clear password for %s", passName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
return fmt.Errorf("Pass binary not found!")
|
||||||
}
|
}
|
||||||
} else if o.PasswordSource.Value != "" {
|
} else if o.PasswordSource.Value != "" {
|
||||||
return fmt.Errorf("Unknown password-source: %s", o.PasswordSource)
|
return fmt.Errorf("Unknown password-source: %s", o.PasswordSource)
|
||||||
|
|||||||
Reference in New Issue
Block a user