func pbToRegistration(pb *corepb.Registration) (core.Registration, error) { var key jose.JsonWebKey err := key.UnmarshalJSON(pb.Key) if err != nil { return core.Registration{}, err } var initialIP net.IP err = initialIP.UnmarshalText(pb.InitialIP) if err != nil { return core.Registration{}, err } var contacts *[]string if *pb.ContactsPresent { if len(pb.Contact) != 0 { contacts = &pb.Contact } else { // When gRPC creates an empty slice it is actually a nil slice. Since // certain things boulder uses, like encoding/json, differentiate between // these we need to de-nil these slices. Without this we are unable to // properly do registration updates as contacts would always be removed // as we use the difference between a nil and empty slice in ra.mergeUpdate. empty := []string{} contacts = &empty } } return core.Registration{ ID: *pb.Id, Key: &key, Contact: contacts, Agreement: *pb.Agreement, InitialIP: initialIP, CreatedAt: time.Unix(0, *pb.CreatedAt), Status: core.AcmeStatus(*pb.Status), }, nil }
func pbToValidationRecord(in *corepb.ValidationRecord) (record core.ValidationRecord, err error) { if in == nil { return core.ValidationRecord{}, ErrMissingParameters } if in.AddressUsed == nil || in.Hostname == nil || in.Port == nil || in.Url == nil { return core.ValidationRecord{}, ErrMissingParameters } addrs := make([]net.IP, len(in.AddressesResolved)) for i, v := range in.AddressesResolved { addrs[i] = net.IP(v) } var addrUsed net.IP err = addrUsed.UnmarshalText(in.AddressUsed) if err != nil { return } return core.ValidationRecord{ Hostname: *in.Hostname, Port: *in.Port, AddressesResolved: addrs, AddressUsed: addrUsed, Authorities: in.Authorities, URL: *in.Url, }, nil }