Files
pentapass/cmd/ppassd/ppassd.go
kalipso a3f2a5ee6d Rework discovery
peer discovery happens now based on vault ids not the general token
"pentapass". It also happens periodically instead of just once
2024-10-10 13:12:26 +02:00

100 lines
2.0 KiB
Go

package main
import (
"context"
"flag"
pubsub "github.com/libp2p/go-libp2p-pubsub"
ipfslite "github.com/hsanjuan/ipfs-lite"
badger "github.com/ipfs/go-ds-badger2"
"github.com/k4lipso/pentapass/internal/storage"
"github.com/k4lipso/pentapass/internal/rpc"
"github.com/k4lipso/pentapass/internal/crypto/age"
. "github.com/k4lipso/pentapass/internal/log"
)
var (
dbPath = flag.String("db", "./db", "db file path")
debug = flag.Bool("debug", false, "log debug information")
)
func main() {
flag.Parse()
InitLogger(*debug)
ctx := context.Background()
data := *dbPath
Logger.Info("Initializing passd")
Logger.Info("Looking for Keys...")
key, err := age.LoadOrGenerateKeys(*dbPath + "/age.key")
if err != nil {
Logger.Panic(err)
}
Logger.Infof("Found Key: %s", key.Recipient().String())
Logger.Info("Setting up DHT...")
h, dht, err := storage.SetupLibp2pHost(ctx, *dbPath)
if err != nil {
Logger.Panic(err)
}
Logger.Infof("Own ID: %s", h.ID().String())
ps, err := pubsub.NewGossipSub(ctx, h)
if err != nil {
Logger.Panic(err)
}
Logger.Info("Initializing datastore...")
store, err := badger.NewDatastore(data, &badger.DefaultOptions)
if err != nil {
Logger.Fatal(err)
}
defer store.Close()
ipfs, err := ipfslite.New(ctx, store, nil, h, dht, nil)
if err != nil {
Logger.Fatal(err)
}
storageHandler := storage.StorageHandler{
Ctx: ctx ,
Store: store,
Host: h,
Ipfs: ipfs,
PubSub: ps,
Key: key,
}
Logger.Info("Starting peer discovery...")
go storageHandler.RunBackground(ctx, h, dht)
configPath := *dbPath + "/config.json"
Logger.Infof("Loading config from: %s", configPath)
Cfg, err := storageHandler.NewConfig(configPath)
if err != nil {
Logger.Fatal(err)
}
storageHandler.Config = Cfg
storageHandler.ConfigPath = configPath
Logger.Infof("Setting up Vaults...")
storageHandler.InitVaults()
for _, val := range storageHandler.Vaults {
defer val.Close()
}
Logger.Infof("Initialization complete!")
Logger.Infof("Serving RPC for ppass cli")
rpc.StorageHandler = &storageHandler
rpc.Serve(*dbPath)
}