~edwargix/tallyard

abd5ff08ca3102e3763253436e2f4da839defa39 — David Florness 4 years ago 456f6a0
Ensure elections exist before using them
1 files changed, 22 insertions(+), 6 deletions(-)

M election/msg.go
M election/msg.go => election/msg.go +22 -6
@@ 110,7 110,11 @@ func OnJoinElectionMessage(source mautrix.EventSource, evt *event.Event, electio
		return
	}
	input := new(big.Int).SetBytes(bytes)
	el := elections.Get(content.CreateEventId)
	el, exists := elections.GetOk(content.CreateEventId)
	if !exists {
		log.Warnf("ignoring %s's join since the election doesn't exist", evt.Sender)
		return
	}
	el.Lock()
	defer el.Unlock()
	if el.Started {


@@ 135,7 139,11 @@ func OnStartElectionMessage(source mautrix.EventSource, evt *event.Event, electi
		return
	}
	// TODO ensure election exists
	el := elections.Get(content.CreateEventId)
	el, exists := elections.GetOk(content.CreateEventId)
	if !exists {
		log.Warnf("ignoring %s's election start since the election doesn't exist", evt.Sender)
		return
	}
	el.Lock()
	defer el.Unlock()
	if evt.Sender != el.Creator {


@@ 149,7 157,7 @@ func OnStartElectionMessage(source mautrix.EventSource, evt *event.Event, electi
func OnEvalMessage(source mautrix.EventSource, evt *event.Event, elections *ElectionsMap, localVoter *LocalVoter) {
	content, ok := evt.Content.Parsed.(*EvalMessageContent)
	if !ok {
		log.Warn("ignoring eval message since we couldn't cast message content to EvalMessageContent")
		log.Warn("ignoring %s's eval message since we couldn't cast message content to EvalMessageContent", evt.Sender)
		return
	}
	encodedEncryptedOutput, ok := content.Outputs[localVoter.UserID]


@@ 159,13 167,21 @@ func OnEvalMessage(source mautrix.EventSource, evt *event.Event, elections *Elec
	}
	encryptedOutput, err := base64.StdEncoding.DecodeString(encodedEncryptedOutput)
	if err != nil {
		log.Errorf("couldn't decode encrypted output: %s", err)
		log.Errorf("couldn't decode %s's encrypted output: %s", evt.Sender, err)
		return
	}
	el, exists := elections.GetOk(content.CreateEventId)
	if !exists {
		log.Warnf("ignoring %s's eval message since the election doesn't exist", evt.Sender)
		return
	}
	el := elections.Get(content.CreateEventId)
	el.Lock()
	defer el.Unlock()
	voter := el.Voters[evt.Sender]
	voter, exists := el.Voters[evt.Sender]
	if !exists {
		log.Warnf("ignoring %s's eval message since they are not a voter", evt.Sender)
		return
	}

	var decryptNonce [24]byte
	copy(decryptNonce[:], encryptedOutput[:24])