annotate cmd/sievemgr/info.go @ 5:4dff4c3f0fbb

Introduce configuration file where account information is specified Introduce a configuration file where account information must be specified instead of passing it with each invocation on the command line. Each account has a name by which it can be selected and one may be specified as the default account. This is intended to improve usability for productive usage. Enforce strict permissions since passwords may be specified for non-interactive usage. Remove command-line flags for passing account information.
author Guido Berhoerster <guido+sievemgr@berhoerster.name>
date Tue, 03 Nov 2020 23:44:45 +0100
parents 6db34a5344b8
children d14d93d011d7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
0cd5a454dfb4 Add README file
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 0
diff changeset
1 // Copyright (C) 2020 Guido Berhoerster <guido+sievemgr@berhoerster.name>
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
2 //
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
3 // Permission is hereby granted, free of charge, to any person obtaining
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
4 // a copy of this software and associated documentation files (the
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
5 // "Software"), to deal in the Software without restriction, including
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
6 // without limitation the rights to use, copy, modify, merge, publish,
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
7 // distribute, sublicense, and/or sell copies of the Software, and to
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
8 // permit persons to whom the Software is furnished to do so, subject to
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
9 // the following conditions:
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
10 //
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
11 // The above copyright notice and this permission notice shall be included
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
12 // in all copies or substantial portions of the Software.
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
13 //
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
15 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
16 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
17 // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
18 // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
19 // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
20 // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
21
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
22 package main
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
23
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
24 import (
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
25 "fmt"
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
26 "net"
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
27 )
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
28
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
29 func init() {
5
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 2
diff changeset
30 cmdInfo.Flag.StringVar(&acctName, "a", "", "Select the account")
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
31 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
32
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
33 var cmdInfo = &command{
5
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 2
diff changeset
34 UsageLine: "info [options]",
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
35 Run: runInfo,
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
36 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
37
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
38 func runInfo(cmd *command, args []string) error {
5
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 2
diff changeset
39 if len(args) != 0 {
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
40 return usageError("invalid number of arguments")
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
41 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
42
5
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 2
diff changeset
43 acct, err := getAccount(&conf, acctName)
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
44 if err != nil {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
45 return err
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
46 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
47
5
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 2
diff changeset
48 if err := lookupHostPort(acct); err != nil {
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
49 return err
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
50 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
51
5
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 2
diff changeset
52 if err := readPassword(acct); err != nil {
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 2
diff changeset
53 return err
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 2
diff changeset
54 }
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 2
diff changeset
55
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 2
diff changeset
56 c, err := dialPlainAuth(acct)
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
57 if err != nil {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
58 return err
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
59 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
60 defer c.Logout()
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
61
5
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 2
diff changeset
62 fmt.Printf("%s (%s)\n", net.JoinHostPort(acct.Host, acct.Port),
2
6db34a5344b8 Show server implementation in info output
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 1
diff changeset
63 c.Implementation())
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
64 if c.SupportsRFC5804() {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
65 fmt.Println("RFC5804 supported")
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
66 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
67 if c.SupportsTLS() {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
68 fmt.Println("STARTTLS supported")
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
69 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
70 fmt.Printf("SASL mechanisms:\n")
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
71 for _, m := range c.SASLMechanisms() {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
72 fmt.Printf(" %s\n", m)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
73 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
74 fmt.Printf("Extensions:\n")
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
75 for _, e := range c.Extensions() {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
76 fmt.Printf(" %s\n", e)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
77 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
78 fmt.Printf("Notification methods:\n")
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
79 for _, m := range c.NotifyMethods() {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
80 fmt.Printf(" %s\n", m)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
81 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
82
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
83 return nil
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
84 }