Newer
Older
package routebuildermdl
import (
"context"
"encoding/json"
"net"
"google.golang.org/grpc"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/authmdl/jwtmdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/authmdl/roleenforcemdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/errormdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/grpcbuildermdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/loggermdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/servicebuildermdl"
)
// Server server
type Server struct{}
// GRPCInit init
func GRPCInit(GRPCPort net.Listener, serverStatus chan string) {
loggermdl.LogInfo("GRPC init called")
serverStatusString := "Sucess"
/* list, err := net.Listen("tcp", "0.0.0.0:"+GRPCPort)
if err != nil {
// log.Fatal("fail to listen: %v", err)
serverStatusString = "Failed"
loggermdl.LogError("GRPC listening failed: %v", err)
s := grpc.NewServer()
grpcbuildermdl.RegisterGRPCCheckServer(s, &Server{})
grpcbuildermdl.RegisterGRPCServiceServer(s, &Server{})
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
// log.Fatal("Unable to start: %v", err)
serverStatusString = "Failed"
loggermdl.LogError("Unable to start GRPC server: %v", err)
}
serverStatus <- serverStatusString
}
type Employee struct {
Name string `json:"empname"`
Number int `json:"empid"`
}
// GRPCHandler GRPCHandler
func (*Server) GRPCHandler(ctx context.Context, req *grpcbuildermdl.GRPCRequest) (*grpcbuildermdl.GRPCByteResponse, error) {
loggermdl.LogInfo("GRPC Handler inoked: ", req)
//emp := &Employee{Name: "Rocky", Number: 5454}
// e, _ := json.Marshal(emp)
// res := &grpcbuildermdl.GRPCByteResponse{
// Data: e,
// }
claim, _ := jwtmdl.GeneratePricipleObjUsingToken(req.GetGrpcMessage().GetToken(), jwtmdl.GlobalJWTKey)
principal := servicebuildermdl.Principal{}
groups, grperr := roleenforcemdl.GetGroupNames(claim, "groups")
if errormdl.CheckErr(grperr) != nil {
loggermdl.LogError(grperr)
// return principal, errormdl.CheckErr(grperr)
}
userID, ok := claim["userId"].(string)
if !ok || len(userID) < 2 {
loggermdl.LogError("Unable to parse UserID from JWT Token")
//return principal, errormdl.Wrap("Unable to parse UserID from JWT Token")
}
rawMetadata, ok := claim["metadata"]
if ok {
loggermdl.LogError(rawMetadata)
metadata, ok := rawMetadata.(string)
if !ok {
loggermdl.LogError("Unable to parse metadata from JWT Token")
// return principal, errormdl.Wrap("Unable to parse metadata from JWT Token")
}
principal.Metadata = metadata
}
principal.Groups = groups
principal.UserID = userID
principal.Token = req.GetGrpcMessage().GetToken()
loggermdl.LogInfo("<Request Message>", req)
loggermdl.LogInfo(
req.GetGrpcMessage().GetName(),
req.GetGrpcMessage().GetData(), req.GetGrpcMessage().GetIsRestricted(),
req.GetGrpcMessage().GetIsRoleBased(), false, principal)
result, nextDynamicPage, ab, isCompressed, errorCode, err := executeService(
req.GetGrpcMessage().GetName(),
req.GetGrpcMessage().GetData(), req.GetGrpcMessage().GetIsRestricted(),
req.GetGrpcMessage().GetIsRoleBased(), false, principal)
e, _ := json.Marshal(result)
res := &grpcbuildermdl.GRPCByteResponse{
Data: e,
}
loggermdl.LogInfo(result, nextDynamicPage, ab, isCompressed, errorCode, err)
return res, err
}
// GRPCCheck GRPCCheck
func (*Server) GRPCCheck(ctx context.Context, req *grpcbuildermdl.GRPCRequest) (*grpcbuildermdl.GRPCResponse, error) {
loggermdl.LogInfo("GRPC Check Invoked: ", req)
claim, _ := jwtmdl.GeneratePricipleObjUsingToken(req.GetGrpcMessage().GetToken(), jwtmdl.GlobalJWTKey)
principal := servicebuildermdl.Principal{}
groups, grperr := roleenforcemdl.GetGroupNames(claim, "groups")
if errormdl.CheckErr(grperr) != nil {
loggermdl.LogError(grperr)
// return principal, errormdl.CheckErr(grperr)
}
userID, ok := claim["userId"].(string)
if !ok || len(userID) < 2 {
loggermdl.LogError("Unable to parse UserID from JWT Token")
//return principal, errormdl.Wrap("Unable to parse UserID from JWT Token")
}
rawMetadata, ok := claim["metadata"]
if ok {
loggermdl.LogError(rawMetadata)
metadata, ok := rawMetadata.(string)
if !ok {
loggermdl.LogError("Unable to parse metadata from JWT Token")
// return principal, errormdl.Wrap("Unable to parse metadata from JWT Token")
}
principal.Metadata = metadata
}
principal.Groups = groups
principal.UserID = userID
principal.Token = req.GetGrpcMessage().GetToken()
result, nextDynamicPage, ab, isCompressed, errorCode, err := executeService(
req.GetGrpcMessage().GetName(),
req.GetGrpcMessage().GetData(), req.GetGrpcMessage().GetIsRestricted(),
req.GetGrpcMessage().GetIsRoleBased(), false, principal)
res := &grpcbuildermdl.GRPCResponse{
Data: "Response from GRPC Check service",
}
loggermdl.LogInfo(result, nextDynamicPage, ab, isCompressed, errorCode, err)
return res, err
}