khatru-pyramid/main.go

97 lines
2.0 KiB
Go
Raw Normal View History

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
)
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-09-23 19:03:13 +00:00
// add information here!
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
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() {
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
}