90 lines
1.7 KiB
Go
90 lines
1.7 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/storage"
|
|
"github.com/k4lipso/pentapass/rpc"
|
|
"github.com/k4lipso/pentapass/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
|
|
|
|
key, err := age.LoadOrGenerateKeys(*dbPath + "/age.key")
|
|
|
|
if err != nil {
|
|
Logger.Panic(err)
|
|
}
|
|
|
|
Logger.Debugf("AgeKey: %s\n", key.String())
|
|
Logger.Debugf("AgePublicKey: %s\n", key.Recipient().String())
|
|
|
|
h, dht, err := storage.SetupLibp2pHost(ctx, *dbPath)
|
|
|
|
Logger.Debug(h.ID().String())
|
|
|
|
if err != nil {
|
|
Logger.Panic(err)
|
|
}
|
|
|
|
ps, err := pubsub.NewGossipSub(ctx, h)
|
|
if err != nil {
|
|
Logger.Panic(err)
|
|
}
|
|
|
|
go storage.DiscoverPeers(ctx, h, dht)
|
|
|
|
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,
|
|
}
|
|
|
|
Cfg, err := storageHandler.NewConfig(*dbPath + "/config.json")
|
|
|
|
if err != nil {
|
|
Logger.Fatal(err)
|
|
}
|
|
|
|
storageHandler.Config = Cfg
|
|
storageHandler.ConfigPath = *dbPath + "/config.json"
|
|
storageHandler.InitNamespaces()
|
|
|
|
for _, val := range storageHandler.Namespaces {
|
|
defer val.Close()
|
|
}
|
|
|
|
rpc.StorageHandler = &storageHandler
|
|
rpc.Serve(*dbPath)
|
|
}
|