An atproto PDS written in Go

parse and validate record against atproto model (#5)

Changed files
+29 -6
server
+29 -6
server/repo.go
···
import (
"bytes"
"context"
+
"encoding/json"
"fmt"
"io"
"time"
···
switch op.Type {
case OpTypeCreate:
-
nc, err := r.PutRecord(context.TODO(), op.Collection+"/"+*op.Rkey, op.Record)
+
j, err := json.Marshal(*op.Record)
+
if err != nil {
+
return nil, err
+
}
+
out, err := data.UnmarshalJSON(j)
+
if err != nil {
+
return nil, err
+
}
+
mm := MarshalableMap(out)
+
nc, err := r.PutRecord(context.TODO(), op.Collection+"/"+*op.Rkey, &mm)
if err != nil {
return nil, err
}
-
-
d, _ := data.MarshalCBOR(*op.Record)
+
d, err := data.MarshalCBOR(mm)
+
if err != nil {
+
return nil, err
+
}
entries = append(entries, models.Record{
Did: urepo.Did,
CreatedAt: rm.clock.Next().String(),
···
Type: to.StringPtr(OpTypeDelete.String()),
})
case OpTypeUpdate:
-
nc, err := r.UpdateRecord(context.TODO(), op.Collection+"/"+*op.Rkey, op.Record)
+
j, err := json.Marshal(*op.Record)
+
if err != nil {
+
return nil, err
+
}
+
out, err := data.UnmarshalJSON(j)
+
if err != nil {
+
return nil, err
+
}
+
mm := MarshalableMap(out)
+
nc, err := r.UpdateRecord(context.TODO(), op.Collection+"/"+*op.Rkey, &mm)
if err != nil {
return nil, err
}
-
-
d, _ := data.MarshalCBOR(*op.Record)
+
d, err := data.MarshalCBOR(mm)
+
if err != nil {
+
return nil, err
+
}
entries = append(entries, models.Record{
Did: urepo.Did,
CreatedAt: rm.clock.Next().String(),