-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathinstall.go
183 lines (145 loc) Β· 6.33 KB
/
install.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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
package cmd
import (
"github.com/nodetec/rwz/pkg/manager"
"github.com/nodetec/rwz/pkg/network"
"github.com/nodetec/rwz/pkg/relays/khatru29"
"github.com/nodetec/rwz/pkg/relays/khatru_pyramid"
"github.com/nodetec/rwz/pkg/relays/strfry"
"github.com/nodetec/rwz/pkg/relays/strfry29"
"github.com/nodetec/rwz/pkg/relays/wot_relay"
"github.com/nodetec/rwz/pkg/ui"
"github.com/pterm/pterm"
"github.com/spf13/cobra"
)
var installCmd = &cobra.Command{
Use: "install",
Short: "Install and configure your Nostr relay",
Long: `Install and configure your Nostr relay, including package installation, firewall setup, Nginx configuration, SSL/TLS certificates, and starting the relay service.`,
Run: func(cmd *cobra.Command, args []string) {
ui.Greet()
relayDomain, _ := pterm.DefaultInteractiveTextInput.Show("Relay domain name")
pterm.Println()
// Supported relay options
options := []string{khatru_pyramid.RelayName, strfry.RelayName, khatru29.RelayName, strfry29.RelayName, wot_relay.RelayName}
// Use PTerm's interactive select feature to present the options to the user and capture their selection
// The Show() method displays the options and waits for the user's input
selectedRelayOption, _ := pterm.DefaultInteractiveSelect.WithOptions(options).Show()
// Display the selected option to the user with a green color for emphasis
pterm.Info.Printfln("Selected option: %s", pterm.Green(selectedRelayOption))
var privKey string
var pubKey string
if selectedRelayOption == khatru_pyramid.RelayName || selectedRelayOption == wot_relay.RelayName {
pterm.Println()
pubKey, _ = pterm.DefaultInteractiveTextInput.Show("Public key (hex not npub)")
} else if selectedRelayOption == khatru29.RelayName || selectedRelayOption == strfry29.RelayName {
pterm.Println()
privKeyInput := pterm.DefaultInteractiveTextInput.WithMask("*")
privKey, _ = privKeyInput.Show("Private key (hex not nsec)")
}
var relayContact string
if selectedRelayOption == khatru_pyramid.RelayName || selectedRelayOption == khatru29.RelayName {
pterm.Println()
pterm.Println(pterm.Yellow("Leave email empty if you don't want to provide relay contact information."))
pterm.Println()
relayContact, _ = pterm.DefaultInteractiveTextInput.Show("Email address")
} else if selectedRelayOption == wot_relay.RelayName {
pterm.Println()
pterm.Println(pterm.Yellow("If you leave the relay contact information empty, then the relay's public key will be used."))
pterm.Println()
relayContact, _ = pterm.DefaultInteractiveTextInput.Show("Email address/Public key (hex not npub)")
}
pterm.Println()
pterm.Println(pterm.Yellow("If you make a mistake, you can always re-run this installer."))
pterm.Println()
// Step 1: Install necessary packages using APT
manager.AptInstallPackages()
// Step 2: Configure the firewall
network.ConfigureFirewall()
if selectedRelayOption == khatru_pyramid.RelayName {
// Step 3: Configure Nginx for HTTP
khatru_pyramid.ConfigureNginxHttp(relayDomain)
// Step 4: Get SSL/TLS certificates
httpsEnabled := network.GetCertificates(relayDomain)
if httpsEnabled {
// Step 5: Configure Nginx for HTTPS
khatru_pyramid.ConfigureNginxHttps(relayDomain)
}
// Step 6: Download and install the relay binary
khatru_pyramid.InstallRelayBinary()
// Step 7: Set up the relay service
khatru_pyramid.SetupRelayService(relayDomain, pubKey, relayContact)
// Step 8: Show success messages
khatru_pyramid.SuccessMessages(relayDomain, httpsEnabled)
} else if selectedRelayOption == strfry.RelayName {
// Step 3: Configure Nginx for HTTP
strfry.ConfigureNginxHttp(relayDomain)
// Step 4: Get SSL/TLS certificates
httpsEnabled := network.GetCertificates(relayDomain)
if httpsEnabled {
// Step 5: Configure Nginx for HTTPS
strfry.ConfigureNginxHttps(relayDomain)
}
// Step 6: Download and install the relay binary
strfry.InstallRelayBinary()
// Step 7: Set up the relay service
strfry.SetupRelayService(relayDomain)
// Step 8: Show success messages
strfry.SuccessMessages(relayDomain, httpsEnabled)
} else if selectedRelayOption == khatru29.RelayName {
// Step 3: Configure Nginx for HTTP
khatru29.ConfigureNginxHttp(relayDomain)
// Step 4: Get SSL/TLS certificates
httpsEnabled := network.GetCertificates(relayDomain)
if httpsEnabled {
// Step 5: Configure Nginx for HTTPS
khatru29.ConfigureNginxHttps(relayDomain)
}
// Step 6: Download and install the relay binary
khatru29.InstallRelayBinary()
// Step 7: Set up the relay service
khatru29.SetupRelayService(relayDomain, privKey, relayContact)
// Step 8: Show success messages
khatru29.SuccessMessages(relayDomain, httpsEnabled)
} else if selectedRelayOption == strfry29.RelayName {
// Step 3: Configure Nginx for HTTP
strfry29.ConfigureNginxHttp(relayDomain)
// Step 4: Get SSL/TLS certificates
httpsEnabled := network.GetCertificates(relayDomain)
if httpsEnabled {
// Step 5: Configure Nginx for HTTPS
strfry29.ConfigureNginxHttps(relayDomain)
}
// Step 6: Download and install the relay binary
strfry29.InstallRelayBinary()
// Step 7: Set up the relay service
strfry29.SetupRelayService(relayDomain, privKey)
// Step 8: Show success messages
strfry29.SuccessMessages(relayDomain, httpsEnabled)
} else if selectedRelayOption == wot_relay.RelayName {
// Step 3: Configure Nginx for HTTP
wot_relay.ConfigureNginxHttp(relayDomain)
// Step 4: Get SSL/TLS certificates
httpsEnabled := network.GetCertificates(relayDomain)
if httpsEnabled {
// Step 5: Configure Nginx for HTTPS
wot_relay.ConfigureNginxHttps(relayDomain)
}
// Step 6: Download and install the relay binary
wot_relay.InstallRelayBinary()
// Step 7: Set up the relay service
wot_relay.SetupRelayService(relayDomain, pubKey, relayContact, httpsEnabled)
// Step 8: Show success messages
wot_relay.SuccessMessages(relayDomain, httpsEnabled)
}
pterm.Println()
pterm.Println(pterm.Cyan("Join the NODE-TEC Discord to get support:"))
pterm.Println(pterm.Magenta("https://discord.gg/J9gRK5pbWb"))
pterm.Println()
pterm.Println(pterm.Cyan("We plan to use relay groups for support in the future..."))
pterm.Println()
pterm.Println(pterm.Magenta("You can re-run this installer with `rwz install`."))
},
}
func init() {
rootCmd.AddCommand(installCmd)
}