1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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()
}
|