diff options
| author | Felix Hanley <felix@userspace.com.au> | 2016-12-05 08:16:58 +0000 |
|---|---|---|
| committer | Felix Hanley <felix@userspace.com.au> | 2016-12-05 08:16:58 +0000 |
| commit | b049991a46a2f619344bd6e915745703864d0134 (patch) | |
| tree | ec1d3897a7b69c7c63a3774d4c42dfbb8cb46432 /main.go | |
| parent | e1c3d6f7db06d592538f1162b2b6b9f1b6efa330 (diff) | |
| download | go-dict2rest-master.tar.gz go-dict2rest-master.tar.bz2 | |
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 89 |
1 files changed, 89 insertions, 0 deletions
@@ -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() +} |
