forked from Throckmortra/soysos
/
main.go
72 lines (55 loc) · 1.89 KB
/
main.go
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
package main
import (
"flag"
"log"
"net/http"
"os"
"github.com/emicklei/go-restful"
"github.com/emicklei/go-restful/swagger"
"github.com/magiconair/properties"
)
var (
props *properties.Properties
propertiesFile = flag.String("config", "soysos.properties", "the configuration file")
SwaggerPath string
)
func main() {
flag.Parse()
log.Printf("loading configuration from [%s]", *propertiesFile)
var err error
if props, err = properties.LoadFile(*propertiesFile, properties.UTF8); err != nil {
log.Fatalf("[soysos][error] Unable to read properties:%v\n", err)
}
addr := props.MustGet("http.server.host") + ":" + props.MustGet("http.server.port")
basePath := "http://" + addr
SwaggerPath = props.GetString("swagger.path", "")
cmap := make(map[string]CatFact)
cmap["Lion"] = CatFact{"", "Lion", "Lions have sharp teef :D"}
cat := CatResource{cmap}
root := RootResource{SwaggerPath}
user := UserResource{}
wsContainer := restful.NewContainer()
wsContainer.Filter(GlobalLogging)
wsContainer.Filter(enableCORS)
restful.TraceLogger(log.New(os.Stdout, "[restful] ", log.LstdFlags|log.Lshortfile))
cat.Register(wsContainer)
root.Register(wsContainer)
user.Register(wsContainer)
config := swagger.Config{
WebServices: wsContainer.RegisteredWebServices(),
WebServicesUrl: basePath,
ApiPath: "/apidocs.json",
SwaggerPath: SwaggerPath,
SwaggerFilePath: props.GetString("swagger.file.path", "")}
swagger.RegisterSwaggerService(config, wsContainer)
cors := restful.CrossOriginResourceSharing{
AllowedHeaders: []string{"Accept", "Authorization"},
AllowedMethods: []string{"GET"},
CookiesAllowed: false,
Container: wsContainer}
//wsContainer.Filter(wsContainer.OPTIONSFilter)
wsContainer.Filter(cors.Filter)
server := &http.Server{Addr: addr, Handler: wsContainer}
log.Printf("start listening on %s", basePath)
log.Fatal(server.ListenAndServe())
}