-
Notifications
You must be signed in to change notification settings - Fork 0
/
swagger.go
55 lines (43 loc) · 1.39 KB
/
swagger.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
package main
import (
"io/ioutil"
"net/http"
"strings"
"github.com/spf13/cobra"
"github.com/cosmos/cosmos-sdk/client/lcd"
"github.com/rakyll/statik/fs"
"github.com/spf13/viper"
)
const FlagDefaultHTTP = "default-http"
const FlagSwaggerHost = "swagger-host"
func registerSwaggerUI(rs *lcd.RestServer) {
statikFS, err := fs.New()
if err != nil {
panic(err)
}
staticServer := http.FileServer(statikFS)
rs.Mux.PathPrefix("/swagger/swagger.yaml").Handler(serveSwagger(statikFS))
rs.Mux.PathPrefix("/swagger").Handler(http.StripPrefix("/swagger", staticServer))
}
func serveSwagger(fs http.FileSystem) http.HandlerFunc {
file, _ := fs.Open("/swagger.yaml")
buf, _ := ioutil.ReadAll(file)
swagger := string(buf)
swaggerHost := viper.GetString(FlagSwaggerHost)
if swaggerHost != "" {
swagger = strings.Replace(swagger, "host: dex-api.coinex.org", "host: "+swaggerHost, -1)
}
if viper.GetBool(FlagDefaultHTTP) {
swagger = strings.Replace(swagger,
"schemes:\n - https\n - http", "schemes:\n - http\n - https", -1)
}
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte(swagger))
})
}
func bindSwaggerFlags(cmd *cobra.Command) error {
if err := viper.BindPFlag(FlagDefaultHTTP, cmd.PersistentFlags().Lookup(FlagDefaultHTTP)); err != nil {
return err
}
return viper.BindPFlag(FlagSwaggerHost, cmd.PersistentFlags().Lookup(FlagSwaggerHost))
}