diff --git a/checker/checker.go b/checker/checker.go index 67bad7f..c78103e 100644 --- a/checker/checker.go +++ b/checker/checker.go @@ -13,6 +13,8 @@ import ( "git.nemunai.re/lectures/adlin/libadlin" ) +var baseChallenge = 100 + // ICMP func check_ping(ip string, cb func(pkt *ping.Packet)) (err error) { @@ -88,8 +90,8 @@ func studentsChecker() { // Check HTTP if err := check_http(stdIP); err == nil { - if _, err := std.UnlockNewChallenge(100, ""); err != nil { - if _, err := std.UpdateUnlockedChallenge(100, ""); err != nil { + if _, err := std.UnlockNewChallenge(baseChallenge+0, ""); err != nil { + if _, err := std.UpdateUnlockedChallenge(baseChallenge+0, ""); err != nil { log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error()) } } @@ -97,8 +99,8 @@ func studentsChecker() { // Check HTTPs if err := check_https(std.MyAssociatedDomain(), stdIP); err == nil { - if _, err := std.UnlockNewChallenge(101, ""); err != nil { - if _, err := std.UpdateUnlockedChallenge(101, ""); err != nil { + if _, err := std.UnlockNewChallenge(baseChallenge+1, ""); err != nil { + if _, err := std.UpdateUnlockedChallenge(baseChallenge+1, ""); err != nil { log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error()) } } @@ -106,8 +108,8 @@ func studentsChecker() { // Check DNS if err := check_dns(std.MyDelegatedDomain(), stdIP); err == nil { - if _, err := std.UnlockNewChallenge(102, ""); err != nil { - if _, err := std.UpdateUnlockedChallenge(102, ""); err != nil { + if _, err := std.UnlockNewChallenge(baseChallenge+2, ""); err != nil { + if _, err := std.UpdateUnlockedChallenge(baseChallenge+2, ""); err != nil { log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error()) } } diff --git a/checker/main.go b/checker/main.go new file mode 100644 index 0000000..d39bc1e --- /dev/null +++ b/checker/main.go @@ -0,0 +1,48 @@ +package main + +import ( + "flag" + "log" + "os" + "os/signal" + "syscall" + "time" + + "git.nemunai.re/lectures/adlin/libadlin" +) + +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.Parse() + + // Initialize contents + log.Println("Opening database...") + if err := adlin.DBInit(*dsn); err != nil { + log.Fatal("Cannot open the database: ", err) + } + defer adlin.DBClose() + + log.Println("Creating database...") + if err := adlin.DBCreate(); err != nil { + log.Fatal("Cannot create database: ", err) + } + + // Prepare graceful shutdown + interrupt := make(chan os.Signal, 1) + signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM) + + ticker := time.NewTicker(30 * time.Second) + defer ticker.Stop() + + // Launch checker + for { + select { + case <-interrupt: + break + case <-ticker.C: + studentsChecker() + } + } + +}