aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorFelix Hanley <felix@userspace.com.au>2016-12-05 08:16:58 +0000
committerFelix Hanley <felix@userspace.com.au>2016-12-05 08:16:58 +0000
commitb049991a46a2f619344bd6e915745703864d0134 (patch)
treeec1d3897a7b69c7c63a3774d4c42dfbb8cb46432 /main.go
parente1c3d6f7db06d592538f1162b2b6b9f1b6efa330 (diff)
downloadgo-dict2rest-b049991a46a2f619344bd6e915745703864d0134.tar.gz
go-dict2rest-b049991a46a2f619344bd6e915745703864d0134.tar.bz2
Clean up source structure and update vendor versionsHEADmaster
Diffstat (limited to 'main.go')
-rw-r--r--main.go89
1 files changed, 89 insertions, 0 deletions
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()
+}