blob: b05ff2f5b031eb6692b5fd3a075ff03bf2356e82 [file] [log] [blame]
Serge Bazanski64956532021-01-30 19:19:32 +01001package main
2
3import (
4 "context"
5 "flag"
Serge Bazanskic6118642021-01-31 01:17:38 +01006 "io/ioutil"
Serge Bazanski64956532021-01-30 19:19:32 +01007 "net/http"
8 "time"
9
10 "code.hackerspace.pl/hscloud/go/mirko"
11 "github.com/golang/glog"
12)
13
14var (
Serge Bazanskic6118642021-01-31 01:17:38 +010015 flagListen = "127.0.0.1:8080"
16 flagConfig = ""
17 flagTLSKey = ""
18 flagTLSCert = ""
Serge Bazanski64956532021-01-30 19:19:32 +010019)
20
21func main() {
Serge Bazanskic6118642021-01-31 01:17:38 +010022 flag.StringVar(&flagListen, "admitomatic_listen", flagListen, "Address to listen on for HTTP traffic")
23 flag.StringVar(&flagTLSKey, "admitomatic_tls_key", flagTLSKey, "TLS key to serve HTTP with")
24 flag.StringVar(&flagTLSCert, "admitomatic_tls_cert", flagTLSCert, "TLS certificate to serve HTTP with")
25 flag.StringVar(&flagConfig, "admitomatic_config", flagConfig, "Config path (prototext format)")
Serge Bazanski64956532021-01-30 19:19:32 +010026 flag.Parse()
27
Serge Bazanskic6118642021-01-31 01:17:38 +010028 if flagConfig == "" {
29 glog.Exitf("-admitomatic_config must be set")
30 }
31 if flagTLSKey == "" {
32 glog.Exitf("-admitomatic_tls_key must be set")
33 }
34 if flagTLSCert == "" {
35 glog.Exitf("-admitomatic_tls_cert must be set")
36 }
37
Serge Bazanski64956532021-01-30 19:19:32 +010038 m := mirko.New()
39 if err := m.Listen(); err != nil {
40 glog.Exitf("Listen(): %v", err)
41 }
42
43 if err := m.Serve(); err != nil {
44 glog.Exitf("Serve(): %v", err)
45 }
46
Serge Bazanskic6118642021-01-31 01:17:38 +010047 configData, err := ioutil.ReadFile(flagConfig)
48 if err != nil {
49 glog.Exitf("Could not read config: %v", err)
50 }
51
52 s, err := newService(configData)
53 if err != nil {
54 glog.Exitf("Could not start service: %v", err)
55 }
56
Serge Bazanski64956532021-01-30 19:19:32 +010057 mux := http.NewServeMux()
Serge Bazanskic6118642021-01-31 01:17:38 +010058 mux.HandleFunc("/", s.handler)
Serge Bazanski64956532021-01-30 19:19:32 +010059 // TODO(q3k): implement admission controller
60 srv := &http.Server{Addr: flagListen, Handler: mux}
61
62 glog.Infof("Listening on %q...", flagListen)
63 go func() {
Serge Bazanskic6118642021-01-31 01:17:38 +010064 if err := srv.ListenAndServeTLS(flagTLSCert, flagTLSKey); err != nil {
Serge Bazanski64956532021-01-30 19:19:32 +010065 glog.Error(err)
66 }
67 }()
68
69 <-m.Done()
70 ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
71 defer cancel()
72 srv.Shutdown(ctx)
73}