go-waku/cmd/waku/rpc/admin.go

88 lines
2.1 KiB
Go
Raw Normal View History

2021-11-10 13:36:51 +00:00
package rpc
import (
"net/http"
2023-02-16 16:17:52 +00:00
"github.com/libp2p/go-libp2p/core/protocol"
2021-11-10 13:36:51 +00:00
ma "github.com/multiformats/go-multiaddr"
"go.uber.org/zap"
2021-11-10 13:36:51 +00:00
"github.com/waku-org/go-waku/waku/v2/node"
"github.com/waku-org/go-waku/waku/v2/protocol/filter"
"github.com/waku-org/go-waku/waku/v2/protocol/legacy_filter"
"github.com/waku-org/go-waku/waku/v2/protocol/lightpush"
"github.com/waku-org/go-waku/waku/v2/protocol/relay"
"github.com/waku-org/go-waku/waku/v2/protocol/store"
2021-11-10 13:36:51 +00:00
)
type AdminService struct {
node *node.WakuNode
log *zap.Logger
2021-11-10 13:36:51 +00:00
}
type GetPeersArgs struct {
}
type PeersArgs struct {
Peers []string `json:"peers,omitempty"`
}
type PeerReply struct {
2023-02-16 16:17:52 +00:00
Multiaddr string `json:"multiaddr,omitempty"`
Protocol protocol.ID `json:"protocol,omitempty"`
Connected bool `json:"connected,omitempty"`
2021-11-10 13:36:51 +00:00
}
type PeersReply []PeerReply
2021-11-10 13:36:51 +00:00
func (a *AdminService) PostV1Peers(req *http.Request, args *PeersArgs, reply *SuccessReply) error {
for _, peer := range args.Peers {
addr, err := ma.NewMultiaddr(peer)
if err != nil {
a.log.Error("building multiaddr", zap.Error(err))
2022-06-14 15:36:34 +00:00
return err
2021-11-10 13:36:51 +00:00
}
err = a.node.DialPeerWithMultiAddress(req.Context(), addr)
if err != nil {
a.log.Error("dialing peers", zap.Error(err))
2022-06-14 15:36:34 +00:00
return err
2021-11-10 13:36:51 +00:00
}
}
2022-06-14 15:36:34 +00:00
*reply = true
2021-11-10 13:36:51 +00:00
return nil
}
2023-02-16 16:17:52 +00:00
func isWakuProtocol(protocol protocol.ID) bool {
return protocol == legacy_filter.FilterID_v20beta1 ||
protocol == filter.FilterPushID_v20beta1 ||
protocol == filter.FilterSubscribeID_v20beta1 ||
2023-02-16 16:17:52 +00:00
protocol == relay.WakuRelayID_v200 ||
protocol == lightpush.LightPushID_v20beta1 ||
protocol == store.StoreID_v20beta4
2021-11-17 16:19:42 +00:00
}
2021-11-10 13:36:51 +00:00
func (a *AdminService) GetV1Peers(req *http.Request, args *GetPeersArgs, reply *PeersReply) error {
peers, err := a.node.Peers()
if err != nil {
a.log.Error("getting peers", zap.Error(err))
2021-11-10 13:36:51 +00:00
return nil
}
for _, peer := range peers {
2021-11-17 16:19:42 +00:00
for _, addr := range peer.Addrs {
for _, proto := range peer.Protocols {
if !isWakuProtocol(proto) {
continue
}
*reply = append(*reply, PeerReply{
2021-11-17 16:19:42 +00:00
Multiaddr: addr.String(),
Protocol: proto,
Connected: peer.Connected,
})
}
2021-11-10 13:36:51 +00:00
}
}
return nil
}