From b049991a46a2f619344bd6e915745703864d0134 Mon Sep 17 00:00:00 2001 From: Felix Hanley Date: Mon, 5 Dec 2016 15:16:58 +0700 Subject: Clean up source structure and update vendor versions --- main.go | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 main.go (limited to 'main.go') diff --git a/main.go b/main.go new file mode 100644 index 0000000..94e1ac2 --- /dev/null +++ b/main.go @@ -0,0 +1,89 @@ +package main + +import ( + "flag" + "github.com/julienschmidt/httprouter" + "github.com/alexedwards/stack" + "github.com/rs/cors" + "github.com/stretchr/graceful" + "log" + "net/http" + "os" + "time" +) + +// Globals +var dictServer string + +func main() { + var err error + + port := flag.String("port", "8080", "Listen port") + dictHost := flag.String("dicthost", "localhost", "Dict server name") + dictPort := flag.String("dictport", "2628", "Dict server port") + gzip := flag.Bool("gzip", false, "Support gzip compression") + deflate := flag.Bool("deflate", false, "Support DEFLATE compression") + + flag.Parse() + + dictServer = *dictHost + ":" + *dictPort + + client, err := getDictClient() + if err != nil { + os.Exit(1) + } + + // Get the global list of databases + dicts, err := getDictionaries(client) + if err != nil { + log.Println("Unable to get database list") + os.Exit(1) + } + + for _, d := range dicts { + log.Printf("Available dictionary %s: %s", d.Name, d.Desc) + } + // No need for it until a request comes in + client.Close() + + // Define our routes + router := httprouter.New() + router.GET("/define/:word", dictDefine) + router.GET("/databases", dictDatabases) + router.GET("/db", dictDatabases) + + // Define our middlewares + + // Going to need some CORS headers + cors := cors.New(cors.Options{ + AllowedHeaders: []string{ + "Accept", "Content-Type", "Origin", + }, + AllowedMethods: []string{ + "GET", "OPTIONS", + }, + }) + + stdChain := stack.New(stack.Adapt(cors.Handler), stack.Adapt(Logger)) + if *gzip { + stdChain = stdChain.Append(Gzip) + log.Println("Adding support for Gzip compression") + } + + if *deflate { + stdChain = stdChain.Append(Deflate) + log.Println("Adding support for DEFLATE compression") + } + + chain := stdChain.ThenHandler(router) + + listen := ":" + *port + + srv := &graceful.Server{ + Timeout: 5 * time.Second, + Server: &http.Server{Addr: listen, Handler: chain}, + } + + log.Printf("Listening at %s", listen) + srv.ListenAndServe() +} -- cgit v1.2.3