2016-03-06 17:59:33 +00:00
package main
import (
"encoding/json"
2017-12-21 21:18:18 +00:00
"fmt"
2016-03-06 17:59:33 +00:00
"io/ioutil"
"log"
"math/rand"
"os"
"path"
"srs.epita.fr/fic-server/libfic"
)
2019-02-04 17:14:46 +00:00
var (
allowRegistration = false
canJoinTeam = false
)
2017-12-21 21:18:18 +00:00
type uTeamRegistration struct {
TeamName string
2019-02-04 17:14:46 +00:00
JTeam int64
2017-12-21 21:18:18 +00:00
Members [ ] fic . Member
}
2019-02-04 17:14:46 +00:00
func registrationProcess ( team fic . Team , members [ ] fic . Member , team_id string ) {
for _ , m := range members {
// Force Id to 0, as it shouldn't have been defined yet
m . Id = 0
if err := team . GainMember ( m ) ; err != nil {
log . Println ( "[WRN] Unable to add member (" , m , ") to team (" , team , "):" , err )
}
}
teamDirPath := fmt . Sprintf ( "%d" , team . Id )
// Create team directories into TEAMS
if err := os . MkdirAll ( path . Join ( TeamsDir , teamDirPath ) , 0777 ) ; err != nil {
log . Println ( "[ERR]" , err )
}
if err := os . Symlink ( teamDirPath , path . Join ( TeamsDir , team_id ) ) ; err != nil {
log . Println ( "[ERR]" , err )
}
go func ( ) {
if err := genTeamMyFile ( team ) ; err != nil {
log . Println ( "Team generation error: " , err )
}
if err := genTeamsFile ( ) ; err != nil {
log . Println ( "teams.json generation error: " , err )
}
} ( )
}
2018-01-21 13:07:44 +00:00
func treatRegistration ( pathname string , team_id string ) {
2017-12-21 21:18:18 +00:00
var nTeam uTeamRegistration
2016-03-06 17:59:33 +00:00
2019-02-04 17:14:46 +00:00
if ! allowRegistration {
log . Println ( "[ERR] Registration received, whereas disabled. Skipped." )
} else if cnt_raw , err := ioutil . ReadFile ( pathname ) ; err != nil {
2016-03-06 17:59:33 +00:00
log . Println ( "[ERR]" , err )
2017-12-21 21:18:18 +00:00
} else if err := json . Unmarshal ( cnt_raw , & nTeam ) ; err != nil {
2016-03-06 17:59:33 +00:00
log . Println ( "[ERR]" , err )
2019-02-04 17:14:46 +00:00
} else if nTeam . JTeam > 0 {
if ! canJoinTeam {
log . Println ( "[ERR] Join team received, whereas disabled. Skipped." )
} else if len ( nTeam . Members ) != 1 {
log . Printf ( "[ERR] Join team received, with incorrect member length: %d. Skipped.\n" , len ( nTeam . Members ) )
} else if team , err := fic . GetTeam ( nTeam . JTeam ) ; err != nil {
log . Printf ( "[ERR] Unable to join registered team %s: %s\n" , nTeam . JTeam , err )
} else {
registrationProcess ( team , nTeam . Members , team_id )
if err := os . Remove ( pathname ) ; err != nil {
log . Println ( "[WRN]" , err )
}
}
2017-12-21 21:18:18 +00:00
} else if validTeamName ( nTeam . TeamName ) {
2018-01-21 13:07:44 +00:00
if team , err := fic . CreateTeam ( nTeam . TeamName , uint32 ( rand . Int31n ( 16581376 ) ) ) ; err != nil {
2017-12-21 21:18:18 +00:00
log . Printf ( "[ERR] Unable to register new team %s: %s\n" , nTeam . TeamName , err )
2016-03-06 17:59:33 +00:00
} else {
2019-02-04 17:14:46 +00:00
registrationProcess ( team , nTeam . Members , team_id )
2017-12-21 21:18:18 +00:00
if err := os . Remove ( pathname ) ; err != nil {
log . Println ( "[WRN]" , err )
}
2019-01-17 18:50:16 +00:00
if _ , err := fic . NewEvent ( fmt . Sprintf ( "Souhaitons bonne chance à l'équipe <strong>%s</strong> qui vient de nous rejoindre !" , team . Name ) , "info" ) ; err != nil {
2017-12-21 21:18:18 +00:00
log . Println ( "[WRN] Unable to create event:" , err )
}
go func ( ) {
2018-01-23 00:16:25 +00:00
if err := genEventsFile ( ) ; err != nil {
log . Println ( "events.json generation error: " , err )
}
2017-12-21 21:18:18 +00:00
} ( )
2016-03-06 17:59:33 +00:00
}
}
}