mirror of
https://github.com/neilalexander/yggmail.git
synced 2026-05-22 19:16:29 +03:00
Add support for more than one -peer (fixes #4)
This commit is contained in:
@@ -24,20 +24,32 @@ import (
|
|||||||
"github.com/neilalexander/yggmail/internal/utils"
|
"github.com/neilalexander/yggmail/internal/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
var database = flag.String("database", "yggmail.db", "SQLite database file")
|
type peerAddrList []string
|
||||||
var smtpaddr = flag.String("smtp", "localhost:1025", "SMTP listen address")
|
|
||||||
var imapaddr = flag.String("imap", "localhost:1143", "IMAP listen address")
|
func (i *peerAddrList) String() string {
|
||||||
var peeraddr = flag.String("peer", "", "Connect to a specific Yggdrasil static peer")
|
return strings.Join(*i, ", ")
|
||||||
var multicast = flag.Bool("multicast", false, "Connect to Yggdrasil peers on your LAN")
|
}
|
||||||
var password = flag.Bool("password", false, "Set a new IMAP/SMTP password")
|
|
||||||
|
func (i *peerAddrList) Set(value string) error {
|
||||||
|
*i = append(*i, value)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
rawlog := log.New(os.Stdout, "", 0)
|
rawlog := log.New(os.Stdout, "", 0)
|
||||||
log := log.New(rawlog.Writer(), "[ \033[32mYggmail\033[0m ] ", 0)
|
log := log.New(rawlog.Writer(), "[ \033[32mYggmail\033[0m ] ", 0)
|
||||||
|
|
||||||
|
var peerAddrs peerAddrList
|
||||||
|
database := flag.String("database", "yggmail.db", "SQLite database file")
|
||||||
|
smtpaddr := flag.String("smtp", "localhost:1025", "SMTP listen address")
|
||||||
|
imapaddr := flag.String("imap", "localhost:1143", "IMAP listen address")
|
||||||
|
multicast := flag.Bool("multicast", false, "Connect to Yggdrasil peers on your LAN")
|
||||||
|
password := flag.Bool("password", false, "Set a new IMAP/SMTP password")
|
||||||
|
flag.Var(&peerAddrs, "peer", "Connect to a specific Yggdrasil static peer (this option can be given more than once)")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
if flag.NFlag() == 0 {
|
if flag.NFlag() == 0 {
|
||||||
fmt.Println("Yggmail must be started with either an Yggdrasil peer")
|
fmt.Println("Yggmail must be started with either one or more Yggdrasil peers")
|
||||||
fmt.Println("specified, multicast enabled, or both.")
|
fmt.Println("specified, multicast enabled, or both.")
|
||||||
fmt.Println()
|
fmt.Println()
|
||||||
fmt.Println("Available options:")
|
fmt.Println("Available options:")
|
||||||
@@ -108,7 +120,7 @@ func main() {
|
|||||||
log.Println("Password for IMAP and SMTP has been updated!")
|
log.Println("Password for IMAP and SMTP has been updated!")
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
|
|
||||||
case (multicast == nil || !*multicast) && (peeraddr == nil || *peeraddr == ""):
|
case (multicast == nil || !*multicast) && len(peerAddrs) == 0:
|
||||||
log.Printf("You must specify either -peer, -multicast or both!")
|
log.Printf("You must specify either -peer, -multicast or both!")
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
@@ -120,7 +132,7 @@ func main() {
|
|||||||
wg := &sync.WaitGroup{}
|
wg := &sync.WaitGroup{}
|
||||||
wg.Add(2)
|
wg.Add(2)
|
||||||
|
|
||||||
transport, err := transport.NewYggdrasilTransport(rawlog, sk, pk, *peeraddr, *multicast)
|
transport, err := transport.NewYggdrasilTransport(rawlog, sk, pk, peerAddrs, *multicast)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,10 +19,11 @@ type YggdrasilTransport struct {
|
|||||||
Sessions *utp.Socket
|
Sessions *utp.Socket
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewYggdrasilTransport(log *log.Logger, sk ed25519.PrivateKey, pk ed25519.PublicKey, peer string, mcast bool) (*YggdrasilTransport, error) {
|
func NewYggdrasilTransport(log *log.Logger, sk ed25519.PrivateKey, pk ed25519.PublicKey, peers []string, mcast bool) (*YggdrasilTransport, error) {
|
||||||
config := &config.NodeConfig{
|
config := &config.NodeConfig{
|
||||||
PublicKey: hex.EncodeToString(pk),
|
PublicKey: hex.EncodeToString(pk),
|
||||||
PrivateKey: hex.EncodeToString(sk),
|
PrivateKey: hex.EncodeToString(sk),
|
||||||
|
Peers: peers,
|
||||||
MulticastInterfaces: []config.MulticastInterfaceConfig{
|
MulticastInterfaces: []config.MulticastInterfaceConfig{
|
||||||
{
|
{
|
||||||
Regex: ".*",
|
Regex: ".*",
|
||||||
@@ -35,9 +36,6 @@ func NewYggdrasilTransport(log *log.Logger, sk ed25519.PrivateKey, pk ed25519.Pu
|
|||||||
},
|
},
|
||||||
NodeInfoPrivacy: true,
|
NodeInfoPrivacy: true,
|
||||||
}
|
}
|
||||||
if peer != "" {
|
|
||||||
config.Peers = append(config.Peers, peer)
|
|
||||||
}
|
|
||||||
glog := gologme.New(log.Writer(), "[ \033[33mYggdrasil\033[0m ] ", 0)
|
glog := gologme.New(log.Writer(), "[ \033[33mYggdrasil\033[0m ] ", 0)
|
||||||
glog.EnableLevel("warn")
|
glog.EnableLevel("warn")
|
||||||
glog.EnableLevel("error")
|
glog.EnableLevel("error")
|
||||||
|
|||||||
Reference in New Issue
Block a user