Use pointer instead of struct
This commit is contained in:
parent
853477e54a
commit
6d8f38d749
18 changed files with 187 additions and 142 deletions
|
@ -27,7 +27,7 @@ func init() {
|
|||
router.POST("/api/auth/logout", apiRawHandler(logout))
|
||||
}
|
||||
|
||||
func validateAuthToken(s adlin.Student, _ httprouter.Params, _ []byte) (interface{}, error) {
|
||||
func validateAuthToken(s *adlin.Student, _ httprouter.Params, _ []byte) (interface{}, error) {
|
||||
return s, nil
|
||||
}
|
||||
|
||||
|
@ -50,7 +50,7 @@ type loginForm struct {
|
|||
}
|
||||
|
||||
func completeAuth(w http.ResponseWriter, username string, session *adlin.Session) (err error) {
|
||||
var std adlin.Student
|
||||
var std *adlin.Student
|
||||
if !adlin.StudentExists(username) {
|
||||
if std, err = adlin.NewStudent(username); err != nil {
|
||||
return err
|
||||
|
@ -60,9 +60,7 @@ func completeAuth(w http.ResponseWriter, username string, session *adlin.Session
|
|||
}
|
||||
|
||||
if session == nil {
|
||||
var s adlin.Session
|
||||
s, err = std.NewSession()
|
||||
session = &s
|
||||
session, err = std.NewSession()
|
||||
} else {
|
||||
_, err = session.SetStudent(std)
|
||||
}
|
||||
|
|
|
@ -111,7 +111,7 @@ func OIDC_CRI_complete(w http.ResponseWriter, r *http.Request, ps httprouter.Par
|
|||
return
|
||||
}
|
||||
|
||||
if err := completeAuth(w, claims.Username, &session); err != nil {
|
||||
if err := completeAuth(w, claims.Username, session); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -338,7 +338,7 @@ func receiveChallenge(r *http.Request, ps httprouter.Params, body []byte) (inter
|
|||
return nil, errors.New("This is not the expected token.")
|
||||
}
|
||||
|
||||
var std adlin.Student
|
||||
var std *adlin.Student
|
||||
|
||||
if stdid, err := strconv.Atoi(gt.Login); err == nil {
|
||||
if std, err = adlin.GetStudent(stdid); err != nil {
|
||||
|
@ -388,7 +388,7 @@ func receiveToken(r *http.Request, body []byte, chid int) (interface{}, error) {
|
|||
if std, err := adlin.GetStudentByLogin(gt.Login); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if err := challenges[chid-1].Check(&std, >, chid); err != nil {
|
||||
if err := challenges[chid-1].Check(std, >, chid); err != nil {
|
||||
log.Printf("%s just try ch#%d: %s\n", std.Login, chid, err)
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ type checkGLUE struct {
|
|||
}
|
||||
|
||||
func init() {
|
||||
router.POST("/api/check/GLUE", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.POST("/api/check/GLUE", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
var uc checkGLUE
|
||||
if err := json.Unmarshal(body, &uc); err != nil {
|
||||
return nil, err
|
||||
|
@ -27,7 +27,7 @@ func init() {
|
|||
return true, check_GLUE_respond(student, uc.Domain, uc.IP)
|
||||
}))
|
||||
}
|
||||
func check_GLUE_respond(student adlin.Student, domain string, ip string) (err error) {
|
||||
func check_GLUE_respond(student *adlin.Student, domain string, ip string) (err error) {
|
||||
if !strings.HasPrefix(ip, adlin.StudentIP(student.Id).String()) {
|
||||
return fmt.Errorf("%q is not your IP range")
|
||||
}
|
||||
|
|
|
@ -22,10 +22,10 @@ var (
|
|||
)
|
||||
|
||||
func init() {
|
||||
router.GET("/api/adomains/", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.GET("/api/adomains/", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
return student.GetAssociatedDomains(), nil
|
||||
}))
|
||||
router.POST("/api/adomains/", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.POST("/api/adomains/", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
ue := &struct {
|
||||
Domain string `json:"domain"`
|
||||
A string `json:"a"`
|
||||
|
@ -63,14 +63,14 @@ func init() {
|
|||
return true, AddAssociatedDomains(student, aaaa)
|
||||
}
|
||||
}))
|
||||
router.GET("/api/adomains/:dn", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.GET("/api/adomains/:dn", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
return GetAssociatedDomain(student, ps.ByName("dn"))
|
||||
}))
|
||||
|
||||
router.GET("/api/ddomains/", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.GET("/api/ddomains/", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
return []string{student.MyDelegatedDomain()}, nil
|
||||
}))
|
||||
router.POST("/api/ddomains/", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.POST("/api/ddomains/", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
ue := &struct {
|
||||
NS string `json:"ns"`
|
||||
}{}
|
||||
|
@ -98,75 +98,75 @@ func init() {
|
|||
return true, nil
|
||||
}
|
||||
}))
|
||||
router.GET("/api/ddomains/:dn/", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.GET("/api/ddomains/:dn/", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
return getRRDelegatedDomain(student, ps.ByName("dn"), "")
|
||||
}))
|
||||
router.GET("/api/ddomains/:dn/NS", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.GET("/api/ddomains/:dn/NS", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
return getRRDelegatedDomain(student, ps.ByName("dn"), "NS")
|
||||
}))
|
||||
router.POST("/api/ddomains/:dn/NS", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.POST("/api/ddomains/:dn/NS", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
var ue Entry
|
||||
if err := json.Unmarshal(body, &ue); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return true, AddNSDelegatedDomain(student, ps.ByName("dn"), ue.TTL, strings.Join(ue.Values, " "))
|
||||
}))
|
||||
router.PATCH("/api/ddomains/:dn/NS", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.PATCH("/api/ddomains/:dn/NS", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
var ue Entry
|
||||
if err := json.Unmarshal(body, &ue); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return true, UpdateNSDelegatedDomain(student, ps.ByName("dn"), ue.TTL, ue.ValuesFrom, strings.Join(ue.Values, ""))
|
||||
}))
|
||||
router.DELETE("/api/ddomains/:dn/NS", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.DELETE("/api/ddomains/:dn/NS", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
var ue Entry
|
||||
if err := json.Unmarshal(body, &ue); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return true, DeleteRRDelegatedDomain(student, ps.ByName("dn"), "NS", strings.Join(ue.Values, " "))
|
||||
}))
|
||||
router.GET("/api/ddomains/:dn/GLUE", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.GET("/api/ddomains/:dn/GLUE", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
return getRRDelegatedDomain(student, ps.ByName("dn"), "AAAA")
|
||||
}))
|
||||
router.POST("/api/ddomains/:dn/AAAA", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.POST("/api/ddomains/:dn/AAAA", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
var ue Entry
|
||||
if err := json.Unmarshal(body, &ue); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return true, AddGLUEDelegatedDomain(student, ps.ByName("dn"), ue.TTL, strings.Join(ue.Values, " "))
|
||||
}))
|
||||
router.PATCH("/api/ddomains/:dn/AAAA", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.PATCH("/api/ddomains/:dn/AAAA", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
var ue Entry
|
||||
if err := json.Unmarshal(body, &ue); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return true, UpdateGLUEDelegatedDomain(student, ps.ByName("dn"), ue.TTL, ue.ValuesFrom, strings.Join(ue.Values, " "))
|
||||
}))
|
||||
router.POST("/api/ddomains/:dn/GLUE", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.POST("/api/ddomains/:dn/GLUE", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
var ue Entry
|
||||
if err := json.Unmarshal(body, &ue); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return true, UpdateGLUEDelegatedDomain(student, ps.ByName("dn"), ue.TTL, ue.ValuesFrom, strings.Join(ue.Values, " "))
|
||||
}))
|
||||
router.DELETE("/api/ddomains/:dn/AAAA", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.DELETE("/api/ddomains/:dn/AAAA", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
var ue Entry
|
||||
if err := json.Unmarshal(body, &ue); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return true, DeleteRRDelegatedDomain(student, ps.ByName("dn"), "AAAA", strings.Join(ue.Values, " "))
|
||||
}))
|
||||
router.GET("/api/ddomains/:dn/DS", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.GET("/api/ddomains/:dn/DS", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
return getRRDelegatedDomain(student, ps.ByName("dn"), "DS")
|
||||
}))
|
||||
router.POST("/api/ddomains/:dn/DS", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.POST("/api/ddomains/:dn/DS", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
var ue Entry
|
||||
if err := json.Unmarshal(body, &ue); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return true, AddDSDelegatedDomain(student, ps.ByName("dn"), ue.TTL, strings.Join(ue.Values, " "))
|
||||
}))
|
||||
router.DELETE("/api/ddomains/:dn/DS", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.DELETE("/api/ddomains/:dn/DS", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
var ue Entry
|
||||
if err := json.Unmarshal(body, &ue); err != nil {
|
||||
return nil, err
|
||||
|
@ -223,7 +223,7 @@ func parseZoneRead(globalDomain string, domain string) (rr []Entry, err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func GetAssociatedDomain(student adlin.Student, dn string) (rrs []Entry, err error) {
|
||||
func GetAssociatedDomain(student *adlin.Student, dn string) (rrs []Entry, err error) {
|
||||
domains := student.GetAssociatedDomains()
|
||||
found := false
|
||||
for _, d := range domains {
|
||||
|
@ -249,7 +249,7 @@ func GetAssociatedDomain(student adlin.Student, dn string) (rrs []Entry, err err
|
|||
return
|
||||
}
|
||||
|
||||
func delAssociatedDomains(student adlin.Student, dn string) (err error) {
|
||||
func delAssociatedDomains(student *adlin.Student, dn string) (err error) {
|
||||
var adomains []Entry
|
||||
adomains, err = GetAssociatedDomain(student, dn)
|
||||
if err != nil {
|
||||
|
@ -286,7 +286,7 @@ func delAssociatedDomains(student adlin.Student, dn string) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func AddAssociatedDomains(student adlin.Student, aaaa net.IP) (err error) {
|
||||
func AddAssociatedDomains(student *adlin.Student, aaaa net.IP) (err error) {
|
||||
err = delAssociatedDomains(student, student.DefaultAssociatedDomain())
|
||||
if err != nil {
|
||||
return
|
||||
|
@ -322,7 +322,7 @@ func AddAssociatedDomains(student adlin.Student, aaaa net.IP) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func getRRDelegatedDomain(student adlin.Student, dn string, rr string) (rrs []Entry, err error) {
|
||||
func getRRDelegatedDomain(student *adlin.Student, dn string, rr string) (rrs []Entry, err error) {
|
||||
domains := []string{student.MyDelegatedDomain()}
|
||||
found := false
|
||||
for _, d := range domains {
|
||||
|
@ -348,7 +348,7 @@ func getRRDelegatedDomain(student adlin.Student, dn string, rr string) (rrs []En
|
|||
return
|
||||
}
|
||||
|
||||
func AddNSDelegatedDomain(student adlin.Student, dn string, ttl uint32, ns string) (err error) {
|
||||
func AddNSDelegatedDomain(student *adlin.Student, dn string, ttl uint32, ns string) (err error) {
|
||||
for _, d := range []string{student.MyDelegatedDomain()} {
|
||||
m1 := new(dns.Msg)
|
||||
m1.Id = dns.Id()
|
||||
|
@ -371,7 +371,7 @@ func AddNSDelegatedDomain(student adlin.Student, dn string, ttl uint32, ns strin
|
|||
return
|
||||
}
|
||||
|
||||
func UpdateNSDelegatedDomain(student adlin.Student, dn string, ttl uint32, oldns string, ns string) (err error) {
|
||||
func UpdateNSDelegatedDomain(student *adlin.Student, dn string, ttl uint32, oldns string, ns string) (err error) {
|
||||
for _, d := range []string{student.MyDelegatedDomain()} {
|
||||
m1 := new(dns.Msg)
|
||||
m1.Id = dns.Id()
|
||||
|
@ -399,7 +399,7 @@ func UpdateNSDelegatedDomain(student adlin.Student, dn string, ttl uint32, oldns
|
|||
return
|
||||
}
|
||||
|
||||
func AddGLUEDelegatedDomain(student adlin.Student, dn string, ttl uint32, aaaa string) (err error) {
|
||||
func AddGLUEDelegatedDomain(student *adlin.Student, dn string, ttl uint32, aaaa string) (err error) {
|
||||
domains := []string{student.MyDelegatedDomain()}
|
||||
found := false
|
||||
for _, d := range domains {
|
||||
|
@ -435,7 +435,7 @@ func AddGLUEDelegatedDomain(student adlin.Student, dn string, ttl uint32, aaaa s
|
|||
return
|
||||
}
|
||||
|
||||
func UpdateGLUEDelegatedDomain(student adlin.Student, dn string, ttl uint32, oldaaaa string, aaaa string) (err error) {
|
||||
func UpdateGLUEDelegatedDomain(student *adlin.Student, dn string, ttl uint32, oldaaaa string, aaaa string) (err error) {
|
||||
domains := []string{student.MyDelegatedDomain()}
|
||||
found := false
|
||||
for _, d := range domains {
|
||||
|
@ -477,7 +477,7 @@ func UpdateGLUEDelegatedDomain(student adlin.Student, dn string, ttl uint32, old
|
|||
return
|
||||
}
|
||||
|
||||
func AddDSDelegatedDomain(student adlin.Student, dn string, ttl uint32, rdata string) (err error) {
|
||||
func AddDSDelegatedDomain(student *adlin.Student, dn string, ttl uint32, rdata string) (err error) {
|
||||
domains := []string{student.MyDelegatedDomain()}
|
||||
found := false
|
||||
for _, d := range domains {
|
||||
|
@ -527,7 +527,7 @@ func AddDSDelegatedDomain(student adlin.Student, dn string, ttl uint32, rdata st
|
|||
return
|
||||
}
|
||||
|
||||
func DeleteRRDelegatedDomain(student adlin.Student, dn string, rr string, values ...string) (err error) {
|
||||
func DeleteRRDelegatedDomain(student *adlin.Student, dn string, rr string, values ...string) (err error) {
|
||||
domains := []string{student.MyDelegatedDomain()}
|
||||
found := false
|
||||
for _, d := range domains {
|
||||
|
|
|
@ -65,7 +65,7 @@ func rawHandler(f func(http.ResponseWriter, *http.Request, httprouter.Params, []
|
|||
http.Error(w, fmt.Sprintf(`{"errmsg": %q}`, err), http.StatusUnauthorized)
|
||||
return
|
||||
} else {
|
||||
student = &std
|
||||
student = std
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -158,7 +158,7 @@ func apiHandler(f DispatchFunction, access ...func(*adlin.Student, *http.Request
|
|||
return rawHandler(responseHandler(func(_ *http.Request, ps httprouter.Params, b []byte) (interface{}, error) { return f(ps, b) }), access...)
|
||||
}
|
||||
|
||||
func apiAuthHandler(f func(adlin.Student, httprouter.Params, []byte) (interface{}, error), access ...func(*adlin.Student, *http.Request) error) func(http.ResponseWriter, *http.Request, httprouter.Params) {
|
||||
func apiAuthHandler(f func(*adlin.Student, httprouter.Params, []byte) (interface{}, error), access ...func(*adlin.Student, *http.Request) error) func(http.ResponseWriter, *http.Request, httprouter.Params) {
|
||||
return rawHandler(responseHandler(func(r *http.Request, ps httprouter.Params, b []byte) (interface{}, error) {
|
||||
if cookie, err := r.Cookie("auth"); err != nil {
|
||||
return nil, errors.New("Authorization required")
|
||||
|
@ -176,7 +176,7 @@ func apiAuthHandler(f func(adlin.Student, httprouter.Params, []byte) (interface{
|
|||
}), access...)
|
||||
}
|
||||
|
||||
func studentHandler(f func(adlin.Student, []byte) (interface{}, error)) func(httprouter.Params, []byte) (interface{}, error) {
|
||||
func studentHandler(f func(*adlin.Student, []byte) (interface{}, error)) func(httprouter.Params, []byte) (interface{}, error) {
|
||||
return func(ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
if sid, err := strconv.Atoi(string(ps.ByName("sid"))); err != nil {
|
||||
if student, err := adlin.GetStudentByLogin(ps.ByName("sid")); err != nil {
|
||||
|
|
|
@ -12,12 +12,12 @@ import (
|
|||
|
||||
func init() {
|
||||
router.GET("/api/ips", apiHandler(showIPs))
|
||||
router.GET("/api/students/:sid/ips", apiHandler(studentHandler(func(student adlin.Student, body []byte) (interface{}, error) {
|
||||
router.GET("/api/students/:sid/ips", apiHandler(studentHandler(func(student *adlin.Student, body []byte) (interface{}, error) {
|
||||
return getStudentIPs(student), nil
|
||||
})))
|
||||
}
|
||||
|
||||
func IPSuffix(s adlin.Student, network net.IPNet) net.IP {
|
||||
func IPSuffix(s *adlin.Student, network net.IPNet) net.IP {
|
||||
ipshift := s.Id*4 + 10
|
||||
|
||||
myIP := network.IP
|
||||
|
@ -55,7 +55,7 @@ func showIPs(_ httprouter.Params, body []byte) (interface{}, error) {
|
|||
return r, nil
|
||||
}
|
||||
|
||||
func GetStudentTunnelIPs(student adlin.Student) (ips []string) {
|
||||
func GetStudentTunnelIPs(student *adlin.Student) (ips []string) {
|
||||
if ts, err := student.GetActivesTunnels(); err != nil || len(ts) == 0 || ts[0].SuffixIP == 0 {
|
||||
ips = append(ips, adlin.StudentIP(student.Id).String()+"1")
|
||||
} else {
|
||||
|
@ -66,7 +66,7 @@ func GetStudentTunnelIPs(student adlin.Student) (ips []string) {
|
|||
return
|
||||
}
|
||||
|
||||
func getStudentIPs(student adlin.Student) (r map[string]string) {
|
||||
func getStudentIPs(student *adlin.Student) (r map[string]string) {
|
||||
r = make(map[string]string)
|
||||
|
||||
r["vlan0"] = IPSuffix(student, net.IPNet{net.ParseIP("172.23.0.0"), net.CIDRMask(17, 32)}).String()
|
||||
|
|
|
@ -11,13 +11,13 @@ var PongSecret = "felixfixit"
|
|||
|
||||
func init() {
|
||||
router.GET("/api/students/:sid/ping", apiHandler(studentHandler(lastPing)))
|
||||
router.GET("/api/students/:sid/pong", apiHandler(studentHandler(func(student adlin.Student, body []byte) (interface{}, error) {
|
||||
router.GET("/api/students/:sid/pong", apiHandler(studentHandler(func(student *adlin.Student, body []byte) (interface{}, error) {
|
||||
return student.LastPongs()
|
||||
})))
|
||||
router.POST("/api/students/:sid/pong", apiHandler(studentHandler(stdPong), sslOnly))
|
||||
}
|
||||
|
||||
func lastPing(student adlin.Student, body []byte) (interface{}, error) {
|
||||
func lastPing(student *adlin.Student, body []byte) (interface{}, error) {
|
||||
if pongs, err := student.LastPongs(); err != nil {
|
||||
return nil, err
|
||||
} else if len(pongs) <= 0 {
|
||||
|
@ -27,7 +27,7 @@ func lastPing(student adlin.Student, body []byte) (interface{}, error) {
|
|||
}
|
||||
}
|
||||
|
||||
func stdPong(student adlin.Student, body []byte) (interface{}, error) {
|
||||
func stdPong(student *adlin.Student, body []byte) (interface{}, error) {
|
||||
var gt givenToken
|
||||
if err := json.Unmarshal(body, >); err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -47,7 +47,7 @@ func init() {
|
|||
})
|
||||
}
|
||||
|
||||
func hasSSHKeys(student adlin.Student, body []byte) (interface{}, error) {
|
||||
func hasSSHKeys(student *adlin.Student, body []byte) (interface{}, error) {
|
||||
if keys, err := student.GetKeys(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
|
@ -141,7 +141,7 @@ func dumpAuthorizedKeysFile(w io.Writer) {
|
|||
}
|
||||
}
|
||||
|
||||
func dumpStdAuthorizedKeysFile(s adlin.Student, w io.Writer) {
|
||||
func dumpStdAuthorizedKeysFile(s *adlin.Student, w io.Writer) {
|
||||
seen := map[string]interface{}{}
|
||||
|
||||
if keys, _ := s.GetKeys(); keys != nil {
|
||||
|
|
|
@ -18,19 +18,19 @@ func init() {
|
|||
if stds, err := adlin.GetStudents(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
ret := map[string]map[string]adlin.UnlockedChallenge{}
|
||||
ret := map[string]map[string]*adlin.UnlockedChallenge{}
|
||||
for _, std := range stds {
|
||||
if sts, err := std.GetStates(); err == nil {
|
||||
ret[std.Login] = map[string]adlin.UnlockedChallenge{}
|
||||
ret[std.Login] = map[string]*adlin.UnlockedChallenge{}
|
||||
|
||||
for _, s := range sts {
|
||||
ret[std.Login][fmt.Sprintf("%d", s.Challenge)] = s
|
||||
}
|
||||
|
||||
if pongs, err := std.LastPongs(); err == nil && len(pongs) > 0 {
|
||||
ret[std.Login]["ping"] = adlin.UnlockedChallenge{
|
||||
ret[std.Login]["ping"] = &adlin.UnlockedChallenge{
|
||||
IdStudent: std.Id,
|
||||
Time: pongs[0].Date,
|
||||
Time: &pongs[0].Date,
|
||||
Value: pongs[0].State,
|
||||
}
|
||||
} else if err != nil {
|
||||
|
@ -47,17 +47,17 @@ func init() {
|
|||
}))
|
||||
router.POST("/api/students/", remoteValidatorHandler(apiHandler(createStudent)))
|
||||
router.GET("/api/students/:sid/", apiHandler(studentHandler(
|
||||
func(std adlin.Student, _ []byte) (interface{}, error) {
|
||||
func(std *adlin.Student, _ []byte) (interface{}, error) {
|
||||
return std, nil
|
||||
})))
|
||||
router.PUT("/api/students/:sid/", remoteValidatorHandler(apiHandler(studentHandler(updateStudent))))
|
||||
router.DELETE("/api/students/:sid/", remoteValidatorHandler(apiHandler(studentHandler(
|
||||
func(std adlin.Student, _ []byte) (interface{}, error) {
|
||||
func(std *adlin.Student, _ []byte) (interface{}, error) {
|
||||
return std.Delete()
|
||||
}))))
|
||||
router.GET("/api/students/:sid/progress", apiHandler(studentHandler(
|
||||
func(std adlin.Student, _ []byte) (interface{}, error) {
|
||||
ret := map[string]adlin.UnlockedChallenge{}
|
||||
func(std *adlin.Student, _ []byte) (interface{}, error) {
|
||||
ret := map[string]*adlin.UnlockedChallenge{}
|
||||
|
||||
if sts, err := std.GetStates(); err == nil {
|
||||
for _, s := range sts {
|
||||
|
@ -65,6 +65,20 @@ func init() {
|
|||
}
|
||||
}
|
||||
|
||||
if cerrors, err := std.GetChallengeErrors(); err == nil {
|
||||
for _, cerr := range cerrors {
|
||||
if _, ok := ret[fmt.Sprintf("%d", cerr.Challenge)]; ok {
|
||||
ret[fmt.Sprintf("%d", cerr.Challenge)].Error = cerr.Error
|
||||
ret[fmt.Sprintf("%d", cerr.Challenge)].LastCheck = &cerr.Time
|
||||
} else {
|
||||
ret[fmt.Sprintf("%d", cerr.Challenge)] = &adlin.UnlockedChallenge{
|
||||
LastCheck: &cerr.Time,
|
||||
Error: cerr.Error,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
})))
|
||||
}
|
||||
|
@ -82,7 +96,7 @@ func createStudent(_ httprouter.Params, body []byte) (interface{}, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
var exist adlin.Student
|
||||
var exist *adlin.Student
|
||||
if exist, err = adlin.GetStudentByLogin(strings.TrimSpace(std.Login)); err != nil {
|
||||
if exist, err = adlin.NewStudent(strings.TrimSpace(std.Login)); err != nil {
|
||||
return nil, err
|
||||
|
@ -96,8 +110,8 @@ func createStudent(_ httprouter.Params, body []byte) (interface{}, error) {
|
|||
return exist, nil
|
||||
}
|
||||
|
||||
func updateStudent(current adlin.Student, body []byte) (interface{}, error) {
|
||||
var new adlin.Student
|
||||
func updateStudent(current *adlin.Student, body []byte) (interface{}, error) {
|
||||
new := &adlin.Student{}
|
||||
if err := json.Unmarshal(body, &new); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ func init() {
|
|||
}
|
||||
})
|
||||
router.GET("/api/wg/", apiAuthHandler(showWgTunnel))
|
||||
router.GET("/api/wginfo", apiAuthHandler(func(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
router.GET("/api/wginfo", apiAuthHandler(func(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
return getTunnelInfo(student.Id), nil
|
||||
}))
|
||||
router.POST("/api/wg/", apiAuthHandler(genWgToken))
|
||||
|
@ -37,12 +37,12 @@ func init() {
|
|||
router.DELETE("/api/wg/:token", apiAuthHandler(deleteWgTunnel))
|
||||
}
|
||||
|
||||
func showWgTunnel(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
func showWgTunnel(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
// Get tunnels assigned to the student
|
||||
return student.GetTunnelTokens()
|
||||
}
|
||||
|
||||
func genWgToken(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
func genWgToken(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
// Generate a token to access related wg info
|
||||
return student.NewTunnelToken(0)
|
||||
}
|
||||
|
@ -132,7 +132,7 @@ func getWgTunnelInfo(w http.ResponseWriter, r *http.Request, ps httprouter.Param
|
|||
|
||||
tinfo := getTunnelInfo(token.IdStudent)
|
||||
|
||||
var student adlin.Student
|
||||
var student *adlin.Student
|
||||
student, err = adlin.GetStudent(int(token.IdStudent))
|
||||
if err != nil {
|
||||
http.Error(w, fmt.Sprintf("{errmsg:%q}", err), http.StatusBadRequest)
|
||||
|
@ -152,7 +152,7 @@ PersistentKeepalive = 5
|
|||
`, base64.StdEncoding.EncodeToString(tinfo.SrvPubKey), "82.64.31.248", tinfo.SrvPort, tinfo.CltIPv6, token.SuffixIP, 64, tinfo.CltIPv6, tinfo.CltRange, tinfo.SrvGW6, student.Login)))
|
||||
}
|
||||
|
||||
func updateWgTunnel(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
func updateWgTunnel(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
token, err := adlin.GetTunnelToken(adlin.TokenFromText(ps.ByName("token")))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -180,7 +180,7 @@ func updateWgTunnel(student adlin.Student, ps httprouter.Params, body []byte) (i
|
|||
return true, err
|
||||
}
|
||||
|
||||
func deleteWgTunnel(student adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
func deleteWgTunnel(student *adlin.Student, ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
token, err := adlin.GetTunnelToken(adlin.TokenFromText(ps.ByName("token")))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
Reference in a new issue