2024-07-22 21:00:21 +00:00
package main
import (
2024-07-23 19:26:04 +00:00
"fmt"
2024-07-22 21:00:21 +00:00
"github.com/asmogo/nws/config"
"github.com/asmogo/nws/exit"
2024-07-23 19:26:04 +00:00
"github.com/nbd-wtf/go-nostr"
2024-07-23 17:10:02 +00:00
"github.com/spf13/cobra"
"log/slog"
2024-07-22 21:00:21 +00:00
)
2024-07-23 17:10:02 +00:00
var httpsPort int32
var httpTarget string
2024-07-23 19:26:04 +00:00
const (
generateKeyMessage = "Generated new private key. Please update your configuration file with the new key, otherwise your key will be lost, once this application restarts."
startingReverseProxyMessage = "starting exit node with https reverse proxy"
)
2024-07-22 21:00:21 +00:00
func main ( ) {
2024-07-23 17:10:02 +00:00
rootCmd := & cobra . Command { Use : "exit" , Run : startExitNode }
rootCmd . Flags ( ) . Int32VarP ( & httpsPort , "port" , "p" , 0 , "port for the https reverse proxy" )
rootCmd . Flags ( ) . StringVarP ( & httpTarget , "target" , "t" , "" , "target for the https reverse proxy (your local service)" )
err := rootCmd . Execute ( )
if err != nil {
panic ( err )
}
}
func startExitNode ( cmd * cobra . Command , args [ ] string ) {
2024-07-22 21:00:21 +00:00
// load the configuration
// from the environment
cfg , err := config . LoadConfig [ config . ExitConfig ] ( )
if err != nil {
panic ( err )
}
2024-07-23 19:26:04 +00:00
if httpsPort != 0 {
cfg . BackendHost = fmt . Sprintf ( ":%d" , httpsPort )
}
if cfg . NostrPrivateKey == "" {
// generate new private key
cfg . NostrPrivateKey = nostr . GeneratePrivateKey ( )
slog . Warn ( generateKeyMessage , "key" , cfg . NostrPrivateKey )
}
2024-07-22 21:00:21 +00:00
// create a new gw server
// and start it
2024-07-23 17:10:02 +00:00
ctx := cmd . Context ( )
2024-07-22 21:00:21 +00:00
exitNode := exit . NewExit ( ctx , cfg )
2024-07-23 17:10:02 +00:00
if httpsPort != 0 {
2024-07-23 19:26:04 +00:00
slog . Info ( startingReverseProxyMessage , "port" , httpsPort )
2024-07-23 17:10:02 +00:00
go func ( ) {
err = exitNode . StartReverseProxy ( httpTarget , httpsPort )
if err != nil {
panic ( err )
}
} ( )
}
2024-07-22 21:00:21 +00:00
exitNode . ListenAndServe ( ctx )
}