package hostactors import ( "context" "reflect" "github.com/carlosframework/platform/internal/release" ) func (d Directory) PublishActivation(ctx context.Context, id string) (*release.SystemPointer, error) { o, err := d.Read(ctx) if err != nil { return nil, err } h, ok := o.Roster.Activations[id] if !ok || h.Publication == nil || h.Publication.ID != id { return nil, ErrRoster } return release.PublishSystemPublication(ctx, d.Store, d.PublicKey, *h.Publication) } func (d Directory) CancelActivation(ctx context.Context, sg release.Signer, id string) error { o, err := d.Read(ctx) if err != nil { return err } h, ok := o.Roster.Activations[id] if !ok { return nil } if h.Publication == nil || h.Publication.ID != id { return ErrRoster } if err := release.CancelSystemPublication(ctx, d.Store, sg, *h.Publication); err != nil { return err } fresh, err := d.Read(ctx) if err != nil { return err } if _, ok := fresh.Roster.Activations[id]; !ok { return nil } if !reflect.DeepEqual(h, fresh.Roster.Activations[id]) { return ErrRoster } next := Clone(fresh.Roster) delete(next.Activations, id) _, err = d.Replace(ctx, sg, fresh, next) return err }