mirror of
https://github.com/FiloSottile/age.git
synced 2026-01-03 10:55:14 +00:00
cmd/age: add -i and -o flags
This commit is contained in:
@@ -23,25 +23,51 @@ func main() {
|
|||||||
|
|
||||||
generateFlag := flag.Bool("generate", false, "generate a new age key pair")
|
generateFlag := flag.Bool("generate", false, "generate a new age key pair")
|
||||||
decryptFlag := flag.Bool("d", false, "decrypt the input")
|
decryptFlag := flag.Bool("d", false, "decrypt the input")
|
||||||
|
outFlag := flag.String("o", "", "output to `FILE` (default stdout)")
|
||||||
|
inFlag := flag.String("i", "", "read from `FILE` (default stdin)")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case *generateFlag:
|
case *generateFlag:
|
||||||
if *decryptFlag {
|
if *decryptFlag || *inFlag != "" {
|
||||||
log.Fatalf("Invalid flag combination")
|
log.Fatalf("Invalid flag combination")
|
||||||
}
|
}
|
||||||
generate()
|
|
||||||
case *decryptFlag:
|
case *decryptFlag:
|
||||||
if *generateFlag {
|
if *generateFlag {
|
||||||
log.Fatalf("Invalid flag combination")
|
log.Fatalf("Invalid flag combination")
|
||||||
}
|
}
|
||||||
decrypt()
|
default: // encrypt
|
||||||
|
}
|
||||||
|
|
||||||
|
in, out := os.Stdin, os.Stdout
|
||||||
|
if name := *inFlag; name != "" {
|
||||||
|
f, err := os.Open(name)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to open input file %q: %v", name, err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
in = f
|
||||||
|
}
|
||||||
|
if name := *outFlag; name != "" {
|
||||||
|
f, err := os.OpenFile(name, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0666)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to open output file %q: %v", name, err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
out = f
|
||||||
|
}
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case *generateFlag:
|
||||||
|
generate(out)
|
||||||
|
case *decryptFlag:
|
||||||
|
decrypt(in, out)
|
||||||
default:
|
default:
|
||||||
encrypt()
|
encrypt(in, out)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func generate() {
|
func generate(out io.Writer) {
|
||||||
if len(flag.Args()) != 0 {
|
if len(flag.Args()) != 0 {
|
||||||
log.Fatalf("-generate takes no arguments")
|
log.Fatalf("-generate takes no arguments")
|
||||||
}
|
}
|
||||||
@@ -51,12 +77,12 @@ func generate() {
|
|||||||
log.Fatalf("Internal error: %v", err)
|
log.Fatalf("Internal error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("# created: %s\n", time.Now().Format(time.RFC3339))
|
fmt.Fprintf(out, "# created: %s\n", time.Now().Format(time.RFC3339))
|
||||||
fmt.Printf("# %s\n", k.Recipient())
|
fmt.Fprintf(out, "# %s\n", k.Recipient())
|
||||||
fmt.Printf("%s\n", k)
|
fmt.Fprintf(out, "%s\n", k)
|
||||||
}
|
}
|
||||||
|
|
||||||
func encrypt() {
|
func encrypt(in io.Reader, out io.Writer) {
|
||||||
var recipients []age.Recipient
|
var recipients []age.Recipient
|
||||||
for _, arg := range flag.Args() {
|
for _, arg := range flag.Args() {
|
||||||
r, err := parseRecipient(arg)
|
r, err := parseRecipient(arg)
|
||||||
@@ -69,11 +95,11 @@ func encrypt() {
|
|||||||
log.Fatalf("Missing recipients!")
|
log.Fatalf("Missing recipients!")
|
||||||
}
|
}
|
||||||
|
|
||||||
w, err := age.Encrypt(os.Stdout, recipients...)
|
w, err := age.Encrypt(out, recipients...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error initializing encryption: %v", err)
|
log.Fatalf("Error initializing encryption: %v", err)
|
||||||
}
|
}
|
||||||
if _, err := io.Copy(w, os.Stdin); err != nil {
|
if _, err := io.Copy(w, in); err != nil {
|
||||||
log.Fatalf("Error encrypting the input: %v", err)
|
log.Fatalf("Error encrypting the input: %v", err)
|
||||||
}
|
}
|
||||||
if err := w.Close(); err != nil {
|
if err := w.Close(); err != nil {
|
||||||
@@ -81,7 +107,7 @@ func encrypt() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func decrypt() {
|
func decrypt(in io.Reader, out io.Writer) {
|
||||||
var identities []age.Identity
|
var identities []age.Identity
|
||||||
// TODO: use the default location if no arguments are provided.
|
// TODO: use the default location if no arguments are provided.
|
||||||
for _, name := range flag.Args() {
|
for _, name := range flag.Args() {
|
||||||
@@ -102,11 +128,11 @@ func decrypt() {
|
|||||||
identities = append(identities, ids...)
|
identities = append(identities, ids...)
|
||||||
}
|
}
|
||||||
|
|
||||||
r, err := age.Decrypt(os.Stdin, identities...)
|
r, err := age.Decrypt(in, identities...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error initializing decryption: %v", err)
|
log.Fatalf("Error initializing decryption: %v", err)
|
||||||
}
|
}
|
||||||
if _, err := io.Copy(os.Stdout, r); err != nil {
|
if _, err := io.Copy(out, r); err != nil {
|
||||||
log.Fatalf("Error decrypting the input: %v", err)
|
log.Fatalf("Error decrypting the input: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -178,7 +178,6 @@ func (w *Writer) Write(p []byte) (n int, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w *Writer) Close() error {
|
func (w *Writer) Close() error {
|
||||||
// TODO: close w.dst if it can be interface upgraded to io.Closer.
|
|
||||||
if w.err != nil {
|
if w.err != nil {
|
||||||
return w.err
|
return w.err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user