@@ 470,10 470,52 @@ func (el *Election) SendSum(client *mautrix.Client, eventStore *EventStore) erro
return nil
}
-func (el *Election) Finish() {
+func (el *Election) Finish(client *mautrix.Client) {
el.Lock()
defer el.Save()
defer el.Unlock()
+
+ if el.LocalVoter == nil {
+ return
+ }
+
+ reqRedact := mautrix.ReqRedact{
+ Reason: "election has concluded",
+ }
+
+ // redact the create/start events if we sent them
+ if el.CreateEvt.Sender == el.LocalVoter.JoinEvt.Sender {
+ _, err := client.RedactEvent(el.RoomID, el.CreateEvt.ID, reqRedact)
+ if err != nil {
+ panic(err)
+ }
+ // if we sent the create event, we necessarily sent the start event
+ _, err = client.RedactEvent(el.RoomID, *el.StartID, reqRedact)
+ if err != nil {
+ panic(err)
+ }
+ }
+
+ // redact our join event
+ _, err := client.RedactEvent(el.RoomID, el.LocalVoter.JoinEvt.ID, reqRedact)
+ if err != nil {
+ panic(err)
+ }
+
+ // redact our keys event
+ _, err = client.RedactEvent(el.RoomID, *el.LocalVoter.KeysID, reqRedact)
+ if err != nil {
+ panic(err)
+ }
+
+ // redact our evals event
+ _, err = client.RedactEvent(el.RoomID, *el.LocalVoter.EvalsID, reqRedact)
+ if err != nil {
+ panic(err)
+ }
+
+ // we don't redact the sum event since others may still be using it
+
// the election is over; throw away the keys!
el.LocalVoter = nil
}