forked from LN-Zap/lndconnect
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlndconnect.go
90 lines (80 loc) · 2.13 KB
/
lndconnect.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
package main
import (
"log"
"net"
"os"
"os/signal"
"syscall"
"github.com/lightningnetwork/lnd/tor"
)
func main() {
loadedConfig, err := loadConfig()
if err != nil {
log.Fatal(err)
}
// If createonion option is selected, tor is active and v3 onion services have been
// specified, make a tor controller and pass it into the REST controller server
var torController *tor.Controller
if loadedConfig.LndConnect.CreateOnion && loadedConfig.Tor.Active && loadedConfig.Tor.V3 {
var targetIPAddress string
if net.ParseIP(loadedConfig.Tor.TargetIPAddress) == nil {
addrs, err := loadedConfig.net.LookupHost(loadedConfig.Tor.TargetIPAddress)
if err != nil {
log.Fatalln(err)
}
targetIPAddress = addrs[0]
log.Printf(
"`tor.targetipaddress` doesn't define an IP address, hostname %s was resolved to %s",
loadedConfig.Tor.TargetIPAddress,
targetIPAddress,
)
} else {
targetIPAddress = loadedConfig.Tor.TargetIPAddress
}
torController = tor.NewController(
loadedConfig.Tor.Control,
targetIPAddress,
loadedConfig.Tor.Password,
)
// Start the tor controller before giving it to any other
// subsystems.
if err := torController.Start(); err != nil {
log.Fatalf("error starting tor controller: %v", err)
}
defer func() {
if err := torController.Stop(); err != nil {
log.Printf("error stopping tor controller: %v", err)
}
}()
if err := createNewHiddenService(loadedConfig, torController); err != nil {
log.Fatal(err)
}
}
// Generate URI
uri, err := getURI(loadedConfig)
if err != nil {
log.Fatal(err)
}
// Print URI or QR Code to selected output
if loadedConfig.LndConnect.URL {
log.Println(uri)
} else {
err = getQR(uri, loadedConfig.LndConnect.Image)
if err != nil {
log.Println(err)
}
}
if torController != nil {
cancelChan := make(chan os.Signal, 1)
done := make(chan bool, 1)
// catch SIGINT, SIGQUIT or SIGETRM
signal.Notify(cancelChan, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM)
go func() {
sig := <-cancelChan
log.Printf("Caught %v signal", sig)
done <- true
}()
<-done
log.Println("lndconnect is shutting down now...")
}
}