Skip to content

Commit

Permalink
Allow reading password from stdin
Browse files Browse the repository at this point in the history
Allow reading password from stdin in `jira login`. This is useful for
combining the jira tool with other command-line utilities.
  • Loading branch information
kojustin committed Jun 5, 2019
1 parent f139076 commit 225e1dc
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 1 deletion.
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ login: person@example.com

You can also override these values on the command line with `jira --user person --login person@example.com`. The `login` value will be used only for authentication purposes, the `user` value will be used when a user name is required for any Jira service API calls.

#### keyring password source
#### `keyring` password source
On OSX and Linux there are a few keyring providers that `go-jira` can use (via this [golang module](https://github.com/tmc/keyring)). To integrate `go-jira` with a supported keyring just add this configuration to `$HOME/.jira.d/config.yml`:
```yaml
password-source: keyring
Expand Down Expand Up @@ -353,3 +353,11 @@ if [ -n "${GPG_AGENT_INFO}" ]; then
fi
export GPG_TTY=$(tty)
```

#### `stdin` password source

When `password-source` is set to `stdin`, the `jira login` command will read from stdin until EOF, and the bytes read will be the used as the password. This is useful if you have some other programmatic method for fetching passwords. For example, if `password-generator` creates a one-time password and prints it to stdout, you could use it like this.

```bash
$ ./password-generator | jira login --endpoint=https://my.jira.endpoint.com --user=USERNAME
```
7 changes: 7 additions & 0 deletions jiracli/password.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package jiracli
import (
"bytes"
"fmt"
"io/ioutil"
"os"
"os/exec"
"strings"
Expand Down Expand Up @@ -57,6 +58,12 @@ func (o *GlobalOptions) GetPass() string {
passwd = strings.TrimSpace(buf.String())
}
}
} else if o.PasswordSource.Value == "stdin" {
allBytes, err := ioutil.ReadAll(os.Stdin)
if err != nil {
panic(fmt.Sprintf("unable to read bytes from stdin: %s", err))
}
passwd = string(allBytes)
} else {
log.Warningf("Unknown password-source: %s", o.PasswordSource)
}
Expand Down

0 comments on commit 225e1dc

Please sign in to comment.