Remove team's initial_name, replaced by their ID
authornemunaire <nemunaire@nemunai.re>
Sun, 21 Jan 2018 13:07:44 +0000 (14:07 +0100)
committernemunaire <nemunaire@nemunai.re>
Fri, 11 May 2018 03:27:50 +0000 (05:27 +0200)
admin/api/handlers.go
admin/api/team.go
admin/static/js/app.js
backend/generation.go
backend/main.go
backend/registration.go
libfic/db.go
libfic/member.go
libfic/team.go

index 854cbf215d364f9b3aed524d7a5dcc6b0f359d4b..e2ab1f00a0121dc6c279ebc348f73d31553f1cba 100644 (file)
@@ -81,11 +81,7 @@ func apiHandler(f DispatchFunction) func(http.ResponseWriter, *http.Request, htt
 func teamPublicHandler(f func(*fic.Team,[]byte) (interface{}, error)) func (httprouter.Params,[]byte) (interface{}, error) {
        return func (ps httprouter.Params, body []byte) (interface{}, error) {
                if tid, err := strconv.Atoi(string(ps.ByName("tid"))); err != nil {
-                       if team, err := fic.GetTeamByInitialName(ps.ByName("tid")); err != nil {
-                               return nil, err
-                       } else {
-                               return f(&team, body)
-                       }
+                       return nil, err
                } else if tid == 0 {
                        return f(nil, body)
                } else if team, err := fic.GetTeam(tid); err != nil {
@@ -99,11 +95,7 @@ func teamPublicHandler(f func(*fic.Team,[]byte) (interface{}, error)) func (http
 func teamHandler(f func(fic.Team,[]byte) (interface{}, error)) func (httprouter.Params,[]byte) (interface{}, error) {
        return func (ps httprouter.Params, body []byte) (interface{}, error) {
                if tid, err := strconv.Atoi(string(ps.ByName("tid"))); err != nil {
-                       if team, err := fic.GetTeamByInitialName(ps.ByName("tid")); err != nil {
-                               return nil, err
-                       } else {
-                               return f(team, body)
-                       }
+                       return nil, err
                } else if team, err := fic.GetTeam(tid); err != nil {
                        return nil, err
                } else {
index 02f64d426e0f11a784110c43cb597dacd8ff36b3..1ccecfb9ba86888e5b327810fc3dca5dab649e03 100644 (file)
@@ -19,9 +19,6 @@ func init() {
        router.GET("/api/teams-binding", apiHandler(
                func(httprouter.Params,[]byte) (interface{}, error) {
                        return bindingTeams() }))
-       router.GET("/api/teams-nginx", apiHandler(
-               func(httprouter.Params,[]byte) (interface{}, error) {
-                       return nginxGenTeam() }))
        router.GET("/api/teams-nginx-members", apiHandler(
                func(httprouter.Params,[]byte) (interface{}, error) {
                        return nginxGenMember() }))
@@ -73,12 +70,8 @@ func init() {
                        return team.GetMembers() })))
        router.POST("/api/teams/:tid/members", apiHandler(teamHandler(addTeamMember)))
        router.PUT("/api/teams/:tid/members", apiHandler(teamHandler(setTeamMember)))
-       router.GET("/api/teams/:tid/name", apiHandler(teamHandler(
-               func(team fic.Team, _ []byte) (interface{}, error) {
-                       return team.InitialName, nil })))
 
        router.GET("/api/members/:mid/team", apiHandler(dispMemberTeam))
-       router.GET("/api/members/:mid/team/name", apiHandler(dispMemberTeamName))
 }
 
 func nginxGenMember() (string, error) {
@@ -89,7 +82,7 @@ func nginxGenMember() (string, error) {
                for _, team := range teams {
                        if members, err := team.GetMembers(); err == nil {
                                for _, member := range members {
-                                       ret += fmt.Sprintf("        if ($remote_user = \"%s\") { set $team \"%s\"; }\n", member.Nickname, team.InitialName)
+                                       ret += fmt.Sprintf("        if ($remote_user = \"%s\") { set $team \"%s\"; }\n", member.Nickname, team.Id)
                                }
                        } else {
                                return "", err
@@ -100,19 +93,6 @@ func nginxGenMember() (string, error) {
        }
 }
 
-func nginxGenTeam() (string, error) {
-       if teams, err := fic.GetTeams(); err != nil {
-               return "", err
-       } else {
-               ret := ""
-               for _, team := range teams {
-                       ret += fmt.Sprintf("        if ($ssl_client_s_dn ~ \"/C=FR/ST=France/O=Epita/OU=SRS/CN=%s\") { set $team \"%s\"; }\n", team.InitialName, team.InitialName)
-               }
-
-               return ret, nil
-       }
-}
-
 func bindingTeams() (string, error) {
        if teams, err := fic.GetTeams(); err != nil {
                return "", err
@@ -204,16 +184,6 @@ func dispMemberTeam(ps httprouter.Params, body []byte) (interface{}, error) {
        }
 }
 
-func dispMemberTeamName(ps httprouter.Params, body []byte) (interface{}, error) {
-       if mid, err := strconv.Atoi(string(ps.ByName("mid"))); err != nil {
-               return nil, err
-       } else if team, err := fic.GetMember(mid); err != nil {
-               return nil, err
-       } else {
-               return team.InitialName, nil
-       }
-}
-
 
 type uploadedHistory struct {
        Kind      string
index 70d310b79fce92a8bc13403a6ce7d4ac1cbfb95c..986c1e9e50ab9fd0e91394a821bc44393fdf297a 100644 (file)
@@ -1041,7 +1041,7 @@ angular.module("FICApp")
 
     .controller("TeamsListController", function($scope, Team, $location) {
        $scope.teams = Team.query();
-       $scope.fields = ["id", "name", "initialName"];
+       $scope.fields = ["id", "name"];
 
        $scope.show = function(id) {
            $location.url("/teams/" + id);
index b126f97ec3936d2e3ac7a3931cc4f18352abbd07..dbeff3f30a208095ea2a08596a758d7d225b39a0 100644 (file)
@@ -22,7 +22,7 @@ func isStarted() bool {
 
 // Generate my.json and wait.json for a given team
 func genTeamMyFile(team fic.Team) error {
-       dirPath := path.Join(TeamsDir, team.InitialName)
+       dirPath := path.Join(TeamsDir, fmt.Sprintf("%d", team.Id))
 
        if s, err := os.Stat(dirPath); os.IsNotExist(err) {
                os.MkdirAll(dirPath, 0777)
index 9095d7a46c4ee6e5da2bb3e16f42d8d5c6fffea2..9085d146314e007ae48e07ee6b0f50f6f404af04 100644 (file)
@@ -7,6 +7,7 @@ import (
        "math/rand"
        "os"
        "path"
+       "strconv"
        "strings"
        "time"
 
@@ -142,7 +143,9 @@ func treat(raw_path string) {
        if len(spath) == 3 {
                if spath[1] == "_registration" {
                        treatRegistration(raw_path, spath[2])
-               } else if team, err := fic.GetTeamByInitialName(spath[1]); err != nil {
+               } else if teamid, err := strconv.Atoi(spath[1]); err != nil {
+                       log.Println("[ERR]", err)
+               } else if team, err := fic.GetTeam(teamid); err != nil {
                        log.Println("[ERR]", err)
                } else if spath[2] == "name" {
                        treatRename(raw_path, team)
index fad3bf5996b33072881ae1eb56882c1808dc631b..4cd4f9325467b27945716d7ae1edc59a5886f7d0 100644 (file)
@@ -17,7 +17,7 @@ type uTeamRegistration struct {
        Members  []fic.Member
 }
 
-func treatRegistration(pathname string, initial_name string) {
+func treatRegistration(pathname string, team_id string) {
        var nTeam uTeamRegistration
 
        if cnt_raw, err := ioutil.ReadFile(pathname); err != nil {
@@ -25,7 +25,7 @@ func treatRegistration(pathname string, initial_name string) {
        } else if err := json.Unmarshal(cnt_raw, &nTeam); err != nil {
                log.Println("[ERR]", err)
        } else if validTeamName(nTeam.TeamName) {
-               if team, err := fic.RegisterTeam(initial_name, nTeam.TeamName, uint32(rand.Int31n(16581376))); err != nil {
+               if team, err := fic.CreateTeam(nTeam.TeamName, uint32(rand.Int31n(16581376))); err != nil {
                        log.Printf("[ERR] Unable to register new team %s: %s\n", nTeam.TeamName, err)
                } else {
                        for _, m := range nTeam.Members {
@@ -43,8 +43,13 @@ func treatRegistration(pathname string, initial_name string) {
                                log.Println("[WRN] Unable to create event:", err)
                        }
 
-                       os.MkdirAll(path.Join(SubmissionDir, team.InitialName), 0777)
-                       os.MkdirAll(path.Join(TeamsDir, team.InitialName), 0777)
+                       teamDirPath := path.Join(TeamsDir, fmt.Sprintf("%d", team.Id))
+                       if err := os.MkdirAll(teamDirPath, 0777); err != nil {
+                               log.Println("[ERR]", err)
+                       }
+                       if err := os.Symlink(teamDirPath, path.Join(TeamsDir, fmt.Sprintf("_AUTH_ID_%s", team_id))); err != nil {
+                               log.Println("[ERR]", err)
+                       }
 
                        go func() {
                                if err := genTeamMyFile(team); err != nil {
index dddfc20805489142d3a5ed77c7a8f107e0071349..14f0359c924817399a72fc0c4189b3117a9b82de 100644 (file)
@@ -76,7 +76,6 @@ CREATE TABLE IF NOT EXISTS themes(
        if _, err := db.Exec(`
 CREATE TABLE IF NOT EXISTS teams(
   id_team INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
-  initial_name VARCHAR(255) NOT NULL UNIQUE,
   name VARCHAR(255) NOT NULL,
   color INTEGER NOT NULL
 ) DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin;
index 0286603ac16285bb9c5de6d0de98a63f69131c27..0dbe5ea20397e5c0ac24db12c46d1023b0f5830c 100644 (file)
@@ -12,7 +12,7 @@ type Member struct {
 
 func GetMember(cnt int) (Team, error) {
        var t Team
-       if err := DBQueryRow("SELECT T.id_team, T.initial_name, T.name, T.color FROM team_members M RIGHT OUTER JOIN teams T ON T.id_team = M.id_team LIMIT ?, 1", cnt - 1).Scan(&t.Id, &t.InitialName, &t.Name, &t.Color); err != nil {
+       if err := DBQueryRow("SELECT T.id_team, T.name, T.color FROM team_members M RIGHT OUTER JOIN teams T ON T.id_team = M.id_team LIMIT ?, 1", cnt - 1).Scan(&t.Id, &t.Name, &t.Color); err != nil {
                return t, err
        }
 
index ecfe2bc1ed2fb57c1e7feea4bd60aafa10eb0e8c..c24951be266e4b59335fbf2a96b651f80c586c81 100644 (file)
@@ -1,7 +1,6 @@
 package fic
 
 import (
-       "regexp"
        "time"
 )
 
@@ -9,7 +8,6 @@ var UnlockedChallenges bool
 
 type Team struct {
        Id          int64  `json:"id"`
-       InitialName string `json:"initialName"`
        Name        string `json:"name"`
        Color       uint32 `json:"color"`
 }
@@ -17,7 +15,7 @@ type Team struct {
 // Access functions
 
 func GetTeams() ([]Team, error) {
-       if rows, err := DBQuery("SELECT id_team, initial_name, name, color FROM teams"); err != nil {
+       if rows, err := DBQuery("SELECT id_team, name, color FROM teams"); err != nil {
                return nil, err
        } else {
                defer rows.Close()
@@ -25,7 +23,7 @@ func GetTeams() ([]Team, error) {
                var teams = make([]Team, 0)
                for rows.Next() {
                        var t Team
-                       if err := rows.Scan(&t.Id, &t.InitialName, &t.Name, &t.Color); err != nil {
+                       if err := rows.Scan(&t.Id, &t.Name, &t.Color); err != nil {
                                return nil, err
                        }
                        teams = append(teams, t)
@@ -40,16 +38,16 @@ func GetTeams() ([]Team, error) {
 
 func GetTeam(id int) (Team, error) {
        var t Team
-       if err := DBQueryRow("SELECT id_team, initial_name, name, color FROM teams WHERE id_team = ?", id).Scan(&t.Id, &t.InitialName, &t.Name, &t.Color); err != nil {
+       if err := DBQueryRow("SELECT id_team, name, color FROM teams WHERE id_team = ?", id).Scan(&t.Id, &t.Name, &t.Color); err != nil {
                return t, err
        }
 
        return t, nil
 }
 
-func GetTeamByInitialName(initialName string) (Team, error) {
+func GetTeamBySerial(serial int64) (Team, error) {
        var t Team
-       if err := DBQueryRow("SELECT id_team, initial_name, name, color FROM teams WHERE initial_name = ?", initialName).Scan(&t.Id, &t.InitialName, &t.Name, &t.Color); err != nil {
+       if err := DBQueryRow("SELECT T.id_team, T.name, T.color FROM certificates C INNER JOIN teams T ON T.id_team = C.id_team WHERE id_cert = ?", serial).Scan(&t.Id, &t.Name, &t.Color); err != nil {
                return t, err
        }
 
@@ -60,18 +58,12 @@ func GetTeamByInitialName(initialName string) (Team, error) {
 // CRUD method
 
 func CreateTeam(name string, color uint32) (Team, error) {
-       re := regexp.MustCompile("[^a-zA-Z0-9]+")
-       initialName := re.ReplaceAllLiteralString(name, "_")
-       return RegisterTeam(initialName, name, color)
-}
-
-func RegisterTeam(initialName string, name string, color uint32) (Team, error) {
-       if res, err := DBExec("INSERT INTO teams (initial_name, name, color) VALUES (?, ?, ?)", initialName, name, color); err != nil {
+       if res, err := DBExec("INSERT INTO teams (name, color) VALUES (?, ?)", name, color); err != nil {
                return Team{}, err
        } else if tid, err := res.LastInsertId(); err != nil {
                return Team{}, err
        } else {
-               return Team{tid, name, name, color}, nil
+               return Team{tid, name, color}, nil
        }
 }