-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrpc.go
139 lines (115 loc) · 2.97 KB
/
rpc.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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package shared
import (
"net/rpc"
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
)
// RPCClient is an implementation of Manager that talks over RPC.
type RPCClient struct{ Client *rpc.Client }
// OnLoadArg for RPC
type OnLoadArg struct {
UserFile string
}
// OnLoadReply for RPC
type OnLoadReply struct {
Err error
}
func (m *RPCClient) OnLoad(userFile string) error {
args := OnLoadArg{UserFile: userFile}
resp := OnLoadReply{}
err := m.Client.Call("Plugin.OnLoad", args, &resp)
if err != nil {
return err
}
return resp.Err
}
type GetUserArg struct {
Uid *userpb.UserId
}
type GetUserReply struct {
User *userpb.User
Err error
}
func (m *RPCClient) GetUser(uid *userpb.UserId) (*userpb.User, error) {
args := GetUserArg{Uid: uid}
resp := GetUserReply{}
err := m.Client.Call("Plugin.GetUser", args, &resp)
if err != nil {
return nil, err
}
return resp.User, resp.Err
}
type GetUserByClaimArg struct {
Claim string
Value string
}
type GetUserByClaimReply struct {
User *userpb.User
Err error
}
func (m *RPCClient) GetUserByClaim(claim, value string) (*userpb.User, error) {
args := GetUserByClaimArg{Claim: claim, Value: value}
resp := GetUserByClaimReply{}
err := m.Client.Call("Plugin.GetUserByClaim", args, &resp)
if err != nil {
return nil, err
}
return resp.User, resp.Err
}
type GetUserGroupsArg struct {
User *userpb.UserId
}
type GetUserGroupsReply struct {
Group []string
Err error
}
func (m *RPCClient) GetUserGroups(user *userpb.UserId) ([]string, error) {
args := GetUserGroupsArg{User: user}
resp := GetUserGroupsReply{}
err := m.Client.Call("Plugin.GetUserGroups", args, &resp)
if err != nil {
return nil, err
}
return resp.Group, resp.Err
}
type FindUsersArg struct {
Query string
}
type FindUsersReply struct {
User []*userpb.User
Err error
}
func (m *RPCClient) FindUsers(query string) ([]*userpb.User, error) {
args := FindUsersArg{Query: query}
resp := FindUsersReply{}
err := m.Client.Call("Plugin.FindUsers", args, &resp)
if err != nil {
return nil, err
}
return resp.User, resp.Err
}
// Here is the RPC server that RPCClient talks to, conforming to
// the requirements of net/rpc
type RPCServer struct {
// This is the real implementation
Impl UserManager
}
// func (m *RPCServer) OnLoad(args OnLoadArg, resp *OnLoadReply) error {
// resp.Err = m.Impl.OnLoad(args.UserFile)
// return nil
// }
func (m *RPCServer) GetUser(args GetUserArg, resp *GetUserReply) error {
resp.User, resp.Err = m.Impl.GetUser(args.Uid)
return nil
}
func (m *RPCServer) GetUserByClaim(args GetUserByClaimArg, resp *GetUserByClaimReply) error {
resp.User, resp.Err = m.Impl.GetUserByClaim(args.Claim, args.Value)
return nil
}
func (m *RPCServer) GetUserGroups(args GetUserGroupsArg, resp *GetUserGroupsReply) error {
resp.Group, resp.Err = m.Impl.GetUserGroups(args.User)
return nil
}
func (m *RPCServer) FindUsers(args FindUsersArg, resp *FindUsersReply) error {
resp.User, resp.Err = m.Impl.FindUsers(args.Query)
return nil
}