load cfg from file, encrypt for given peers

This commit is contained in:
2024-08-14 10:59:34 +02:00
parent a5dda01654
commit 6502bb1e12
2 changed files with 64 additions and 53 deletions

View File

@@ -47,10 +47,10 @@ func main() {
fmt.Printf("AgeKey: %s\n", key.String())
fmt.Printf("AgePublicKey: %s\n", key.Recipient().String())
cipher, err := age.Encrypt([]byte("Test Message"), []string{key.Recipient().String()})
fmt.Printf("Encrypted: %s\n", cipher)
decrypted, err := age.Decrypt(cipher, key)
fmt.Printf("Decrypted: %s\n", decrypted)
//cipher, err := age.Encrypt([]byte("Test Message"), []string{key.Recipient().String()})
//fmt.Printf("Encrypted: %s\n", cipher)
//decrypted, err := age.Decrypt(cipher, key)
//fmt.Printf("Decrypted: %s\n", decrypted)
h, dht, err := storage.SetupLibp2pHost(ctx, *dbPath)
@@ -84,6 +84,12 @@ func main() {
logger.Fatal(err)
}
Cfg, err := storage.NewConfig(*dbPath + "/config.json")
if err != nil {
logger.Fatal(err)
}
storageHandler := storage.StorageHandler{
Ctx: ctx ,
Store: store,
@@ -91,10 +97,9 @@ func main() {
Ipfs: ipfs,
PubSub: ps,
Key: key,
Config: Cfg,
}
Cfg := storage.NewConfig()
Namespaces := make(map[string]*storage.Namespace)
for _, nsCfg := range Cfg {
ns1, err := storage.CreateNamespace(nsCfg.Id, storageHandler)
@@ -254,7 +259,7 @@ Commands:
continue
}
encryptedPassword, err := age.Encrypt(data, []string{key.Recipient().String()})
encryptedPassword, err := age.Encrypt(data, val.GetRecipients())
if err != nil {
printErr(err)
continue

View File

@@ -4,10 +4,10 @@ import (
"context"
"fmt"
"os"
"encoding/json"
"path/filepath"
"time"
"sync"
"io/ioutil"
"github.com/ipfs/go-datastore/query"
"github.com/libp2p/go-libp2p"
@@ -37,7 +37,7 @@ import (
)
var (
topicNameFlag = "akdjlask-23klaj2idalj2-ajl2kjd3i-2ldakjd2"
topicNameFlag = "afbjlask-23klaj2idalj2-ajl2kjd3i-2ldakjd2"
logger = logging.Logger("globaldb")
Listen = libp2p.ListenAddrStrings("/ip4/0.0.0.0/tcp/0")
)
@@ -56,14 +56,14 @@ func SetupLibp2pHost(ctx context.Context, dbPath string) (host host.Host, dht *d
if err != nil {
logger.Fatal(err)
}
err = ioutil.WriteFile(keyPath, data, 0400)
err = os.WriteFile(keyPath, data, 0400)
if err != nil {
logger.Fatal(err)
}
} else if err != nil {
logger.Fatal(err)
} else {
key, err := ioutil.ReadFile(keyPath)
key, err := os.ReadFile(keyPath)
if err != nil {
logger.Fatal(err)
}
@@ -101,47 +101,35 @@ func SetupLibp2pHost(ctx context.Context, dbPath string) (host host.Host, dht *d
}
type Peer struct {
Id string
Key string
Id string `json:"Id"`
Key string `json:"Key"`
}
type NamespaceConfig struct {
Name string
Id string
Peers []Peer
Name string `json:"Name"`
Id string `json:"Id"`
Peers []Peer `json:"Peers"`
}
type Config []NamespaceConfig
func NewConfig() []NamespaceConfig {
func NewConfig(filename string) ([]NamespaceConfig, error) {
//fmt.Println("NewConfig Path not implemented yet")
return []NamespaceConfig{
{
Name: "root",
Id: "akdjlask-23klaj2idalj2-ajl2kjd3i-2ldakjd2",
Peers: []Peer{
{ Id: "12D3KooWLF7BU5VgpqWdS1XwSTFCLphENozhYQAj6i5LqU8BPZZZ" },
{ Id: "12D3KooWBRvtW83QYnPgJCyVyAgMXtg71wjkGefVB2fBnm1A36kS" },
{ Id: "12D3KooWMmc4kYy78vSumqWtPkUNAoPeCpJ66ysFv1U8S554B7e2" },
},
},
{
Name: "foo",
Id: "2-903djl1290djl1-21jdl1kjd2-1d1jdl1k2jd11",
Peers: []Peer{
{ Id: "12D3KooWLF7BU5VgpqWdS1XwSTFCLphENozhYQAj6i5LqU8BPZZZ" },
{ Id: "12D3KooWMmc4kYy78vSumqWtPkUNAoPeCpJ66ysFv1U8S554B7e2" },
},
},
{
Name: "bar",
Id: "2-90ssssssssdjl1-21jdl1kjd2-1d1jdl1k2jd11",
Peers: []Peer{
//{ Id: "12D3KooWLF7BU5VgpqWdS1XwSTFCLphENozhYQAj6i5LqU8BPZZZ" },
//{ Id: "12D3KooWBRvtW83QYnPgJCyVyAgMXtg71wjkGefVB2fBnm1A36kS" },
},
},
content, err := os.ReadFile(filename)
if err != nil {
return nil, fmt.Errorf("Could not read config file: %s", err)
}
var result []NamespaceConfig
err = json.Unmarshal(content, &result)
if err != nil {
return nil, fmt.Errorf("Could not parse config file: %s", err)
}
return result, nil
}
@@ -182,11 +170,9 @@ func (wg *WhitelistConnectionGater) InterceptUpgraded(conn network.Conn) (allow
return wg.InterceptPeerDial(conn.RemotePeer()), 0
}
func GetTrustedPeers() map[string][]Peer {
cfg := NewConfig()
func GetTrustedPeers(config []NamespaceConfig) map[string][]Peer {
result := make(map[string][]Peer)
for _, c := range cfg {
for _, c := range config {
result[c.Id] = c.Peers
}
@@ -204,9 +190,20 @@ type Namespace struct {
CancelFunc context.CancelFunc
ctx context.Context
Key *agelib.X25519Identity
TrustedPeers []Peer
}
func (n *Namespace) GetRecipients() []string {
var result []string
for _, peer := range n.TrustedPeers {
result = append(result, peer.Key)
}
return result
}
func (n *Namespace) Put(k string, v string) error {
key := ds.NewKey(k)
err := n.Datastore.Put(n.ctx, key, []byte(v))
@@ -265,10 +262,11 @@ type StorageHandler struct {
Ipfs *ipfslite.Peer
PubSub *pubsub.PubSub
Key *agelib.X25519Identity
Config []NamespaceConfig
}
func IsTrustedPeer(ctx context.Context, id peer.ID, namespace string) bool {
peerMap := GetTrustedPeers()
func IsTrustedPeer(ctx context.Context, id peer.ID, namespace string, config []NamespaceConfig) bool {
peerMap := GetTrustedPeers(config)
val, ok := peerMap[namespace]
@@ -299,7 +297,7 @@ func CreateNamespace(ID string, storageHandler StorageHandler) (*Namespace, erro
ID, //== topicName
func(ctx context.Context, _ peer.ID, msg *pubsub.Message) bool {
signer := msg.GetFrom()
trusted := IsTrustedPeer(ctx, signer, ID)
trusted := IsTrustedPeer(ctx, signer, ID, storageHandler.Config)
if !trusted {
logger.Debug("discarded pubsub message from non trusted source %s ", signer)
}
@@ -334,7 +332,15 @@ func CreateNamespace(ID string, storageHandler StorageHandler) (*Namespace, erro
return nil, err
}
return &Namespace{ID: ID, Datastore: crdt, CancelFunc: psubCancel, ctx: storageHandler.Ctx, Key: storageHandler.Key}, nil
PeerMap := GetTrustedPeers(storageHandler.Config)
val, ok := PeerMap[ID]
if !ok {
logger.Fatal("namespace config does not contain any peers")
}
return &Namespace{ID: ID, Datastore: crdt, CancelFunc: psubCancel, ctx: storageHandler.Ctx, Key: storageHandler.Key, TrustedPeers: val}, nil
}
@@ -402,7 +408,7 @@ func DiscoverPeers(ctx context.Context, h host.Host, dht *dht.IpfsDHT) {
fmt.Printf("Own Id: %s\n", h.ID())
for !anyConnected {
time.Sleep(2 * time.Second)
fmt.Println("Searching for peers...")
//debug fmt.Println("Searching for peers...")
peerChan, err := routingDiscovery.FindPeers(ctx, topicNameFlag)
if err != nil {
panic(err)
@@ -413,7 +419,7 @@ func DiscoverPeers(ctx context.Context, h host.Host, dht *dht.IpfsDHT) {
}
err := h.Connect(ctx, peer)
if err != nil {
fmt.Printf("Failed connecting to %s, error: %s\n", peer.ID, err)
//debug fmt.Printf("Failed connecting to %s, error: %s\n", peer.ID, err)
} else {
fmt.Println("Connected to:", peer.ID)
anyConnected = true