p2p-llm / peers /service.go
arpinfidel's picture
temp
48511d8
package peers
import (
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"github.com/arpinfidel/p2p-llm/config"
"github.com/arpinfidel/p2p-llm/db"
)
type PeerService struct {
cfg *config.Config
repo db.PeerRepository
}
func NewPeerService(cfg *config.Config, repo db.PeerRepository) *PeerService {
return &PeerService{
cfg: cfg,
repo: repo,
}
}
func (s *PeerService) ListTrustedPeers() ([]config.Peer, error) {
// Get peers from config
peers := s.cfg.TrustedPeers
// Get peers from database
dbPeers, err := s.repo.ListTrustedPeers()
if err != nil {
return nil, err
}
// Convert database peers to config.Peer format
for _, dbPeer := range dbPeers {
block, _ := pem.Decode([]byte(dbPeer.PublicKey))
if block == nil {
continue
}
pubKey, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
continue
}
peers = append(peers, config.Peer{
URL: dbPeer.URL,
PublicKey: pubKey.(*rsa.PublicKey),
})
}
return peers, nil
}