/
gopoststuff.go
113 lines (95 loc) · 2.4 KB
/
gopoststuff.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package main
import (
"flag"
"os"
"os/user"
"path/filepath"
//"fmt"
"code.google.com/p/gcfg"
"github.com/op/go-logging"
)
const (
GPS_VERSION = "0.2.0-release"
)
// Command ling flags
var verboseFlag = flag.Bool("v", false, "Show verbose debug information")
var configFlag = flag.String("c", "", "Use alternative config file")
var groupFlag = flag.String("g", "", "Newsgroup(s) to post to - separate multiple with a comma \",\"")
var subjectFlag = flag.String("s", "", "Subject to use")
var dirSubjectFlag = flag.Bool("d", false, "Use directory names as subjects")
// Logger
var log = logging.MustGetLogger("gopoststuff")
// Config
var Config struct {
Global struct {
From string
DefaultGroup string
SubjectPrefix string
ArticleSize int64
ChunkSize int64
}
Server map[string]*struct {
Address string
Port int
Username string
Password string
Connections int
TLS bool
InsecureSSL bool
}
}
func main() {
// Parse command line flags
flag.Parse()
// Set up logging
var format = logging.MustStringFormatter(" %{level: -8s} %{message}")
logging.SetFormatter(format)
if *verboseFlag {
logging.SetLevel(logging.DEBUG, "gopoststuff")
} else {
logging.SetLevel(logging.INFO, "gopoststuff")
}
log.Info("gopoststuff starting...")
// Make sure -d or -s was specified
if len(*subjectFlag) == 0 && !*dirSubjectFlag {
log.Fatal("Need to specify -d or -s option, try gopoststuff --help")
}
// Check arguments
if len(flag.Args()) == 0 {
log.Fatal("No filenames provided")
}
// Check that all supplied arguments exist
for _, arg := range flag.Args() {
st, err := os.Stat(arg)
if err != nil {
log.Fatalf("stat %s: %s", arg, err)
}
// If -d was specified, make sure that it's a directory
if *dirSubjectFlag && !st.IsDir() {
log.Fatalf("-d option used but not a directory: %s", arg)
}
}
// Load config file
var cfgFile string
if len(*configFlag) > 0 {
cfgFile = *configFlag
} else {
// Default to user homedir for config file
u, err := user.Current()
if err != nil {
log.Fatal(err)
}
cfgFile = filepath.Join(u.HomeDir, ".gopoststuff.conf")
}
log.Debug("Reading config from %s", cfgFile)
err := gcfg.ReadFileInto(&Config, cfgFile)
if err != nil {
log.Fatal(err)
}
// Fix default values
if Config.Global.ChunkSize == 0 {
Config.Global.ChunkSize = 10240
}
// Start the magical spawner
Spawner(flag.Args())
}