annotate cmd/sievemgr/main.go @ 19:854167f55839

Fix SRV record lookup Do not use a configuration file default value for port in order to detect when it is not set by the user so that SRV record lookup is triggered. Depend on version 0.8.1 of go.guido-berhoerster.org/managesieve which contains an additional necessary fix.
author Guido Berhoerster <guido+sievemgr@berhoerster.name>
date Wed, 03 Feb 2021 13:34:44 +0100
parents 44c07eb8ef08
children fc5e6970a0d5
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
10
44c07eb8ef08 Add man subcommand to display the user manual
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 8
diff changeset
22 //go:generate go run gendocstr.go . code.guido-berhoerster.org/go/sievemgr docText docstr.go
44c07eb8ef08 Add man subcommand to display the user manual
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 8
diff changeset
23
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
24 package main
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
25
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
26 import (
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
27 "errors"
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
28 "flag"
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
29 "fmt"
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
30 "os"
5
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
31
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
32 "go.guido-berhoerster.org/sievemgr/cmd/sievemgr/internal/config"
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
33 )
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
34
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
35 const (
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
36 exitSuccess = iota
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
37 exitFailure
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
38 exitUsage
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
39 )
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
40
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
41 type usageError string
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
42
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
43 func (e usageError) Error() string {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
44 return string(e)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
45 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
46
5
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
47 // command-line flags
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
48 var (
5
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
49 confFilename string
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
50 acctName string
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
51 )
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
52
5
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
53 var conf config.Configuration
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
54
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
55 func init() {
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
56 var err error
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
57 confFilename, err = config.DefaultFilename()
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
58 if err != nil {
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
59 fmt.Fprintln(flag.CommandLine.Output(), err)
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
60 os.Exit(exitFailure)
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
61 }
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
62 }
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
63
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
64 var cmds = []*command{
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
65 cmdList,
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
66 cmdPut,
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
67 cmdGet,
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
68 cmdActivate,
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
69 cmdDeactivate,
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
70 cmdDelete,
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
71 cmdInfo,
4
f925f15d8ce5 Add check subcommand for checking the script validity
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 1
diff changeset
72 cmdCheck,
6
2130614cd64a Add checkspace subcommand for querying the server for sufficient space
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 5
diff changeset
73 cmdCheckSpace,
7
3abc8be485c0 Add rename subcommand for renaming scripts on the server
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 6
diff changeset
74 cmdRename,
8
8caacf702c0d Add edit subcommand for interactive editing of a script
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 7
diff changeset
75 cmdEdit,
10
44c07eb8ef08 Add man subcommand to display the user manual
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 8
diff changeset
76 cmdMan,
0
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
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
79 func usage() {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
80 fmt.Fprintf(flag.CommandLine.Output(),
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
81 "usage:\n %s [options] [subcommand [options] [arguments]]\n",
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
82 flag.CommandLine.Name())
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
83 fmt.Fprintln(flag.CommandLine.Output(), "subcommands:")
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
84 for _, cmd := range cmds {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
85 fmt.Fprintf(flag.CommandLine.Output(), " %s\n", cmd.Name())
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
86 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
87 fmt.Fprintln(flag.CommandLine.Output(), "global options:")
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
88 flag.PrintDefaults()
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
89 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
90
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
91 func main() {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
92 flag.Usage = usage
5
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
93 flag.StringVar(&confFilename, "f", confFilename,
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
94 "Set the name of the configuration file")
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
95 flag.Parse()
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
96 if flag.NArg() == 0 {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
97 fmt.Fprintln(flag.CommandLine.Output(), "missing subcommand")
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
98 usage()
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
99 os.Exit(exitUsage)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
100 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
101
5
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
102 if err := config.ParseFile(confFilename, &conf); err != nil {
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
103 fmt.Fprintln(flag.CommandLine.Output(), err)
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
104 os.Exit(exitFailure)
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
105 }
4dff4c3f0fbb Introduce configuration file where account information is specified
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents: 4
diff changeset
106
0
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
107 name := flag.Arg(0)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
108 var cmd *command
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
109 for _, c := range cmds {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
110 if c.Name() == name {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
111 cmd = c
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
112 break
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
113 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
114 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
115 if cmd == nil {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
116 fmt.Fprintf(flag.CommandLine.Output(),
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
117 "unknown subcommand %q\n", name)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
118 usage()
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
119 os.Exit(exitUsage)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
120 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
121
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
122 cmd.Flag.Init(cmd.Name(), flag.ExitOnError)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
123 cmd.Flag.Usage = cmd.Usage
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
124 args := flag.Args()
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
125 if err := cmd.Flag.Parse(args[1:]); err != nil {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
126 fmt.Fprintln(flag.CommandLine.Output(), err)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
127 os.Exit(exitFailure)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
128 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
129
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
130 if err := cmd.Run(cmd, cmd.Flag.Args()); err != nil {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
131 fmt.Fprintln(flag.CommandLine.Output(), err)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
132
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
133 var uerr usageError
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
134 if errors.As(err, &uerr) {
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
135 cmd.Usage()
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
136 os.Exit(exitUsage)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
137 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
138
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
139 os.Exit(exitFailure)
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
140 }
b00673734e58 Initial revision
Guido Berhoerster <guido+sievemgr@berhoerster.name>
parents:
diff changeset
141 }