Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package ballotagent
import (
"encoding/json"
"fmt"
"net/http"
rad "gitlab.utc.fr/gvandevi/ia04binome2a"
)
func (rsa *BallotServerAgent) sendResults(w http.ResponseWriter, r *http.Request) {
// mise à jour du nombre de requêtes
rsa.Lock()
defer rsa.Unlock()
rsa.reqCount++
// vérification de la méthode de la requête
if !rsa.checkMethod("POST", w, r) {
return
}
// décodage de la requête
req, err := decodeRequest[rad.Ballot](r)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
fmt.Fprint(w, err.Error())
return
}
// recupération des infos
scrutin := req.BallotID
voteBallot := rad.Ballot{BallotID: scrutin}
ballots := make([]rad.Ballot, len(rsa.ballots))
// Check if ballot exists
i := 0
for k := range rsa.ballots {
ballots[i] = k
i++
}
if !contains[rad.Ballot](ballots, voteBallot) {
w.WriteHeader(http.StatusNotFound)
msg := fmt.Sprintf("The ballot '%s' does not exist", scrutin)
w.Write([]byte(msg))
return
}
ballot := rsa.ballots[voteBallot]
// Check que la deadline n'est pas déjà passée
if ballot.isOpen {
w.WriteHeader(http.StatusTooEarly)
msg := fmt.Sprintf("The ballot '%s' is not closed yet.", scrutin)
w.Write([]byte(msg))
return
}
w.WriteHeader(http.StatusOK)
serial, _ := json.Marshal(rsa.ballots[voteBallot].results)
w.Write(serial)
}