forked from lonng/nanoserver
/
transport.go
117 lines (96 loc) · 2.86 KB
/
transport.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package desk
import (
"net/http"
"strconv"
"github.com/lonnng/nanoserver/internal/whitelist"
"github.com/lonnng/nanoserver/internal/encoding"
"github.com/lonnng/nanoserver/internal/errutil"
"github.com/lonnng/nanoserver/internal/protocol"
kithttp "github.com/go-kit/kit/transport/http"
"github.com/gorilla/mux"
"golang.org/x/net/context"
)
func MakeHandler(ctx context.Context, s Service) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(encoding.EncodeError),
}
deskList := kithttp.NewServer(
ctx,
makeDeskListEndpoint(s),
decodeDeskListRequest,
encoding.EncodeResponse,
opts...)
deskByID := kithttp.NewServer(
ctx,
makeDeskByIDEndpoint(s),
decodeDeskByIDRequest,
encoding.EncodeResponse,
opts...)
deleteDeskByID := kithttp.NewServer(
ctx,
makeDeleteDeskEndpoint(s),
decodeDeleteDeskRequest,
encoding.EncodeResponse,
opts...)
getOptionsHandler := kithttp.NewServer(
ctx,
makeGetOptionsEndpoint(s),
decodeGetOptionsRequest,
encoding.EncodeResponse,
opts...)
r := mux.NewRouter()
r.Handle("/v1/desk/{id}", deleteDeskByID).Methods("DELETE") //删除desk
r.Handle("/v1/desk/player/{id}", deskList).Methods("GET") //获取desk列表(lite)
r.Handle("/v1/desk/{id}", deskByID).Methods("GET") //获取desk记录
r.Handle("/v1/desk/", getOptionsHandler).Methods("OPTIONS") //获取可用操作
return r
}
func decodeDeleteDeskRequest(_ context.Context, r *http.Request) (interface{}, error) {
if !whitelist.VerifyIP(r.RemoteAddr) {
return nil, errutil.YXErrPermissionDenied
}
vars := mux.Vars(r)
id, ok := vars["id"]
if !ok || id == "" {
return nil, errutil.YXErrInvalidParameter
}
return &protocol.DeleteProductionRequest{ProductionID: id}, nil
}
func decodeDeskListRequest(_ context.Context, r *http.Request) (interface{}, error) {
//if auth := r.Header.Get("Authorization"); auth == "" || !cache.Exists(auth) {
// return nil, errutil.YXErrAuthFailed
//}
if !whitelist.VerifyIP(r.RemoteAddr) {
return nil, errutil.YXErrPermissionDenied
}
vars := mux.Vars(r)
idStr, ok := vars["id"]
if !ok || idStr == "" {
return nil, errutil.YXErrInvalidParameter
}
id, err := strconv.ParseInt(idStr, 10, 0)
if err != nil {
return nil, errutil.YXErrInvalidParameter
}
return &protocol.DeskListRequest{
Player: id,
}, nil
}
func decodeDeskByIDRequest(_ context.Context, r *http.Request) (interface{}, error) {
if !whitelist.VerifyIP(r.RemoteAddr) {
return nil, errutil.YXErrPermissionDenied
}
vars := mux.Vars(r)
idStr, ok := vars["id"]
if !ok || idStr == "" {
return nil, errutil.YXErrInvalidParameter
}
id, err := strconv.ParseInt(idStr, 10, 0)
if err != nil {
return nil, errutil.YXErrInvalidParameter
}
return &protocol.DeskByIDRequest{ID: id}, nil
}
func decodeGetOptionsRequest(_ context.Context, _ *http.Request) (interface{}, error) {
return &protocol.EmptyRequest{}, nil
}