peer discovery happens now based on vault ids not the general token "pentapass". It also happens periodically instead of just once
100 lines
2.0 KiB
Go
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)
|
|
}
|