2023-09-06 20:49:18 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"net/http"
|
|
|
|
"os"
|
|
|
|
"os/signal"
|
|
|
|
"sync"
|
|
|
|
"syscall"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/fiatjaf/khatru"
|
|
|
|
"github.com/fiatjaf/khatru/plugins/storage/badgern"
|
2023-09-13 19:48:24 +02:00
|
|
|
"github.com/joho/godotenv"
|
2023-09-06 20:49:18 +02:00
|
|
|
)
|
|
|
|
|
2023-10-11 00:19:33 +02:00
|
|
|
var (
|
|
|
|
relayMaster string
|
|
|
|
db badgern.BadgerBackend
|
|
|
|
relayName string = ""
|
|
|
|
relayPubkey string = ""
|
|
|
|
relayDescription string = "none"
|
|
|
|
relayContact string = "none"
|
|
|
|
)
|
2023-09-13 19:48:24 +02:00
|
|
|
|
2023-09-06 20:49:18 +02:00
|
|
|
func main() {
|
|
|
|
// save whitelist on shutdown
|
|
|
|
var wg sync.WaitGroup
|
|
|
|
wg.Add(1)
|
|
|
|
go func() {
|
|
|
|
defer wg.Done()
|
|
|
|
handleSignals()
|
|
|
|
}()
|
|
|
|
|
|
|
|
// backup whitelist every hour
|
|
|
|
go func() {
|
|
|
|
for {
|
|
|
|
time.Sleep(time.Hour)
|
|
|
|
saveWhitelist()
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
2023-09-13 19:48:24 +02:00
|
|
|
// init env config
|
|
|
|
godotenv.Load(".env")
|
|
|
|
|
2023-09-06 20:49:18 +02:00
|
|
|
// init relay
|
|
|
|
relay := khatru.NewRelay()
|
|
|
|
|
2023-09-18 19:18:24 +00:00
|
|
|
relayMaster = os.Getenv("INVITE_RELAY_MASTER")
|
2023-10-11 00:19:33 +02:00
|
|
|
|
2023-09-23 19:03:13 +00:00
|
|
|
// add information here!
|
2023-10-11 00:19:33 +02:00
|
|
|
relayName = os.Getenv("RELAY_NAME")
|
|
|
|
relayPubkey = os.Getenv("RELAY_PUBKEY")
|
|
|
|
relayDescription = os.Getenv("RELAY_DESCRIPTION")
|
|
|
|
relayContact = os.Getenv("RELAY_CONTACT")
|
|
|
|
|
|
|
|
relay.Name = relayName
|
|
|
|
relay.PubKey = relayPubkey
|
|
|
|
relay.Description = relayDescription
|
|
|
|
relay.Contact = relayContact
|
2023-09-13 19:48:24 +02:00
|
|
|
|
2023-09-06 20:49:18 +02:00
|
|
|
// load whitelist storage
|
|
|
|
if err := loadWhitelist(); err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// load db
|
2023-09-18 19:18:24 +00:00
|
|
|
db = badgern.BadgerBackend{Path: "./khatru-badgern-db"}
|
2023-09-06 20:49:18 +02:00
|
|
|
if err := db.Init(); err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
relay.StoreEvent = append(relay.StoreEvent, db.SaveEvent)
|
|
|
|
relay.QueryEvents = append(relay.QueryEvents, db.QueryEvents)
|
|
|
|
relay.CountEvents = append(relay.CountEvents, db.CountEvents)
|
|
|
|
relay.DeleteEvent = append(relay.DeleteEvent, db.DeleteEvent)
|
|
|
|
|
|
|
|
relay.RejectEvent = append(relay.RejectEvent, whitelistRejecter)
|
|
|
|
|
|
|
|
// ui
|
2023-10-11 00:19:33 +02:00
|
|
|
relay.Router().HandleFunc("/reports", reportsViewerHandler)
|
|
|
|
relay.Router().HandleFunc("/users", inviteTreeHandler)
|
|
|
|
relay.Router().HandleFunc("/", redirectHandler)
|
2023-09-06 20:49:18 +02:00
|
|
|
|
|
|
|
fmt.Println("running on :3334")
|
|
|
|
http.ListenAndServe(":3334", relay)
|
|
|
|
}
|
|
|
|
|
|
|
|
// save whitelist on shutdown
|
|
|
|
func handleSignals() {
|
2023-10-11 00:19:33 +02:00
|
|
|
sigCh := make(chan os.Signal, 1)
|
|
|
|
signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM)
|
|
|
|
<-sigCh
|
|
|
|
saveWhitelist()
|
|
|
|
os.Exit(0)
|
2023-09-06 20:49:18 +02:00
|
|
|
}
|