package service
import (
"context"
"github.com/keys-pub/keys"
"github.com/keys-pub/keys/user"
"github.com/pkg/errors"
)
func (s *service) Pull(ctx context.Context, req *PullRequest) (*PullResponse, error) {
if req.Key != "" {
kid, err := s.lookup(ctx, req.Key, &lookupOpts{SearchRemote: true})
if err != nil {
return nil, err
}
res, err := s.pullUser(ctx, kid)
if err != nil {
return nil, err
}
if res == nil {
return nil, keys.NewErrNotFound(kid.String())
}
return &PullResponse{KIDs: []string{kid.String()}}, nil
}
pulled := []string{}
spks, err := s.vault.EdX25519PublicKeys()
if err != nil {
return nil, errors.Wrapf(err, "failed to load keys")
}
for _, spk := range spks {
res, err := s.pullUser(ctx, spk.ID())
if err != nil {
return nil, err
}
if res == nil {
continue
}
pulled = append(pulled, spk.ID().String())
}
return &PullResponse{KIDs: pulled}, nil
}
func (s *service) pullUser(ctx context.Context, kid keys.ID) (*user.Result, error) {
logger.Infof("Pull user %s", kid)
if err := s.importID(kid); err != nil {
return nil, err
}
res, err := s.updateUser(ctx, kid, false)
if err != nil {
return nil, err
}
return res, nil
}