forked from tangled.org/core
this repo has no description

appview: ingest spindle memberships

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li 31f06683 c6f92a2a

verified
Changed files
+31
appview
+31
appview/ingester.go
···
ingestArtifact(&d, e, enforcer)
case tangled.ActorProfileNSID:
ingestProfile(&d, e)
+
case tangled.SpindleMemberNSID:
+
ingestSpindleMember(&d, e, enforcer)
}
return err
···
return nil
}
+
+
func ingestSpindleMember(_ *db.DbWrapper, e *models.Event, enforcer *rbac.Enforcer) error {
+
did := e.Did
+
var err error
+
+
switch e.Commit.Operation {
+
case models.CommitOperationCreate:
+
raw := json.RawMessage(e.Commit.Record)
+
record := tangled.SpindleMember{}
+
err = json.Unmarshal(raw, &record)
+
if err != nil {
+
log.Printf("invalid record: %s", err)
+
return err
+
}
+
+
// only spindle owner can invite to spindles
+
ok, err := enforcer.IsSpindleInviteAllowed(did, record.Instance)
+
if err != nil || !ok {
+
return fmt.Errorf("failed to enforce permissions: %w", err)
+
}
+
+
err = enforcer.AddSpindleMember(record.Instance, record.Subject)
+
if err != nil {
+
return fmt.Errorf("failed to add member: %w", err)
+
}
+
}
+
+
return nil
+
}