checker: deduce basechellenge from tunnel version
This commit is contained in:
parent
b695eeb748
commit
e1ee8d76ee
|
@ -13,7 +13,6 @@ import (
|
|||
"git.nemunai.re/lectures/adlin/libadlin"
|
||||
)
|
||||
|
||||
var baseChallenge = 100
|
||||
var verbose = false
|
||||
|
||||
// ICMP
|
||||
|
@ -74,12 +73,33 @@ func check_https(domain, ip string) (err error) {
|
|||
|
||||
// Main
|
||||
|
||||
func minTunnelVersion(std adlin.Student) (int, error) {
|
||||
tunnels, err := std.GetTunnelTokens()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
var minversion int = 2147483647
|
||||
for _, tunnel := range tunnels {
|
||||
if tunnel.Version == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
if tunnel.Dump != nil && tunnel.Version < minversion {
|
||||
minversion = tunnel.Version
|
||||
}
|
||||
}
|
||||
|
||||
return minversion, nil
|
||||
}
|
||||
|
||||
func studentsChecker() {
|
||||
students, err := adlin.GetStudents()
|
||||
if err != nil {
|
||||
log.Println("Unable to check students:", err)
|
||||
return
|
||||
}
|
||||
log.Println("Checking students...")
|
||||
|
||||
for _, s := range students {
|
||||
time.Sleep(250 * time.Millisecond)
|
||||
|
@ -87,18 +107,24 @@ func studentsChecker() {
|
|||
std := s
|
||||
stdIP := adlin.StudentIP(std.Id).String() + "1"
|
||||
go check_ping(stdIP, func(pkt *ping.Packet) {
|
||||
tunnel_version, err := minTunnelVersion(std)
|
||||
if verbose {
|
||||
log.Printf("%s PONG\n", std.Login)
|
||||
log.Printf("%s PONG; version=%d (%v)\n", std.Login, tunnel_version, err)
|
||||
}
|
||||
std.OnPong(true)
|
||||
|
||||
if tunnel_version == 2147483647 || tunnel_version == 0 {
|
||||
log.Printf("%s unknown tunnel version: %d skipping tests (%v)", std.Login, tunnel_version, err)
|
||||
return
|
||||
}
|
||||
|
||||
// Check HTTP
|
||||
if err := check_http(stdIP); err == nil {
|
||||
if verbose {
|
||||
log.Printf("%s just unlocked HTTP challenge\n", std.Login)
|
||||
}
|
||||
if _, err := std.UnlockNewChallenge(baseChallenge+0, ""); err != nil {
|
||||
if _, err := std.UpdateUnlockedChallenge(baseChallenge+0, ""); err != nil {
|
||||
if _, err := std.UnlockNewChallenge(100*(tunnel_version-1)+0, ""); err != nil {
|
||||
if _, err := std.UpdateUnlockedChallenge(100*(tunnel_version-1)+0, ""); err != nil {
|
||||
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
|
||||
}
|
||||
}
|
||||
|
@ -109,8 +135,8 @@ func studentsChecker() {
|
|||
if verbose {
|
||||
log.Printf("%s just unlocked HTTPS challenge\n", std.Login)
|
||||
}
|
||||
if _, err := std.UnlockNewChallenge(baseChallenge+1, ""); err != nil {
|
||||
if _, err := std.UpdateUnlockedChallenge(baseChallenge+1, ""); err != nil {
|
||||
if _, err := std.UnlockNewChallenge(100*(tunnel_version-1)+1, ""); err != nil {
|
||||
if _, err := std.UpdateUnlockedChallenge(100*(tunnel_version-1)+1, ""); err != nil {
|
||||
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
|
||||
}
|
||||
}
|
||||
|
@ -121,8 +147,8 @@ func studentsChecker() {
|
|||
if verbose {
|
||||
log.Printf("%s just unlocked DNS challenge\n", std.Login)
|
||||
}
|
||||
if _, err := std.UnlockNewChallenge(baseChallenge+2, ""); err != nil {
|
||||
if _, err := std.UpdateUnlockedChallenge(baseChallenge+2, ""); err != nil {
|
||||
if _, err := std.UnlockNewChallenge(100*(tunnel_version-1)+2, ""); err != nil {
|
||||
if _, err := std.UpdateUnlockedChallenge(100*(tunnel_version-1)+2, ""); err != nil {
|
||||
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@ import (
|
|||
|
||||
func main() {
|
||||
var dsn = flag.String("dsn", adlin.DSNGenerator(), "DSN to connect to the MySQL server")
|
||||
flag.IntVar(&baseChallenge, "basechallenge", baseChallenge, "Base number for current challenges")
|
||||
flag.BoolVar(&verbose, "verbose", verbose, "Enable verbose mode")
|
||||
flag.Parse()
|
||||
|
||||
|
|
Reference in New Issue