56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"encoding/base64"
|
|
"encoding/binary"
|
|
"log"
|
|
"math/rand"
|
|
"os"
|
|
"strconv"
|
|
|
|
"srs.epita.fr/fic-server/libfic"
|
|
)
|
|
|
|
func treatSubmission(pathname string, team_id string, exercice_id string) {
|
|
bid := make([]byte, 5)
|
|
binary.LittleEndian.PutUint32(bid, rand.Uint32())
|
|
id := "[" + base64.StdEncoding.EncodeToString(bid) + "]"
|
|
log.Println(id, "New submission receive", pathname)
|
|
|
|
if tid, err := strconv.Atoi(team_id); err != nil {
|
|
log.Println(id, "[ERR]", err)
|
|
} else if eid, err := strconv.Atoi(exercice_id); err != nil {
|
|
log.Println(id, "[ERR]", err)
|
|
} else if team, err := fic.GetTeam(tid); err != nil {
|
|
log.Println(id, "[ERR]", err)
|
|
} else if exercice, err := fic.GetExercice(eid); err != nil {
|
|
log.Println(id, "[ERR]", err)
|
|
} else if file, err := os.Open(pathname); err != nil {
|
|
log.Println(id, "[ERR]", err)
|
|
} else {
|
|
defer file.Close()
|
|
|
|
cnt := ""
|
|
scanner := bufio.NewScanner(file)
|
|
for scanner.Scan() {
|
|
cnt += scanner.Text()
|
|
}
|
|
|
|
if solved, err := exercice.CheckResponse(cnt, team); err != nil {
|
|
log.Println(id, "[ERR]", err)
|
|
} else if solved {
|
|
exercice.Solved(team)
|
|
log.Printf("%s Team %d SOLVED exercice %d\n", id, team.Id, exercice.Id)
|
|
if err := os.Remove(pathname); err != nil {
|
|
log.Println(id, "[ERR]", err)
|
|
}
|
|
} else {
|
|
log.Printf("%s Team %d submit an invalid solution for exercice %d\n", id, team.Id, exercice.Id)
|
|
if err := os.Remove(pathname); err != nil {
|
|
log.Println(id, "[ERR]", err)
|
|
}
|
|
}
|
|
}
|
|
}
|