+31
appview/ingester.go
+31
appview/ingester.go
···
44
44
ingestArtifact(&d, e, enforcer)
45
45
case tangled.ActorProfileNSID:
46
46
ingestProfile(&d, e)
47
+
case tangled.SpindleMemberNSID:
48
+
ingestSpindleMember(&d, e, enforcer)
47
49
}
48
50
49
51
return err
···
285
287
286
288
return nil
287
289
}
290
+
291
+
func ingestSpindleMember(_ *db.DbWrapper, e *models.Event, enforcer *rbac.Enforcer) error {
292
+
did := e.Did
293
+
var err error
294
+
295
+
switch e.Commit.Operation {
296
+
case models.CommitOperationCreate:
297
+
raw := json.RawMessage(e.Commit.Record)
298
+
record := tangled.SpindleMember{}
299
+
err = json.Unmarshal(raw, &record)
300
+
if err != nil {
301
+
log.Printf("invalid record: %s", err)
302
+
return err
303
+
}
304
+
305
+
// only spindle owner can invite to spindles
306
+
ok, err := enforcer.IsSpindleInviteAllowed(did, record.Instance)
307
+
if err != nil || !ok {
308
+
return fmt.Errorf("failed to enforce permissions: %w", err)
309
+
}
310
+
311
+
err = enforcer.AddSpindleMember(record.Instance, record.Subject)
312
+
if err != nil {
313
+
return fmt.Errorf("failed to add member: %w", err)
314
+
}
315
+
}
316
+
317
+
return nil
318
+
}