Commit c7aa72a2 authored by Vijay Kumar Chauhan's avatar Vijay Kumar Chauhan
Browse files

GRPC changes

single client and server connection
principle object from token
parent 42c5b9e1
Branches
No related merge requests found
Showing with 704 additions and 4 deletions
package jwtmdl
import (
"fmt"
"strings"
"time"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/errormdl"
......@@ -103,3 +105,33 @@ func GenerateTokenWithJWTKey(loginID string, groups []string, clientIP string, m
}
return t, nil
}
//GeneratePricipleObjUsingToken GeneratePricipleObjUsingToken
func GeneratePricipleObjUsingToken(tokenReq string, jwtKey string) (jwt.MapClaims, error) {
tokenArray := strings.Split(tokenReq, "Bearer")
if len(tokenArray) <= 1 {
return nil, errormdl.Wrap("Provided JWT token is nil or invalid ")
}
tokenFromRequest := strings.Trim(tokenArray[1], " ")
// get data i.e.Claims from token
token, err := jwt.Parse(tokenFromRequest, func(token *jwt.Token) (interface{}, error) {
// Don't forget to validate the alg is what you expect:
_, ok := token.Method.(*jwt.SigningMethodHMAC)
if !ok {
return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
}
return []byte(jwtKey), nil
})
if err != nil {
loggermdl.LogError("Error while parsing JWT Token: ", err)
return nil, err
}
claims, ok := token.Claims.(jwt.MapClaims)
if !errormdl.CheckBool1(ok) {
loggermdl.LogError("Error while parsing claims to MapClaims")
return nil, errormdl.Wrap("Error while getting claims")
}
return claims, nil
}
#!/bin/bash or zsh
protoc grpcbuilder/grpcbuildermdl.proto --go_out=plugins=grpc:.
\ No newline at end of file
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: grpcbuildermdl/grpcbuildermdl.proto
package grpcbuildermdl
import (
context "context"
fmt "fmt"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
type GRPCMessage struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
IsRestricted bool `protobuf:"varint,3,opt,name=isRestricted,proto3" json:"isRestricted,omitempty"`
IsRoleBased bool `protobuf:"varint,4,opt,name=isRoleBased,proto3" json:"isRoleBased,omitempty"`
Token string `protobuf:"bytes,5,opt,name=token,proto3" json:"token,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GRPCMessage) Reset() { *m = GRPCMessage{} }
func (m *GRPCMessage) String() string { return proto.CompactTextString(m) }
func (*GRPCMessage) ProtoMessage() {}
func (*GRPCMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_e620ca3a5f127fa1, []int{0}
}
func (m *GRPCMessage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GRPCMessage.Unmarshal(m, b)
}
func (m *GRPCMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GRPCMessage.Marshal(b, m, deterministic)
}
func (m *GRPCMessage) XXX_Merge(src proto.Message) {
xxx_messageInfo_GRPCMessage.Merge(m, src)
}
func (m *GRPCMessage) XXX_Size() int {
return xxx_messageInfo_GRPCMessage.Size(m)
}
func (m *GRPCMessage) XXX_DiscardUnknown() {
xxx_messageInfo_GRPCMessage.DiscardUnknown(m)
}
var xxx_messageInfo_GRPCMessage proto.InternalMessageInfo
func (m *GRPCMessage) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *GRPCMessage) GetData() []byte {
if m != nil {
return m.Data
}
return nil
}
func (m *GRPCMessage) GetIsRestricted() bool {
if m != nil {
return m.IsRestricted
}
return false
}
func (m *GRPCMessage) GetIsRoleBased() bool {
if m != nil {
return m.IsRoleBased
}
return false
}
func (m *GRPCMessage) GetToken() string {
if m != nil {
return m.Token
}
return ""
}
type GRPCRequest struct {
GrpcMessage *GRPCMessage `protobuf:"bytes,1,opt,name=grpcMessage,proto3" json:"grpcMessage,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GRPCRequest) Reset() { *m = GRPCRequest{} }
func (m *GRPCRequest) String() string { return proto.CompactTextString(m) }
func (*GRPCRequest) ProtoMessage() {}
func (*GRPCRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_e620ca3a5f127fa1, []int{1}
}
func (m *GRPCRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GRPCRequest.Unmarshal(m, b)
}
func (m *GRPCRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GRPCRequest.Marshal(b, m, deterministic)
}
func (m *GRPCRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_GRPCRequest.Merge(m, src)
}
func (m *GRPCRequest) XXX_Size() int {
return xxx_messageInfo_GRPCRequest.Size(m)
}
func (m *GRPCRequest) XXX_DiscardUnknown() {
xxx_messageInfo_GRPCRequest.DiscardUnknown(m)
}
var xxx_messageInfo_GRPCRequest proto.InternalMessageInfo
func (m *GRPCRequest) GetGrpcMessage() *GRPCMessage {
if m != nil {
return m.GrpcMessage
}
return nil
}
type GRPCResponse struct {
Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GRPCResponse) Reset() { *m = GRPCResponse{} }
func (m *GRPCResponse) String() string { return proto.CompactTextString(m) }
func (*GRPCResponse) ProtoMessage() {}
func (*GRPCResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_e620ca3a5f127fa1, []int{2}
}
func (m *GRPCResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GRPCResponse.Unmarshal(m, b)
}
func (m *GRPCResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GRPCResponse.Marshal(b, m, deterministic)
}
func (m *GRPCResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_GRPCResponse.Merge(m, src)
}
func (m *GRPCResponse) XXX_Size() int {
return xxx_messageInfo_GRPCResponse.Size(m)
}
func (m *GRPCResponse) XXX_DiscardUnknown() {
xxx_messageInfo_GRPCResponse.DiscardUnknown(m)
}
var xxx_messageInfo_GRPCResponse proto.InternalMessageInfo
func (m *GRPCResponse) GetData() string {
if m != nil {
return m.Data
}
return ""
}
type GRPCByteResponse struct {
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GRPCByteResponse) Reset() { *m = GRPCByteResponse{} }
func (m *GRPCByteResponse) String() string { return proto.CompactTextString(m) }
func (*GRPCByteResponse) ProtoMessage() {}
func (*GRPCByteResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_e620ca3a5f127fa1, []int{3}
}
func (m *GRPCByteResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GRPCByteResponse.Unmarshal(m, b)
}
func (m *GRPCByteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GRPCByteResponse.Marshal(b, m, deterministic)
}
func (m *GRPCByteResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_GRPCByteResponse.Merge(m, src)
}
func (m *GRPCByteResponse) XXX_Size() int {
return xxx_messageInfo_GRPCByteResponse.Size(m)
}
func (m *GRPCByteResponse) XXX_DiscardUnknown() {
xxx_messageInfo_GRPCByteResponse.DiscardUnknown(m)
}
var xxx_messageInfo_GRPCByteResponse proto.InternalMessageInfo
func (m *GRPCByteResponse) GetData() []byte {
if m != nil {
return m.Data
}
return nil
}
func init() {
proto.RegisterType((*GRPCMessage)(nil), "grpcbuildermdl.GRPCMessage")
proto.RegisterType((*GRPCRequest)(nil), "grpcbuildermdl.GRPCRequest")
proto.RegisterType((*GRPCResponse)(nil), "grpcbuildermdl.GRPCResponse")
proto.RegisterType((*GRPCByteResponse)(nil), "grpcbuildermdl.GRPCByteResponse")
}
func init() {
proto.RegisterFile("grpcbuildermdl/grpcbuildermdl.proto", fileDescriptor_e620ca3a5f127fa1)
}
var fileDescriptor_e620ca3a5f127fa1 = []byte{
// 288 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xc1, 0x4a, 0xc3, 0x40,
0x10, 0x35, 0xda, 0x8a, 0x9d, 0x04, 0x29, 0x83, 0x87, 0xa0, 0x1e, 0xc2, 0x0a, 0x92, 0x53, 0x85,
0x78, 0xf6, 0x92, 0x1e, 0xec, 0x41, 0x45, 0x56, 0xbc, 0x08, 0x1e, 0xb6, 0xd9, 0xa1, 0x86, 0xa6,
0x49, 0xdc, 0xdd, 0x0a, 0x7e, 0x86, 0x7f, 0x2c, 0xd9, 0x44, 0xdc, 0x94, 0xd0, 0xdb, 0xbc, 0x37,
0x8f, 0x37, 0xef, 0xb1, 0x0b, 0x57, 0x2b, 0x55, 0x67, 0xcb, 0x6d, 0x5e, 0x48, 0x52, 0x1b, 0x59,
0xdc, 0xf4, 0xe1, 0xac, 0x56, 0x95, 0xa9, 0xf0, 0xb4, 0xcf, 0xb2, 0x1f, 0x0f, 0xfc, 0x7b, 0xfe,
0x3c, 0x7f, 0x24, 0xad, 0xc5, 0x8a, 0x10, 0x61, 0x54, 0x8a, 0x0d, 0x85, 0x5e, 0xe4, 0xc5, 0x13,
0x6e, 0xe7, 0x86, 0x93, 0xc2, 0x88, 0xf0, 0x30, 0xf2, 0xe2, 0x80, 0xdb, 0x19, 0x19, 0x04, 0xb9,
0xe6, 0xa4, 0x8d, 0xca, 0x33, 0x43, 0x32, 0x3c, 0x8a, 0xbc, 0xf8, 0x84, 0xf7, 0x38, 0x8c, 0xc0,
0xcf, 0x35, 0xaf, 0x0a, 0x4a, 0x85, 0x26, 0x19, 0x8e, 0xac, 0xc4, 0xa5, 0xf0, 0x0c, 0xc6, 0xa6,
0x5a, 0x53, 0x19, 0x8e, 0xed, 0xb9, 0x16, 0xb0, 0x87, 0x36, 0x12, 0xa7, 0xcf, 0x2d, 0x69, 0x83,
0x77, 0xe0, 0x37, 0xa1, 0xbb, 0x84, 0x36, 0x99, 0x9f, 0x5c, 0xcc, 0x76, 0xea, 0x39, 0x25, 0xb8,
0xab, 0x67, 0x0c, 0x82, 0xd6, 0x4d, 0xd7, 0x55, 0xa9, 0xff, 0xdb, 0x74, 0x0d, 0x9b, 0x99, 0x5d,
0xc3, 0xb4, 0xd1, 0xa4, 0xdf, 0x86, 0x06, 0x75, 0x5d, 0xeb, 0xe4, 0xbd, 0x4d, 0xf6, 0x42, 0xea,
0x2b, 0xcf, 0x08, 0x9f, 0x5a, 0xb8, 0x10, 0xa5, 0x2c, 0x48, 0xe1, 0x60, 0xa6, 0xae, 0xc5, 0x79,
0x34, 0xb4, 0x74, 0x0f, 0xb2, 0x83, 0xe4, 0x15, 0x26, 0x0d, 0x3b, 0xff, 0xa0, 0x6c, 0x8d, 0x0b,
0x17, 0xec, 0xb5, 0xbe, 0x1c, 0x5e, 0xfe, 0xd9, 0xa6, 0xd3, 0xb7, 0x9d, 0x57, 0x5f, 0x1e, 0xdb,
0xcf, 0x70, 0xfb, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x59, 0x6b, 0xff, 0x89, 0x33, 0x02, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4
// GRPCServiceClient is the client API for GRPCService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type GRPCServiceClient interface {
GRPCHandler(ctx context.Context, in *GRPCRequest, opts ...grpc.CallOption) (*GRPCByteResponse, error)
}
type gRPCServiceClient struct {
cc *grpc.ClientConn
}
func NewGRPCServiceClient(cc *grpc.ClientConn) GRPCServiceClient {
return &gRPCServiceClient{cc}
}
func (c *gRPCServiceClient) GRPCHandler(ctx context.Context, in *GRPCRequest, opts ...grpc.CallOption) (*GRPCByteResponse, error) {
out := new(GRPCByteResponse)
err := c.cc.Invoke(ctx, "/grpcbuildermdl.GRPCService/GRPCHandler", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// GRPCServiceServer is the server API for GRPCService service.
type GRPCServiceServer interface {
GRPCHandler(context.Context, *GRPCRequest) (*GRPCByteResponse, error)
}
// UnimplementedGRPCServiceServer can be embedded to have forward compatible implementations.
type UnimplementedGRPCServiceServer struct {
}
func (*UnimplementedGRPCServiceServer) GRPCHandler(ctx context.Context, req *GRPCRequest) (*GRPCByteResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GRPCHandler not implemented")
}
func RegisterGRPCServiceServer(s *grpc.Server, srv GRPCServiceServer) {
s.RegisterService(&_GRPCService_serviceDesc, srv)
}
func _GRPCService_GRPCHandler_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GRPCRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(GRPCServiceServer).GRPCHandler(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/grpcbuildermdl.GRPCService/GRPCHandler",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(GRPCServiceServer).GRPCHandler(ctx, req.(*GRPCRequest))
}
return interceptor(ctx, in, info, handler)
}
var _GRPCService_serviceDesc = grpc.ServiceDesc{
ServiceName: "grpcbuildermdl.GRPCService",
HandlerType: (*GRPCServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "GRPCHandler",
Handler: _GRPCService_GRPCHandler_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "grpcbuildermdl/grpcbuildermdl.proto",
}
// GRPCCheckClient is the client API for GRPCCheck service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type GRPCCheckClient interface {
GRPCCheck(ctx context.Context, in *GRPCRequest, opts ...grpc.CallOption) (*GRPCResponse, error)
}
type gRPCCheckClient struct {
cc *grpc.ClientConn
}
func NewGRPCCheckClient(cc *grpc.ClientConn) GRPCCheckClient {
return &gRPCCheckClient{cc}
}
func (c *gRPCCheckClient) GRPCCheck(ctx context.Context, in *GRPCRequest, opts ...grpc.CallOption) (*GRPCResponse, error) {
out := new(GRPCResponse)
err := c.cc.Invoke(ctx, "/grpcbuildermdl.GRPCCheck/GRPCCheck", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// GRPCCheckServer is the server API for GRPCCheck service.
type GRPCCheckServer interface {
GRPCCheck(context.Context, *GRPCRequest) (*GRPCResponse, error)
}
// UnimplementedGRPCCheckServer can be embedded to have forward compatible implementations.
type UnimplementedGRPCCheckServer struct {
}
func (*UnimplementedGRPCCheckServer) GRPCCheck(ctx context.Context, req *GRPCRequest) (*GRPCResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GRPCCheck not implemented")
}
func RegisterGRPCCheckServer(s *grpc.Server, srv GRPCCheckServer) {
s.RegisterService(&_GRPCCheck_serviceDesc, srv)
}
func _GRPCCheck_GRPCCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GRPCRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(GRPCCheckServer).GRPCCheck(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/grpcbuildermdl.GRPCCheck/GRPCCheck",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(GRPCCheckServer).GRPCCheck(ctx, req.(*GRPCRequest))
}
return interceptor(ctx, in, info, handler)
}
var _GRPCCheck_serviceDesc = grpc.ServiceDesc{
ServiceName: "grpcbuildermdl.GRPCCheck",
HandlerType: (*GRPCCheckServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "GRPCCheck",
Handler: _GRPCCheck_GRPCCheck_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "grpcbuildermdl/grpcbuildermdl.proto",
}
syntax = "proto3";
package grpcbuildermdl;
option go_package = "grpcbuildermdl";
message GRPCMessage {
string name =1 ;
bytes data =2;
bool isRestricted = 3 ;
bool isRoleBased = 4;
string token = 5;
}
message GRPCRequest {
GRPCMessage grpcMessage = 1;
}
message GRPCResponse {
string data = 1;
}
message GRPCByteResponse {
bytes data = 1;
}
service GRPCService {
rpc GRPCHandler(GRPCRequest) returns (GRPCByteResponse) {};
}
service GRPCCheck {
rpc GRPCCheck(GRPCRequest) returns (GRPCResponse) { };
}
\ No newline at end of file
package grpcclientmdl
import (
"context"
"time"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/grpcbuildermdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/loggermdl"
"github.com/processout/grpc-go-pool"
"google.golang.org/grpc"
)
// type GRPCHost struct {
// Host string `json:"host"`
// Port string `json:"port"`
// }
// var clientConns map[string]*grpc.ClientConn
// var mutex sync.Mutex
// var once sync.Once
// // GetGRPCClientConnection GetGRPCClientConnection
// func GetGRPCClientConnection(hostName string) (*grpc.ClientConn, error) {
// defer mutex.Unlock()
// mutex.Lock()
// if clientConns == nil {
// return nil, errormdl.Wrap("GRPC_NOT_DONE")
// }
// if hostName == "" {
// if instance, ok := clientConns[hostName]; ok {
// return instance, nil
// }
// }
// if instance, ok := clientConns[hostName]; ok {
// return instance, nil
// }
// return nil, errormdl.Wrap("GRPC not found for instance: " + hostName)
// }
// TotalCheck TotalCheck
func TotalCheck() (string, error) {
// TODO: review
conn, err := grpc.Dial("0.0.0.0:50051", grpc.WithInsecure())
if err != nil {
loggermdl.LogError("Could not connect: ", err)
}
defer conn.Close()
c := grpcbuildermdl.NewGRPCCheckClient(conn)
req := &grpcbuildermdl.GRPCRequest{}
res, err := c.GRPCCheck(context.Background(), req)
return res.GetData(), nil
}
type Employee struct {
Name string `json:"empname"`
Number int `json:"empid"`
}
var instances map[string]*grpcpool.Pool
// Init init
func Init() {
instances = make(map[string]*grpcpool.Pool)
var factory grpcpool.Factory
factory = func() (*grpc.ClientConn, error) {
conn, err := grpc.Dial("0.0.0.0:50051", grpc.WithInsecure())
if err != nil {
loggermdl.LogError("Failed to start gRPC connection: %v", err)
}
loggermdl.LogInfo("Connected to server")
return conn, err
}
pool, err := grpcpool.New(factory, 5, 5, time.Second)
if err != nil {
loggermdl.LogError("Failed to create gRPC pool: %v", err)
}
instances["0.0.0.0:50051"] = pool
}
//ByteHandler ByteHandler
func ByteHandler(req *grpcbuildermdl.GRPCRequest) ([]byte, error) {
conn, err := instances["0.0.0.0:50051"].Get(context.Background())
if err != nil {
loggermdl.LogError("Failed to create gRPC pool: %v", err)
}
client := grpcbuildermdl.NewGRPCServiceClient(conn.ClientConn)
res, err := client.GRPCHandler(context.Background(), req)
// var emp Employee
// json.Unmarshal(res.GetData(), emp)
// loggermdl.LogInfo("<ByteHandler>", res)
return res.GetData(), nil
}
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() {
loggermdl.LogInfo("GRPC init called")
list, err := net.Listen("tcp", "0.0.0.0:50051")
if err != nil {
// log.Fatal("fail to listen: %v", err)
loggermdl.LogError("GRPC listening failed: %v", err)
}
s := grpc.NewServer()
grpcbuildermdl.RegisterGRPCCheckServer(s, &Server{})
grpcbuildermdl.RegisterGRPCServiceServer(s, &Server{})
if err := s.Serve(list); err != nil {
// log.Fatal("Unable to start: %v", err)
loggermdl.LogError("Unable to start GRPC server: %v", err)
}
}
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
}
......@@ -124,10 +124,12 @@ func (s ServiceCache) preHooksExec(rs *gjson.Result, principalObj *servicebuilde
func (s ServiceCache) postHooksExec(data interface{}, principalObj *servicebuildermdl.Principal) {
rs := gjson.Result{}
objType := reflect.TypeOf(data).String()
if strings.Contains(objType, "map[string]") {
ba, _ := json.Marshal(data)
rs = gjson.ParseBytes(ba)
if data != nil {
objType := reflect.TypeOf(data).String()
if strings.Contains(objType, "map[string]") {
ba, _ := json.Marshal(data)
rs = gjson.ParseBytes(ba)
}
}
for i := 0; i < len(s.PostHooks); i++ {
var service interface{}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment