~edwargix/tallyard

43b26a306adb73cb46a904d2e012db2fd8fc2fd7 — David Florness 2 years ago e3ae97a
Redact all events (except Sum) we sent once the election is over

In case tallyard has terrible cryptography, this will protect most people who
are casually using the software.
2 files changed, 44 insertions(+), 2 deletions(-)

M cmd/tallyard/main.go
M election/voter.go
M cmd/tallyard/main.go => cmd/tallyard/main.go +1 -1
@@ 143,7 143,7 @@ func main() {

	el.PrintResults()

	el.Finish()
	el.Finish(client)
}

var electionFilter = &mautrix.Filter{

M election/voter.go => election/voter.go +43 -1
@@ 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
}