Skip to content

Commit 7049cfb

Browse files
authored
Merge pull request #1976 from dedis/work-be1-etienne-comments-previous-pr
[BE1] Address issues mentioned in the comments for pull request #1815
2 parents 144e13c + 02d74fc commit 7049cfb

File tree

9 files changed

+210
-21
lines changed

9 files changed

+210
-21
lines changed

be1-go/internal/database/sqlite/chirp.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,32 +22,39 @@ func (s *SQLite) StoreChirpMessages(channelPath, generalChannel string, msg, gen
2222
if err != nil {
2323
return errors.NewJsonMarshalError("chirp message: %v", err)
2424
}
25+
2526
messageData, err := base64.URLEncoding.DecodeString(msg.Data)
2627
if err != nil {
2728
return errors.NewDecodeStringError("chirp message data: %v", err)
2829
}
30+
2931
generalMsgBytes, err := json.Marshal(generalMsg)
3032
if err != nil {
3133
return errors.NewInternalServerError("failed to marshal general chirp message: %v", err)
3234
}
35+
3336
generalMessageData, err := base64.URLEncoding.DecodeString(generalMsg.Data)
3437
if err != nil {
3538
return errors.NewInternalServerError("failed to decode general chirp message data: %v", err)
3639
}
40+
3741
storedTime := time.Now().UnixNano()
3842

3943
err = s.insertMessageHelper(tx, msg.MessageID, msgBytes, messageData, storedTime)
4044
if err != nil {
4145
return err
4246
}
47+
4348
_, err = tx.Exec(insertChannelMessage, channelPath, msg.MessageID, true)
4449
if err != nil {
4550
return errors.NewDatabaseInsertErrorMsg("relation chirp message and chirp channel: %v", err)
4651
}
52+
4753
_, err = tx.Exec(insertMessage, generalMsg.MessageID, generalMsgBytes, generalMessageData, storedTime)
4854
if err != nil {
4955
return errors.NewDatabaseInsertErrorMsg("general chirp message: %v", err)
5056
}
57+
5158
_, err = tx.Exec(insertChannelMessage, generalChannel, generalMsg.MessageID, false)
5259
if err != nil {
5360
return errors.NewDatabaseInsertErrorMsg("relation general chirp message and general chirp channel: %v", err)

be1-go/internal/database/sqlite/election.go

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,26 @@ func (s *SQLite) GetLAOOrganizerPubKey(electionPath string) (kyber.Point, error)
2424
if err != nil {
2525
return nil, poperrors.NewDatabaseTransactionBeginErrorMsg(err.Error())
2626
}
27+
2728
defer tx.Rollback()
2829

2930
var organizerPubBuf []byte
31+
3032
err = tx.QueryRow(selectLaoOrganizerKey, electionPath).
3133
Scan(&organizerPubBuf)
3234
if err != nil {
3335
return nil, poperrors.NewDatabaseSelectErrorMsg("lao organizer public key: %v", err)
3436
}
3537

3638
organizerPubKey := crypto.Suite.Point()
39+
3740
err = organizerPubKey.UnmarshalBinary(organizerPubBuf)
3841
if err != nil {
3942
return nil, poperrors.NewInternalServerError("failed to unmarshal lao organizer public key: %v", err)
4043
}
4144

4245
err = tx.Commit()
46+
4347
if err != nil {
4448
return nil, poperrors.NewDatabaseTransactionCommitErrorMsg(err.Error())
4549
}
@@ -52,23 +56,26 @@ func (s *SQLite) GetElectionSecretKey(electionPath string) (kyber.Scalar, error)
5256
defer dbLock.Unlock()
5357

5458
var electionSecretBuf []byte
55-
err := s.database.QueryRow(selectSecretKey, electionPath).
56-
Scan(&electionSecretBuf)
59+
60+
err := s.database.QueryRow(selectSecretKey, electionPath).Scan(&electionSecretBuf)
5761
if err != nil {
5862
return nil, poperrors.NewDatabaseSelectErrorMsg("election secret key: %v", err)
5963
}
6064

6165
electionSecretKey := crypto.Suite.Scalar()
6266
err = electionSecretKey.UnmarshalBinary(electionSecretBuf)
67+
6368
if err != nil {
6469
return nil, poperrors.NewInternalServerError("failed to unmarshal election secret key: %v", err)
6570
}
71+
6672
return electionSecretKey, nil
6773
}
6874

6975
func (s *SQLite) getElectionState(electionPath string) (string, error) {
7076

7177
var state string
78+
7279
err := s.database.QueryRow(selectLastElectionMessage,
7380
electionPath,
7481
channel.ElectionObject,
@@ -78,6 +85,7 @@ func (s *SQLite) getElectionState(electionPath string) (string, error) {
7885
if err != nil && !errors.Is(err, sql.ErrNoRows) {
7986
return "", poperrors.NewDatabaseSelectErrorMsg("election state: %v", err)
8087
}
88+
8189
return state, nil
8290
}
8391

@@ -101,6 +109,7 @@ func (s *SQLite) IsElectionStarted(electionPath string) (bool, error) {
101109
if err != nil {
102110
return false, err
103111
}
112+
104113
return state == channel.ElectionActionOpen, nil
105114
}
106115

@@ -112,6 +121,7 @@ func (s *SQLite) IsElectionEnded(electionPath string) (bool, error) {
112121
if err != nil {
113122
return false, err
114123
}
124+
115125
return state == channel.ElectionActionEnd, nil
116126
}
117127

@@ -120,11 +130,13 @@ func (s *SQLite) GetElectionCreationTime(electionPath string) (int64, error) {
120130
defer dbLock.Unlock()
121131

122132
var creationTime int64
133+
123134
err := s.database.QueryRow(selectElectionCreationTime, electionPath, channel.ElectionObject, channel.ElectionActionSetup).
124135
Scan(&creationTime)
125136
if err != nil {
126137
return 0, poperrors.NewDatabaseSelectErrorMsg("election creation time: %v", err)
127138
}
139+
128140
return creationTime, nil
129141
}
130142

@@ -133,15 +145,16 @@ func (s *SQLite) GetElectionType(electionPath string) (string, error) {
133145
defer dbLock.Unlock()
134146

135147
var electionType string
148+
136149
err := s.database.QueryRow(selectElectionType,
137150
electionPath,
138151
channel.ElectionObject,
139152
channel.ElectionActionSetup).
140153
Scan(&electionType)
141-
142154
if err != nil {
143155
return "", poperrors.NewDatabaseSelectErrorMsg("election type: %v", err)
144156
}
157+
145158
return electionType, nil
146159
}
147160

@@ -163,32 +176,39 @@ func (s *SQLite) GetElectionAttendees(electionPath string) (map[string]struct{},
163176
}
164177

165178
var rollCallClose mlao.RollCallClose
179+
166180
err = json.Unmarshal(rollCallCloseBytes, &rollCallClose)
167181
if err != nil {
168182
return nil, poperrors.NewJsonUnmarshalError("roll call close message data: %v", err)
169183
}
170184

171185
attendeesMap := make(map[string]struct{})
186+
172187
for _, attendee := range rollCallClose.Attendees {
173188
attendeesMap[attendee] = struct{}{}
174189
}
190+
175191
return attendeesMap, nil
176192
}
177193

178194
func (s *SQLite) getElectionSetup(electionPath string, tx *sql.Tx) (mlao.ElectionSetup, error) {
179195

180196
var electionSetupBytes []byte
197+
181198
err := tx.QueryRow(selectElectionSetup, electionPath, channel.ElectionObject, channel.ElectionActionSetup).
182199
Scan(&electionSetupBytes)
200+
183201
if err != nil {
184202
return mlao.ElectionSetup{}, poperrors.NewDatabaseSelectErrorMsg("election setup message data: %v", err)
185203
}
186204

187205
var electionSetup mlao.ElectionSetup
206+
188207
err = json.Unmarshal(electionSetupBytes, &electionSetup)
189208
if err != nil {
190209
return mlao.ElectionSetup{}, poperrors.NewJsonUnmarshalError("election setup message data: %v", err)
191210
}
211+
192212
return electionSetup, nil
193213
}
194214

@@ -201,13 +221,15 @@ func (s *SQLite) GetElectionQuestions(electionPath string) (map[string]telection
201221
return nil, poperrors.NewDatabaseTransactionBeginErrorMsg(err.Error())
202222

203223
}
224+
204225
defer tx.Rollback()
205226

206227
electionSetup, err := s.getElectionSetup(electionPath, tx)
207228
if err != nil {
208229
return nil, err
209230

210231
}
232+
211233
questions, err := getQuestionsFromMessage(electionSetup)
212234
if err != nil {
213235
return nil, err
@@ -218,6 +240,7 @@ func (s *SQLite) GetElectionQuestions(electionPath string) (map[string]telection
218240
return nil, poperrors.NewDatabaseTransactionCommitErrorMsg(err.Error())
219241

220242
}
243+
221244
return questions, nil
222245
}
223246

@@ -229,6 +252,7 @@ func (s *SQLite) GetElectionQuestionsWithValidVotes(electionPath string) (map[st
229252
if err != nil {
230253
return nil, poperrors.NewDatabaseTransactionBeginErrorMsg(err.Error())
231254
}
255+
232256
defer tx.Rollback()
233257

234258
electionSetup, err := s.getElectionSetup(electionPath, tx)
@@ -244,6 +268,7 @@ func (s *SQLite) GetElectionQuestionsWithValidVotes(electionPath string) (map[st
244268
if err != nil {
245269
return nil, poperrors.NewDatabaseSelectErrorMsg("cast vote messages: %v", err)
246270
}
271+
247272
defer rows.Close()
248273

249274
for rows.Next() {
@@ -253,53 +278,67 @@ func (s *SQLite) GetElectionQuestionsWithValidVotes(electionPath string) (map[st
253278
if err = rows.Scan(&voteBytes, &msgID, &sender); err != nil {
254279
return nil, poperrors.NewDatabaseScanErrorMsg("cast vote message: %v", err)
255280
}
281+
256282
var vote melection.VoteCastVote
257283
err = json.Unmarshal(voteBytes, &vote)
284+
258285
if err != nil {
259286
return nil, poperrors.NewJsonUnmarshalError("cast vote message data: %v", err)
260287
}
288+
261289
err = updateVote(msgID, sender, vote, questions)
262290
if err != nil {
263291
return nil, err
264292
}
265293
}
294+
266295
if err = rows.Err(); err != nil {
267296
return nil, poperrors.NewDatabaseIteratorErrorMsg("cast vote messages: %v", err)
268297
}
298+
269299
err = tx.Commit()
300+
270301
if err != nil {
271302
return nil, poperrors.NewDatabaseTransactionCommitErrorMsg(err.Error())
272303
}
304+
273305
return questions, nil
274306
}
275307

276308
func getQuestionsFromMessage(electionSetup mlao.ElectionSetup) (map[string]telection.Question, error) {
277309

278310
questions := make(map[string]telection.Question)
311+
279312
for _, question := range electionSetup.Questions {
280313
ballotOptions := make([]string, len(question.BallotOptions))
281314
copy(ballotOptions, question.BallotOptions)
282315
_, ok := questions[question.ID]
316+
283317
if ok {
284318
return nil, poperrors.NewInvalidMessageFieldError("duplicate question ID in election setup message data: %s", question.ID)
285319
}
320+
286321
questions[question.ID] = telection.Question{
287322
ID: []byte(question.ID),
288323
BallotOptions: ballotOptions,
289324
ValidVotes: make(map[string]telection.ValidVote),
290325
Method: question.VotingMethod,
291326
}
292327
}
328+
293329
return questions, nil
294330
}
295331

296332
func updateVote(msgID, sender string, castVote melection.VoteCastVote, questions map[string]telection.Question) error {
297333
for idx, vote := range castVote.Votes {
298334
question, ok := questions[vote.Question]
335+
299336
if !ok {
300337
return poperrors.NewInvalidMessageFieldError("question not found in election setup for vote number %d sent by %s", idx, sender)
301338
}
339+
302340
earlierVote, ok := question.ValidVotes[sender]
341+
303342
if !ok || earlierVote.VoteTime < castVote.CreatedAt {
304343
question.ValidVotes[sender] = telection.ValidVote{
305344
MsgID: msgID,
@@ -309,6 +348,7 @@ func updateVote(msgID, sender string, castVote melection.VoteCastVote, questions
309348
}
310349
}
311350
}
351+
312352
return nil
313353
}
314354

@@ -326,37 +366,44 @@ func (s *SQLite) StoreElectionEndWithResult(channelPath string, msg, electionRes
326366
if err != nil {
327367
return poperrors.NewJsonMarshalError("election end message: %v", err)
328368
}
369+
329370
messageData, err := base64.URLEncoding.DecodeString(msg.Data)
330371
if err != nil {
331372
return poperrors.NewDecodeStringError("election end message data: %v", err)
332373
}
374+
333375
electionResult, err := base64.URLEncoding.DecodeString(electionResultMsg.Data)
334376
if err != nil {
335377
return poperrors.NewInternalServerError("failed to decode election result message data: %v", err)
336378
}
379+
337380
electionResultMsgBytes, err := json.Marshal(electionResultMsg)
338381
if err != nil {
339382
return poperrors.NewJsonMarshalError("failed to marshal election result message: %v", err)
340383
}
384+
341385
storedTime := time.Now().UnixNano()
342386

343387
err = s.insertMessageHelper(tx, msg.MessageID, msgBytes, messageData, storedTime)
344388
if err != nil {
345389
return err
346-
347390
}
391+
348392
_, err = tx.Exec(insertChannelMessage, channelPath, msg.MessageID, true)
349393
if err != nil {
350394
return poperrors.NewDatabaseInsertErrorMsg("relation election end message and election channel: %v", err)
351395
}
396+
352397
_, err = tx.Exec(insertMessage, electionResultMsg.MessageID, electionResultMsgBytes, electionResult, storedTime)
353398
if err != nil {
354399
return poperrors.NewDatabaseInsertErrorMsg("election result message: %v", err)
355400
}
401+
356402
_, err = tx.Exec(insertChannelMessage, channelPath, electionResultMsg.MessageID, false)
357403
if err != nil {
358404
return poperrors.NewDatabaseInsertErrorMsg("relation election result message and election channel: %v", err)
359405
}
406+
360407
err = tx.Commit()
361408

362409
if err != nil {

0 commit comments

Comments
 (0)