packages/hyprspace: only grab connectable addresses from IPFS API
This commit is contained in:
parent
7591d3245a
commit
6397c05d2f
2 changed files with 50 additions and 10 deletions
|
@ -30,7 +30,7 @@ const Protocol = "/hyprspace/0.0.1"
|
||||||
|
|
||||||
var bootstrapTriggerChan = make(chan bool)
|
var bootstrapTriggerChan = make(chan bool)
|
||||||
|
|
||||||
func getExtraBootstrapNodes(addr ma.Multiaddr) (nodesList []string) {
|
func getExtraPeers(addr ma.Multiaddr) (nodesList []string) {
|
||||||
nodesList = []string{}
|
nodesList = []string{}
|
||||||
ip4, err := addr.ValueForProtocol(ma.P_IP4)
|
ip4, err := addr.ValueForProtocol(ma.P_IP4)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -40,7 +40,7 @@ func getExtraBootstrapNodes(addr ma.Multiaddr) (nodesList []string) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
resp, err := http.PostForm("http://"+ip4+":"+port+"/api/v0/swarm/addrs", url.Values{})
|
resp, err := http.PostForm("http://"+ip4+":"+port+"/api/v0/swarm/peers", url.Values{})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
@ -52,16 +52,41 @@ func getExtraBootstrapNodes(addr ma.Multiaddr) (nodesList []string) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var obj = map[string]map[string][]string{}
|
var obj = map[string][]map[string]interface{}{}
|
||||||
json.Unmarshal([]byte(apiResponse), &obj)
|
json.Unmarshal([]byte(apiResponse), &obj)
|
||||||
for k, v := range obj["Addrs"] {
|
for _, v := range obj["Peers"] {
|
||||||
for _, addr := range v {
|
nodesList = append(nodesList, (v["Addr"].(string) + "/p2p/" + v["Peer"].(string)))
|
||||||
nodesList = append(nodesList, (addr + "/p2p/" + k))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getExtraBootstrapNodes(addr ma.Multiaddr) (nodesList []string) {
|
||||||
|
nodesList = []string{}
|
||||||
|
ip4, err := addr.ValueForProtocol(ma.P_IP4)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
port, err := addr.ValueForProtocol(ma.P_TCP)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp, err := http.PostForm("http://"+ip4+":"+port+"/api/v0/bootstrap", url.Values{})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
apiResponse, err := ioutil.ReadAll(resp.Body)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var obj = map[string][]string{}
|
||||||
|
json.Unmarshal([]byte(apiResponse), &obj)
|
||||||
|
return obj["Peers"]
|
||||||
|
}
|
||||||
|
|
||||||
// CreateNode creates an internal Libp2p nodes and returns it and it's DHT Discovery service.
|
// CreateNode creates an internal Libp2p nodes and returns it and it's DHT Discovery service.
|
||||||
func CreateNode(ctx context.Context, inputKey []byte, port int, handler network.StreamHandler) (node host.Host, dhtOut *dht.IpfsDHT, err error) {
|
func CreateNode(ctx context.Context, inputKey []byte, port int, handler network.StreamHandler) (node host.Host, dhtOut *dht.IpfsDHT, err error) {
|
||||||
// Unmarshal Private Key
|
// Unmarshal Private Key
|
||||||
|
@ -154,6 +179,21 @@ func CreateNode(ctx context.Context, inputKey []byte, port int, handler network.
|
||||||
return node, nil, err
|
return node, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ipfsApiStr, ok := os.LookupEnv("HYPRSPACE_IPFS_API")
|
||||||
|
if ok {
|
||||||
|
ipfsApiAddr, err := ma.NewMultiaddr(ipfsApiStr)
|
||||||
|
if err == nil {
|
||||||
|
fmt.Println("[+] Getting additional peers from IPFS API")
|
||||||
|
extraPeers, err := parsePeerAddrs(getExtraPeers(ipfsApiAddr))
|
||||||
|
if err == nil {
|
||||||
|
fmt.Printf("[+] %d additional addresses\n", len(extraPeers))
|
||||||
|
for _, p := range extraPeers {
|
||||||
|
node.Peerstore().AddAddrs(p.ID, p.Addrs, 5*time.Minute)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Create DHT Subsystem
|
// Create DHT Subsystem
|
||||||
dhtOut, err = dht.New(
|
dhtOut, err = dht.New(
|
||||||
ctx,
|
ctx,
|
||||||
|
@ -166,9 +206,9 @@ func CreateNode(ctx context.Context, inputKey []byte, port int, handler network.
|
||||||
if ok {
|
if ok {
|
||||||
ipfsApiAddr, err := ma.NewMultiaddr(ipfsApiStr)
|
ipfsApiAddr, err := ma.NewMultiaddr(ipfsApiStr)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
fmt.Println("[+] Getting additional peers from IPFS API")
|
fmt.Println("[+] Getting additional bootstrap nodes from IPFS API")
|
||||||
extraBootstrapNodes = getExtraBootstrapNodes(ipfsApiAddr)
|
extraBootstrapNodes = getExtraBootstrapNodes(ipfsApiAddr)
|
||||||
fmt.Printf("[+] %d additional addresses\n", len(extraBootstrapNodes))
|
fmt.Printf("[+] %d additional bootstrap nodes\n", len(extraBootstrapNodes))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dynamicBootstrapPeers, err := parsePeerAddrs(extraBootstrapNodes)
|
dynamicBootstrapPeers, err := parsePeerAddrs(extraBootstrapNodes)
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
};
|
};
|
||||||
packages.hyprspace = with pkgs; buildGo118Module {
|
packages.hyprspace = with pkgs; buildGo118Module {
|
||||||
pname = "hyprspace";
|
pname = "hyprspace";
|
||||||
version = "0.4.0";
|
version = "0.4.1";
|
||||||
|
|
||||||
src = with inputs.nix-filter.lib; let
|
src = with inputs.nix-filter.lib; let
|
||||||
dirs = map inDirectory;
|
dirs = map inDirectory;
|
||||||
|
|
Loading…
Reference in a new issue