server/backend/submission.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)
}
}
}
}