package indexer import ( "encoding/json" "errors" "time" ) type PeerRecordValidator struct{} func (v PeerRecordValidator) Validate(key string, value []byte) error { var rec PeerRecord if err := json.Unmarshal(value, &rec); err != nil { return errors.New("invalid json") } // PeerID must exist if rec.PeerID == "" { return errors.New("missing peerID") } // Expiry check if rec.ExpiryDate.Before(time.Now().UTC()) { return errors.New("record expired") } // Signature verification rec2 := PeerRecord{ Name: rec.Name, DID: rec.DID, PubKey: rec.PubKey, PeerID: rec.PeerID, } if _, err := rec2.Verify(); err != nil { return errors.New("invalid signature") } return nil } func (v PeerRecordValidator) Select(key string, values [][]byte) (int, error) { var newest time.Time index := 0 for i, val := range values { var rec PeerRecord if err := json.Unmarshal(val, &rec); err != nil { continue } if rec.ExpiryDate.After(newest) { newest = rec.ExpiryDate index = i } } return index, nil }