challenge-sync-airbus: Refactor and prefer calling it cyberrange

This commit is contained in:
nemunaire 2025-03-25 17:58:16 +01:00
parent 98d9f2daf3
commit cb4ceecbf5
6 changed files with 46 additions and 37 deletions

26
libfic/cyberrange.go Normal file
View File

@ -0,0 +1,26 @@
package fic
import ()
type CyberrangeAPIResponse struct {
Data interface{}
CurrentPage int `json:"current_page"`
PerPage int `json:"per_page"`
LastPage int `json:"last_page"`
Total int `json:"total"`
}
type CyberrangeTeam struct {
UUID string `json:"session_uuid"`
Members []CyberrangeTeamMember `json:"members"`
Name string `json:"name"`
Score int64 `json:"score"`
Rank int `json:"rank"`
}
type CyberrangeTeamMember struct {
UUID string `json:"session_uuid"`
Name string `json:"name"`
Nickname string `json:"nickname"`
EMail string `json:"email"`
}

View File

@ -9,6 +9,8 @@ import (
"log"
"net/http"
"strconv"
"srs.epita.fr/fic-server/libfic"
)
type AirbusAPI struct {
@ -18,14 +20,6 @@ type AirbusAPI struct {
InsecureSkipVerify bool
}
type AirbusAPIResponse struct {
Data interface{}
CurrentPage int `json:"current_page"`
PerPage int `json:"per_page"`
LastPage int `json:"last_page"`
Total int `json:"total"`
}
func (a *AirbusAPI) request(method, endpoint string, data io.Reader, out interface{}) error {
var req *http.Request
var err error
@ -59,7 +53,7 @@ func (a *AirbusAPI) request(method, endpoint string, data io.Reader, out interfa
if out != nil {
jdec := json.NewDecoder(resp.Body)
if err := jdec.Decode(&AirbusAPIResponse{Data: out}); err != nil {
if err := jdec.Decode(&fic.CyberrangeAPIResponse{Data: out}); err != nil {
return fmt.Errorf("an error occurs when trying to decode response: %w", err)
}
}
@ -164,7 +158,7 @@ func (a *AirbusAPI) GetChallengeFromName(name string) (*AirbusChallenge, error)
return nil, fmt.Errorf("unable to find challenge %q", name)
}
func (a *AirbusAPI) ValidateChallengeFromUser(team *AirbusTeam, challengeId AirbusChallengeId) (err error) {
func (a *AirbusAPI) ValidateChallengeFromUser(team *fic.CyberrangeTeam, challengeId AirbusChallengeId) (err error) {
log.Printf("ValidateChallenge: %s, %s, %s", a.SessionUUID, challengeId.String(), team.Members[0].UUID)
if dryRun {
return
@ -179,7 +173,7 @@ type AirbusUserAwards struct {
Value int64 `json:"value"`
}
func (a *AirbusAPI) AwardUser(team *AirbusTeam, value int64, message string) (err error) {
func (a *AirbusAPI) AwardUser(team *fic.CyberrangeTeam, value int64, message string) (err error) {
awards := AirbusUserAwards{
Message: message,
Value: value,

View File

@ -16,6 +16,8 @@ import (
"time"
"gopkg.in/fsnotify.v1"
"srs.epita.fr/fic-server/libfic"
)
var (
@ -167,7 +169,7 @@ func main() {
os.Exit(1)
}
ranking := []*AirbusTeam{}
ranking := []*fic.CyberrangeTeam{}
for _, team := range teams {
tmp := team
ranking = append(ranking, &tmp)

View File

@ -2,27 +2,12 @@ package main
import (
"fmt"
"srs.epita.fr/fic-server/libfic"
)
type AirbusTeam struct {
UUID string `json:"session_uuid"`
Members []TeamMember `json:"members"`
Name string `json:"name"`
Score int64 `json:"score"`
Rank int `json:"rank"`
}
type TeamMember struct {
UUID string `json:"session_uuid"`
Name string `json:"name"`
Nickname string `json:"nickname"`
EMail string `json:"email"`
}
type airbusDataTeam []AirbusTeam
func (a *AirbusAPI) GetTeams() ([]AirbusTeam, error) {
var data airbusDataTeam
func (a *AirbusAPI) GetTeams() ([]fic.CyberrangeTeam, error) {
var data []fic.CyberrangeTeam
err := a.request("GET", fmt.Sprintf("/v1/sessions/%s/teams", a.SessionUUID), nil, &data)
if err != nil {
return nil, err
@ -31,13 +16,13 @@ func (a *AirbusAPI) GetTeams() ([]AirbusTeam, error) {
}
}
type ByRank []*AirbusTeam
type ByRank []*fic.CyberrangeTeam
func (a ByRank) Len() int { return len(a) }
func (a ByRank) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByRank) Less(i, j int) bool { return a[i].Rank < a[j].Rank }
type ByScore []*AirbusTeam
type ByScore []*fic.CyberrangeTeam
func (a ByScore) Len() int { return len(a) }
func (a ByScore) Swap(i, j int) { a[i], a[j] = a[j], a[i] }

View File

@ -5,6 +5,8 @@ import (
"log"
"os"
"time"
"srs.epita.fr/fic-server/libfic"
)
type TSValue struct {
@ -32,7 +34,7 @@ func loadTS(tspath string) (timestamp map[string]*TSValue, err error) {
}
}
func loadTSFromAPI(teams map[string]*AirbusTeam) (timestamp map[string]*TSValue, err error) {
func loadTSFromAPI(teams map[string]*fic.CyberrangeTeam) (timestamp map[string]*TSValue, err error) {
now := time.Now()
timestamp = map[string]*TSValue{}

View File

@ -23,7 +23,7 @@ type Walker struct {
Exercices AirbusExercicesBindings
Teams map[string]fic.ExportedTeam
RevTeams map[string]string
TeamBindings map[string]*AirbusTeam
TeamBindings map[string]*fic.CyberrangeTeam
API AirbusAPI
Coeff float64
}
@ -35,7 +35,7 @@ func (w *Walker) fetchTeams() error {
}
w.RevTeams = map[string]string{}
w.TeamBindings = map[string]*AirbusTeam{}
w.TeamBindings = map[string]*fic.CyberrangeTeam{}
for tid, team := range w.Teams {
for i, t := range teams {
@ -143,7 +143,7 @@ func (w *Walker) WalkScore(path string, d os.DirEntry, err error) error {
return nil
}
func (w *Walker) TreatScoreGrid(path string, airbusTeam *AirbusTeam) error {
func (w *Walker) TreatScoreGrid(path string, airbusTeam *fic.CyberrangeTeam) error {
// Read score grid
fdscores, err := os.Open(path)
if err != nil {