admin/api: use gorilla/mux instead of Go router
This commit is contained in:
parent
0e30259b7e
commit
1054dd7086
18 changed files with 642 additions and 762 deletions
156
admin/api/team.go
Normal file
156
admin/api/team.go
Normal file
|
@ -0,0 +1,156 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"srs.epita.fr/fic-server/libfic"
|
||||
)
|
||||
|
||||
func init() {
|
||||
rts := router.PathPrefix("/teams").Subrouter()
|
||||
router.Path("/teams.json").Methods("GET").HandlerFunc(apiHandler(
|
||||
func(map[string]string,[]byte) (interface{}, error) {
|
||||
return fic.ExportTeams() }))
|
||||
rts.Path("/").Methods("GET").HandlerFunc(apiHandler(
|
||||
func(map[string]string,[]byte) (interface{}, error) {
|
||||
return fic.GetTeams() }))
|
||||
rts.Path("/binding").Methods("GET").HandlerFunc(apiHandler(
|
||||
func(map[string]string,[]byte) (interface{}, error) {
|
||||
return bindingTeams() }))
|
||||
rts.Path("/nginx").Methods("GET").HandlerFunc(apiHandler(
|
||||
func(map[string]string,[]byte) (interface{}, error) {
|
||||
return nginxGenTeam() }))
|
||||
rts.Path("/nginx-members").Methods("GET").HandlerFunc(apiHandler(
|
||||
func(map[string]string,[]byte) (interface{}, error) {
|
||||
return nginxGenMember() }))
|
||||
rts.Path("/binding").Methods("GET").HandlerFunc(apiHandler(
|
||||
func(map[string]string,[]byte) (interface{}, error) {
|
||||
return fic.GetTries(nil, nil) }))
|
||||
|
||||
rts.Path("/0/my.json").Methods("GET").HandlerFunc(apiHandler(
|
||||
func(map[string]string,[]byte) (interface{}, error) {
|
||||
return fic.MyJSONTeam(nil, true) }))
|
||||
rts.Path("/0/wait.json").Methods("GET").HandlerFunc(apiHandler(
|
||||
func(map[string]string,[]byte) (interface{}, error) {
|
||||
return fic.MyJSONTeam(nil, false) }))
|
||||
rts.Path("/0/stats.json").Methods("GET").HandlerFunc(apiHandler(
|
||||
func(map[string]string,[]byte) (interface{}, error) {
|
||||
return fic.GetTeamsStats(nil) }))
|
||||
rts.Path("/0/tries").Methods("GET").HandlerFunc(apiHandler(
|
||||
func(map[string]string,[]byte) (interface{}, error) {
|
||||
return fic.GetTries(nil, nil) }))
|
||||
|
||||
rt := rts.PathPrefix("/{tid}").Subrouter()
|
||||
rt.Path("/").Methods("GET").HandlerFunc(apiHandler(teamHandler(
|
||||
func(team fic.Team, args map[string]string, body []byte) (interface{}, error) {
|
||||
return team, nil })))
|
||||
rt.Path("/").Methods("DELETE").HandlerFunc(apiHandler(teamHandler(
|
||||
func(team fic.Team, args map[string]string, body []byte) (interface{}, error) {
|
||||
return team.Delete() })))
|
||||
rt.Path("/my.json").Methods("GET").HandlerFunc(apiHandler(teamHandler(
|
||||
func(team fic.Team, args map[string]string, body []byte) (interface{}, error) {
|
||||
return fic.MyJSONTeam(&team, true) })))
|
||||
rt.Path("/wait.json").Methods("GET").HandlerFunc(apiHandler(teamHandler(
|
||||
func(team fic.Team, args map[string]string, body []byte) (interface{}, error) {
|
||||
return fic.MyJSONTeam(&team, false) })))
|
||||
rt.Path("/stats.json").Methods("GET").HandlerFunc(apiHandler(teamHandler(
|
||||
func(team fic.Team, args map[string]string, body []byte) (interface{}, error) {
|
||||
return team.GetStats() })))
|
||||
rt.Path("/tries").Methods("GET").HandlerFunc(apiHandler(teamHandler(
|
||||
func(team fic.Team, args map[string]string, body []byte) (interface{}, error) {
|
||||
return fic.GetTries(&team, nil) })))
|
||||
rt.Path("/members").Methods("GET").HandlerFunc(apiHandler(teamHandler(
|
||||
func(team fic.Team, args map[string]string, body []byte) (interface{}, error) {
|
||||
return team.GetMembers() })))
|
||||
rt.Path("/name").Methods("GET").HandlerFunc(apiHandler(teamHandler(
|
||||
func(team fic.Team, args map[string]string, body []byte) (interface{}, error) {
|
||||
return team.Name, nil })))
|
||||
}
|
||||
|
||||
func nginxGenMember() (string, error) {
|
||||
if teams, err := fic.GetTeams(); err != nil {
|
||||
return "", err
|
||||
} else {
|
||||
ret := ""
|
||||
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)
|
||||
}
|
||||
} else {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
} else {
|
||||
ret := ""
|
||||
for _, team := range teams {
|
||||
if members, err := team.GetMembers(); err != nil {
|
||||
return "", err
|
||||
} else {
|
||||
var mbs []string
|
||||
for _, member := range members {
|
||||
mbs = append(mbs, fmt.Sprintf("%s %s", member.Firstname, member.Lastname))
|
||||
}
|
||||
ret += fmt.Sprintf("%d;%s;%s\n", team.Id, team.Name, strings.Join(mbs, ";"))
|
||||
}
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
}
|
||||
|
||||
type uploadedTeam struct {
|
||||
Name string
|
||||
Color uint32
|
||||
}
|
||||
|
||||
type uploadedMember struct {
|
||||
Firstname string
|
||||
Lastname string
|
||||
Nickname string
|
||||
Company string
|
||||
}
|
||||
|
||||
func createTeam(args map[string]string, body []byte) (interface{}, error) {
|
||||
var ut uploadedTeam
|
||||
if err := json.Unmarshal(body, &ut); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return fic.CreateTeam(ut.Name, ut.Color)
|
||||
}
|
||||
|
||||
func addTeamMember(team fic.Team, args map[string]string, body []byte) (interface{}, error) {
|
||||
var members []uploadedMember
|
||||
if err := json.Unmarshal(body, &members); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, member := range members {
|
||||
team.AddMember(member.Firstname, member.Lastname, member.Nickname, member.Company)
|
||||
}
|
||||
|
||||
return team.GetMembers()
|
||||
}
|
Reference in a new issue