Commit 13dd77aa authored by Loïck Bonniot's avatar Loïck Bonniot

[p] Add GetContract API

parent 9c2d90f8
Pipeline #610 passed with stage
......@@ -83,6 +83,10 @@ func init() {
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.SupportPackageIsVersion1
// Client API for Client service
type ClientClient interface {
......
......@@ -62,6 +62,10 @@ func init() {
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.SupportPackageIsVersion1
// Client API for Demonstrator service
type DemonstratorClient interface {
......
......@@ -15,6 +15,8 @@ It has these top-level messages:
RegisteredUser
Empty
PostContractRequest
GetContractRequest
Contract
JoinSignatureRequest
UserConnected
User
......@@ -146,6 +148,35 @@ func (m *PostContractRequest) String() string { return proto.CompactT
func (*PostContractRequest) ProtoMessage() {}
func (*PostContractRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
// GetContractRequest message contains the uuid of the asked contract
type GetContractRequest struct {
Uuid string `protobuf:"bytes,1,opt,name=uuid" json:"uuid,omitempty"`
}
func (m *GetContractRequest) Reset() { *m = GetContractRequest{} }
func (m *GetContractRequest) String() string { return proto.CompactTextString(m) }
func (*GetContractRequest) ProtoMessage() {}
func (*GetContractRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
// Contract is the return value when a contract is fetched from the platform.
// The contract is in json format to avoid duplicating structures.
type Contract struct {
ErrorCode *ErrorCode `protobuf:"bytes,1,opt,name=errorCode" json:"errorCode,omitempty"`
Json []byte `protobuf:"bytes,2,opt,name=json,proto3" json:"json,omitempty"`
}
func (m *Contract) Reset() { *m = Contract{} }
func (m *Contract) String() string { return proto.CompactTextString(m) }
func (*Contract) ProtoMessage() {}
func (*Contract) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
func (m *Contract) GetErrorCode() *ErrorCode {
if m != nil {
return m.ErrorCode
}
return nil
}
// JoinSignatureRequest message contains the contract to join unique identifier
// and the port the client will be listening at
type JoinSignatureRequest struct {
......@@ -156,7 +187,7 @@ type JoinSignatureRequest struct {
func (m *JoinSignatureRequest) Reset() { *m = JoinSignatureRequest{} }
func (m *JoinSignatureRequest) String() string { return proto.CompactTextString(m) }
func (*JoinSignatureRequest) ProtoMessage() {}
func (*JoinSignatureRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
func (*JoinSignatureRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
// UserConnected is emitted by the platform to the client to announce a new client connection
type UserConnected struct {
......@@ -168,7 +199,7 @@ type UserConnected struct {
func (m *UserConnected) Reset() { *m = UserConnected{} }
func (m *UserConnected) String() string { return proto.CompactTextString(m) }
func (*UserConnected) ProtoMessage() {}
func (*UserConnected) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
func (*UserConnected) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
func (m *UserConnected) GetErrorCode() *ErrorCode {
if m != nil {
......@@ -194,7 +225,7 @@ type User struct {
func (m *User) Reset() { *m = User{} }
func (m *User) String() string { return proto.CompactTextString(m) }
func (*User) ProtoMessage() {}
func (*User) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
func (*User) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
// ReadySignRequest contains the contract unique identitier that is ready to be signed
type ReadySignRequest struct {
......@@ -204,7 +235,7 @@ type ReadySignRequest struct {
func (m *ReadySignRequest) Reset() { *m = ReadySignRequest{} }
func (m *ReadySignRequest) String() string { return proto.CompactTextString(m) }
func (*ReadySignRequest) ProtoMessage() {}
func (*ReadySignRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
func (*ReadySignRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
// LaunchSignature is emitted by the platform when every signers are ready
type LaunchSignature struct {
......@@ -217,7 +248,7 @@ type LaunchSignature struct {
func (m *LaunchSignature) Reset() { *m = LaunchSignature{} }
func (m *LaunchSignature) String() string { return proto.CompactTextString(m) }
func (*LaunchSignature) ProtoMessage() {}
func (*LaunchSignature) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
func (*LaunchSignature) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
func (m *LaunchSignature) GetErrorCode() *ErrorCode {
if m != nil {
......@@ -233,6 +264,8 @@ func init() {
proto.RegisterType((*RegisteredUser)(nil), "api.RegisteredUser")
proto.RegisterType((*Empty)(nil), "api.Empty")
proto.RegisterType((*PostContractRequest)(nil), "api.PostContractRequest")
proto.RegisterType((*GetContractRequest)(nil), "api.GetContractRequest")
proto.RegisterType((*Contract)(nil), "api.Contract")
proto.RegisterType((*JoinSignatureRequest)(nil), "api.JoinSignatureRequest")
proto.RegisterType((*UserConnected)(nil), "api.UserConnected")
proto.RegisterType((*User)(nil), "api.User")
......@@ -245,6 +278,10 @@ func init() {
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.SupportPackageIsVersion1
// Client API for Platform service
type PlatformClient interface {
......@@ -252,6 +289,7 @@ type PlatformClient interface {
Auth(ctx context.Context, in *AuthRequest, opts ...grpc.CallOption) (*RegisteredUser, error)
Unregister(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ErrorCode, error)
PostContract(ctx context.Context, in *PostContractRequest, opts ...grpc.CallOption) (*ErrorCode, error)
GetContract(ctx context.Context, in *GetContractRequest, opts ...grpc.CallOption) (*Contract, error)
JoinSignature(ctx context.Context, in *JoinSignatureRequest, opts ...grpc.CallOption) (Platform_JoinSignatureClient, error)
ReadySign(ctx context.Context, in *ReadySignRequest, opts ...grpc.CallOption) (*LaunchSignature, error)
}
......@@ -300,6 +338,15 @@ func (c *platformClient) PostContract(ctx context.Context, in *PostContractReque
return out, nil
}
func (c *platformClient) GetContract(ctx context.Context, in *GetContractRequest, opts ...grpc.CallOption) (*Contract, error) {
out := new(Contract)
err := grpc.Invoke(ctx, "/api.Platform/GetContract", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *platformClient) JoinSignature(ctx context.Context, in *JoinSignatureRequest, opts ...grpc.CallOption) (Platform_JoinSignatureClient, error) {
stream, err := grpc.NewClientStream(ctx, &_Platform_serviceDesc.Streams[0], c.cc, "/api.Platform/JoinSignature", opts...)
if err != nil {
......@@ -348,6 +395,7 @@ type PlatformServer interface {
Auth(context.Context, *AuthRequest) (*RegisteredUser, error)
Unregister(context.Context, *Empty) (*ErrorCode, error)
PostContract(context.Context, *PostContractRequest) (*ErrorCode, error)
GetContract(context.Context, *GetContractRequest) (*Contract, error)
JoinSignature(*JoinSignatureRequest, Platform_JoinSignatureServer) error
ReadySign(context.Context, *ReadySignRequest) (*LaunchSignature, error)
}
......@@ -404,6 +452,18 @@ func _Platform_PostContract_Handler(srv interface{}, ctx context.Context, dec fu
return out, nil
}
func _Platform_GetContract_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
in := new(GetContractRequest)
if err := dec(in); err != nil {
return nil, err
}
out, err := srv.(PlatformServer).GetContract(ctx, in)
if err != nil {
return nil, err
}
return out, nil
}
func _Platform_JoinSignature_Handler(srv interface{}, stream grpc.ServerStream) error {
m := new(JoinSignatureRequest)
if err := stream.RecvMsg(m); err != nil {
......@@ -457,6 +517,10 @@ var _Platform_serviceDesc = grpc.ServiceDesc{
MethodName: "PostContract",
Handler: _Platform_PostContract_Handler,
},
{
MethodName: "GetContract",
Handler: _Platform_GetContract_Handler,
},
{
MethodName: "ReadySign",
Handler: _Platform_ReadySign_Handler,
......@@ -472,45 +536,48 @@ var _Platform_serviceDesc = grpc.ServiceDesc{
}
var fileDescriptor0 = []byte{
// 636 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x54, 0x6d, 0x6b, 0x13, 0x41,
0x10, 0xce, 0x25, 0xd7, 0x97, 0x4c, 0x9b, 0xf4, 0xd8, 0x54, 0x89, 0x81, 0x4a, 0x59, 0x04, 0x45,
0x24, 0x29, 0x11, 0x04, 0xfd, 0x76, 0x8d, 0xa1, 0xad, 0x48, 0x28, 0x9b, 0x46, 0xc1, 0x6f, 0xe7,
0xdd, 0xb6, 0x39, 0x9a, 0x7b, 0x71, 0x77, 0x0f, 0xe9, 0x37, 0xff, 0x87, 0xe0, 0xdf, 0xf2, 0xe7,
0xe8, 0xee, 0xde, 0xed, 0xf5, 0x2e, 0x06, 0xa1, 0xfd, 0x70, 0xdd, 0x99, 0x9d, 0x7d, 0x66, 0x9e,
0x67, 0x66, 0x02, 0x47, 0xc1, 0x35, 0xe7, 0x23, 0xf5, 0x49, 0x47, 0x5e, 0x1a, 0x8e, 0xd2, 0x95,
0x27, 0xae, 0x13, 0x16, 0x0d, 0x53, 0x96, 0x88, 0x04, 0xb5, 0xa4, 0x0f, 0xbb, 0x70, 0x40, 0xe8,
0x4d, 0xc8, 0x05, 0x65, 0x84, 0x7e, 0xcb, 0x28, 0x17, 0xe8, 0x10, 0xb6, 0x68, 0xe4, 0x85, 0xab,
0xbe, 0x75, 0x6c, 0xbd, 0x68, 0x93, 0xdc, 0x40, 0x7d, 0xd8, 0x61, 0x79, 0x40, 0xbf, 0xa9, 0xfd,
0xc6, 0xc4, 0xbf, 0x2c, 0x68, 0x4f, 0x19, 0x4b, 0xd8, 0x24, 0x09, 0x28, 0x7a, 0x0e, 0xb6, 0x2f,
0xff, 0xeb, 0xc7, 0xdd, 0x71, 0x6f, 0x28, 0x93, 0x0c, 0xcb, 0xdb, 0xa1, 0xfa, 0x10, 0x1d, 0xa0,
0x00, 0x23, 0xca, 0xb9, 0x77, 0x43, 0x0d, 0x60, 0x61, 0xe2, 0x19, 0xd8, 0x1a, 0x6a, 0x0f, 0x76,
0xe6, 0x8b, 0xc9, 0x64, 0x3a, 0x9f, 0x3b, 0x0d, 0x04, 0xb0, 0x7d, 0x31, 0xfb, 0xe4, 0x92, 0x33,
0xc7, 0x52, 0x17, 0xa7, 0xee, 0x7b, 0x77, 0x71, 0x75, 0xee, 0x34, 0x95, 0xf1, 0xd9, 0x25, 0xb3,
0x8b, 0xd9, 0x99, 0xd3, 0x42, 0x3d, 0x15, 0x75, 0x35, 0x25, 0xc4, 0xf9, 0x63, 0xfe, 0x2c, 0xfc,
0x16, 0xf6, 0xdc, 0x4c, 0x2c, 0xff, 0xcf, 0x4f, 0x7a, 0x45, 0x72, 0x4b, 0xe3, 0xa2, 0x98, 0xdc,
0xc0, 0x27, 0xd0, 0x35, 0xf2, 0xd0, 0x60, 0xc1, 0x29, 0x43, 0x4f, 0x01, 0xfc, 0x55, 0x48, 0x63,
0x31, 0xa1, 0x4c, 0x14, 0x10, 0x15, 0x0f, 0xde, 0x81, 0xad, 0x69, 0x94, 0x8a, 0x3b, 0xfc, 0x1d,
0x7a, 0x97, 0x09, 0x17, 0x93, 0x24, 0x16, 0xcc, 0xf3, 0x85, 0xc9, 0x8e, 0xc0, 0x5e, 0x7a, 0x7c,
0xa9, 0x5f, 0xee, 0x13, 0x7d, 0x46, 0x03, 0xd8, 0xbd, 0x0e, 0x57, 0x34, 0xf6, 0x22, 0xa3, 0x45,
0x69, 0xa3, 0xc7, 0xb0, 0xcd, 0xc3, 0x9b, 0x98, 0xb2, 0x7e, 0xeb, 0xb8, 0x25, 0x6f, 0x0a, 0x4b,
0xc9, 0xe7, 0x27, 0x51, 0x24, 0xd3, 0xf6, 0xed, 0x5c, 0xbe, 0xc2, 0x94, 0xf2, 0x1d, 0x7e, 0x48,
0xc2, 0x78, 0x2e, 0xe3, 0x3c, 0x91, 0x31, 0x6a, 0x32, 0x63, 0xd8, 0xf7, 0x8b, 0x62, 0x16, 0x59,
0x18, 0x14, 0xb5, 0xd7, 0x7c, 0xaa, 0xba, 0x34, 0x61, 0x79, 0x8b, 0x3b, 0x44, 0x9f, 0xf1, 0x0f,
0x0b, 0x3a, 0x8a, 0xba, 0x64, 0x12, 0x53, 0x5f, 0xd0, 0x00, 0xbd, 0x82, 0x36, 0x35, 0x2d, 0xd5,
0x30, 0x7b, 0xe3, 0x6e, 0xbd, 0xd1, 0xe4, 0x3e, 0xe0, 0x9f, 0xbc, 0xcd, 0x0d, 0x79, 0x8f, 0xc0,
0xce, 0xb8, 0xe6, 0xa8, 0xc0, 0xda, 0x1a, 0x4c, 0xe5, 0x24, 0xda, 0x8d, 0xbf, 0x80, 0xad, 0xc5,
0x97, 0xa4, 0x6f, 0xe9, 0xdd, 0xf9, 0xbd, 0x7e, 0xc6, 0xbc, 0x6f, 0x6a, 0xb3, 0xda, 0xd4, 0x2e,
0x34, 0xc3, 0x54, 0x83, 0xb6, 0x89, 0x3c, 0x95, 0xf4, 0xec, 0x0a, 0xbd, 0x37, 0xe0, 0x10, 0xea,
0x05, 0x77, 0x4a, 0xaf, 0x07, 0x48, 0x85, 0x7f, 0x5a, 0x70, 0xf0, 0xd1, 0xcb, 0x62, 0x7f, 0x59,
0x2a, 0xfd, 0x40, 0x61, 0x9e, 0x41, 0x87, 0x9b, 0xa7, 0x15, 0x65, 0xea, 0xce, 0x2a, 0x67, 0x35,
0x01, 0x15, 0xce, 0x72, 0x6c, 0xb8, 0x2a, 0x38, 0xf6, 0xa9, 0x64, 0xd4, 0x92, 0x8c, 0x4a, 0x7b,
0xfc, 0xbb, 0x09, 0xbb, 0x97, 0xc5, 0xbe, 0xa3, 0x31, 0xec, 0x9a, 0x29, 0x46, 0x87, 0xba, 0x9e,
0xb5, 0x9d, 0x1f, 0xac, 0x55, 0x89, 0x1b, 0x68, 0x04, 0xb6, 0x5a, 0x1a, 0xe4, 0xe8, 0x9b, 0xca,
0xfe, 0x0c, 0x7a, 0x35, 0x84, 0x7c, 0x2d, 0xe4, 0x83, 0x97, 0x00, 0x8b, 0x98, 0x99, 0x34, 0x90,
0x03, 0xaa, 0x4d, 0xd8, 0x00, 0xfe, 0x0e, 0xf6, 0xab, 0xbb, 0x81, 0xfa, 0x3a, 0x62, 0xc3, 0xba,
0x6c, 0x78, 0x7b, 0x0a, 0x9d, 0xda, 0x78, 0xa3, 0x27, 0x3a, 0x64, 0xd3, 0xc8, 0x0f, 0x50, 0x39,
0x48, 0xe5, 0xf0, 0xe2, 0xc6, 0x89, 0x25, 0xf3, 0xb7, 0xcb, 0x9e, 0xa3, 0x47, 0x05, 0x9f, 0xfa,
0x0c, 0x0c, 0x72, 0xa1, 0xd6, 0x3a, 0x8c, 0x1b, 0x5f, 0xb7, 0xf5, 0xaf, 0xe7, 0xeb, 0xbf, 0x01,
0x00, 0x00, 0xff, 0xff, 0x3f, 0xa2, 0x07, 0x22, 0x5e, 0x05, 0x00, 0x00,
// 684 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x54, 0xdf, 0x6f, 0x12, 0x4f,
0x10, 0xe7, 0xe0, 0xda, 0xc2, 0x50, 0xe8, 0x65, 0xe9, 0xf7, 0x2b, 0x92, 0xd4, 0x34, 0x1b, 0x13,
0x1b, 0x63, 0xa0, 0xc1, 0x44, 0xa3, 0x6f, 0x14, 0x49, 0x5b, 0xd3, 0x90, 0x66, 0x29, 0x9a, 0xf8,
0x76, 0x1e, 0xdb, 0x72, 0x96, 0xfb, 0xe1, 0xee, 0x12, 0xd3, 0x37, 0xff, 0x04, 0xdf, 0x4d, 0xfc,
0x57, 0x75, 0x77, 0xef, 0xf6, 0x38, 0xf0, 0x62, 0x02, 0x0f, 0xc7, 0xce, 0xec, 0xec, 0x67, 0x66,
0x3e, 0x3b, 0x9f, 0x85, 0xa3, 0xd9, 0x2d, 0xe7, 0x3d, 0xf5, 0x89, 0x7b, 0x6e, 0xec, 0xf7, 0xe2,
0x85, 0x2b, 0x6e, 0x23, 0x16, 0x74, 0x63, 0x16, 0x89, 0x08, 0x55, 0xa4, 0x0f, 0x0f, 0xe0, 0x80,
0xd0, 0x3b, 0x9f, 0x0b, 0xca, 0x08, 0xfd, 0xba, 0xa4, 0x5c, 0xa0, 0x43, 0xd8, 0xa1, 0x81, 0xeb,
0x2f, 0xda, 0xd6, 0xb1, 0x75, 0x52, 0x23, 0x89, 0x81, 0xda, 0xb0, 0xc7, 0x92, 0x80, 0x76, 0x59,
0xfb, 0x8d, 0x89, 0x7f, 0x59, 0x50, 0x1b, 0x31, 0x16, 0xb1, 0x61, 0x34, 0xa3, 0xe8, 0x19, 0xd8,
0x9e, 0xfc, 0xd7, 0x87, 0x9b, 0xfd, 0x56, 0x57, 0x26, 0xe9, 0x66, 0xbb, 0x5d, 0xf5, 0x21, 0x3a,
0x40, 0x01, 0x06, 0x94, 0x73, 0xf7, 0x8e, 0x1a, 0xc0, 0xd4, 0xc4, 0x63, 0xb0, 0x35, 0x54, 0x1d,
0xf6, 0x26, 0xd3, 0xe1, 0x70, 0x34, 0x99, 0x38, 0x25, 0x04, 0xb0, 0x7b, 0x39, 0xfe, 0x30, 0x20,
0xe7, 0x8e, 0xa5, 0x36, 0xce, 0x06, 0xef, 0x06, 0xd3, 0x9b, 0x0b, 0xa7, 0xac, 0x8c, 0x8f, 0x03,
0x32, 0xbe, 0x1c, 0x9f, 0x3b, 0x15, 0xd4, 0x52, 0x51, 0x37, 0x23, 0x42, 0x9c, 0xdf, 0xe6, 0x67,
0xe1, 0x37, 0x50, 0x1f, 0x2c, 0xc5, 0xfc, 0xdf, 0xfd, 0x49, 0xaf, 0x88, 0xee, 0x69, 0x98, 0x16,
0x93, 0x18, 0xf8, 0x14, 0x9a, 0x86, 0x1e, 0x3a, 0x9b, 0x72, 0xca, 0xd0, 0x13, 0x00, 0x6f, 0xe1,
0xd3, 0x50, 0x0c, 0x29, 0x13, 0x29, 0x44, 0xce, 0x83, 0xf7, 0x60, 0x67, 0x14, 0xc4, 0xe2, 0x01,
0x7f, 0x83, 0xd6, 0x75, 0xc4, 0xc5, 0x30, 0x0a, 0x05, 0x73, 0x3d, 0x61, 0xb2, 0x23, 0xb0, 0xe7,
0x2e, 0x9f, 0xeb, 0x93, 0xfb, 0x44, 0xaf, 0x51, 0x07, 0xaa, 0xb7, 0xfe, 0x82, 0x86, 0x6e, 0x60,
0xb8, 0xc8, 0x6c, 0xf4, 0x3f, 0xec, 0x72, 0xff, 0x2e, 0xa4, 0xac, 0x5d, 0x39, 0xae, 0xc8, 0x9d,
0xd4, 0x52, 0xf4, 0x79, 0x51, 0x10, 0xc8, 0xb4, 0x6d, 0x3b, 0xa1, 0x2f, 0x35, 0xf1, 0x09, 0xa0,
0x73, 0x5a, 0x94, 0x77, 0xb9, 0xf4, 0x67, 0x69, 0xc5, 0x7a, 0x8d, 0xaf, 0xa0, 0x6a, 0xc2, 0xd0,
0x0b, 0xa8, 0x51, 0x73, 0x4d, 0x3a, 0xa8, 0xde, 0x6f, 0xae, 0x5f, 0x1e, 0x59, 0x05, 0x28, 0xb4,
0x2f, 0x3c, 0x4a, 0xc8, 0x92, 0x5d, 0xa8, 0xb5, 0xbc, 0xb6, 0xc3, 0xf7, 0x91, 0x1f, 0x4e, 0x64,
0x7d, 0xae, 0x58, 0x32, 0x6a, 0x32, 0x63, 0xd8, 0xf7, 0xd2, 0x2c, 0xd3, 0x55, 0x05, 0x6b, 0x3e,
0x85, 0x17, 0x47, 0x2c, 0x19, 0xad, 0x06, 0xd1, 0x6b, 0xfc, 0xdd, 0x82, 0x86, 0xa2, 0x5c, 0x96,
0x18, 0x52, 0x4f, 0xd0, 0xd9, 0x96, 0x35, 0x6e, 0xe6, 0x2d, 0x17, 0xe4, 0x3d, 0x92, 0xac, 0x70,
0xcd, 0xad, 0x02, 0xab, 0x69, 0x30, 0x95, 0x93, 0x68, 0x37, 0xfe, 0x04, 0xb6, 0xbe, 0x74, 0x49,
0xf6, 0x3d, 0x7d, 0xb8, 0x58, 0xdd, 0x9b, 0x31, 0x57, 0xc3, 0x54, 0xce, 0x0f, 0x53, 0x13, 0xca,
0x7e, 0xac, 0x41, 0x6b, 0x44, 0xae, 0xb2, 0xf6, 0xec, 0x5c, 0x7b, 0xaf, 0xc0, 0x21, 0xd4, 0x9d,
0x3d, 0x28, 0xbe, 0xb6, 0xa0, 0x0a, 0xff, 0xb4, 0xe0, 0xe0, 0xca, 0x5d, 0x86, 0xde, 0x3c, 0x63,
0x7a, 0x4b, 0x62, 0x9e, 0x42, 0x83, 0x9b, 0xa3, 0x39, 0x66, 0xd6, 0x9d, 0xf9, 0x9e, 0xd5, 0xe4,
0xe5, 0x7a, 0x96, 0xe3, 0xca, 0x55, 0xc1, 0xa1, 0x47, 0x65, 0x47, 0x15, 0xd9, 0x51, 0x66, 0xf7,
0x7f, 0x54, 0xa0, 0x7a, 0x9d, 0xbe, 0x33, 0xa8, 0x0f, 0x55, 0xa3, 0x1e, 0x74, 0xa8, 0xeb, 0xd9,
0x78, 0x6b, 0x3a, 0x1b, 0x55, 0xe2, 0x12, 0xea, 0x81, 0xad, 0xc4, 0x8a, 0x1c, 0xbd, 0x93, 0xd3,
0x6d, 0xa7, 0xb5, 0x86, 0x90, 0xc8, 0x51, 0x1e, 0x78, 0x0e, 0x30, 0x0d, 0x99, 0x49, 0x03, 0x09,
0xa0, 0x52, 0x60, 0x01, 0xf8, 0x5b, 0xd8, 0xcf, 0x6b, 0x12, 0xb5, 0x75, 0x44, 0x81, 0x4c, 0x0b,
0xce, 0xbe, 0x86, 0x7a, 0x4e, 0x56, 0xe8, 0x91, 0x0e, 0xf8, 0x5b, 0x68, 0x9d, 0x86, 0xde, 0x30,
0x5e, 0x79, 0xf0, 0x0c, 0x1a, 0x6b, 0xba, 0x40, 0x8f, 0x75, 0x44, 0x91, 0x56, 0x3a, 0x28, 0x9b,
0xc0, 0x6c, 0xea, 0x71, 0xe9, 0xd4, 0x92, 0x85, 0xd7, 0xb2, 0x61, 0x41, 0xff, 0xa5, 0x44, 0xac,
0x0f, 0x4f, 0x27, 0x61, 0x78, 0x63, 0x34, 0x70, 0xe9, 0xf3, 0xae, 0x7e, 0xee, 0x5f, 0xfe, 0x09,
0x00, 0x00, 0xff, 0xff, 0x57, 0x09, 0xac, 0xbb, 0x0f, 0x06, 0x00, 0x00,
}
......@@ -7,6 +7,7 @@ service Platform {
rpc Auth(AuthRequest) returns (RegisteredUser) {}
rpc Unregister(Empty) returns (ErrorCode) {}
rpc PostContract(PostContractRequest) returns (ErrorCode) {}
rpc GetContract(GetContractRequest) returns (Contract) {}
rpc JoinSignature(JoinSignatureRequest) returns (stream UserConnected) {}
rpc ReadySign(ReadySignRequest) returns (LaunchSignature) {} // Warning, LaunchSignature can be emitted with a very high delay
}
......@@ -63,6 +64,18 @@ message PostContractRequest {
string comment = 4;
}
// GetContractRequest message contains the uuid of the asked contract
message GetContractRequest {
string uuid = 1;
}
// Contract is the return value when a contract is fetched from the platform.
// The contract is in json format to avoid duplicating structures.
Please register or sign in to reply
message Contract {
ErrorCode errorCode = 1;
bytes json = 2;
}
// JoinSignatureRequest message contains the contract to join unique identifier
// and the port the client will be listening at
message JoinSignatureRequest {
......
......@@ -14,7 +14,6 @@ import (
"gopkg.in/mgo.v2/bson"
)
var err error
var collection *mgdb.MongoCollection
var manager *mgdb.MongoManager
var dbURI string
......@@ -28,6 +27,7 @@ func TestMain(m *testing.M) {
dbURI = "mongodb://localhost/dfss-test"
}
var err error
manager, err = mgdb.NewManager(dbURI)
if err != nil {
fmt.Println(err)
......@@ -157,16 +157,26 @@ func TestCheckAuthorization(t *testing.T) {
createDataset()
id := addTestContract()
assert.T(t, repository.CheckAuthorization(user1.CertHash, id))
assert.T(t, !repository.CheckAuthorization(user1.CertHash, bson.NewObjectId()))
assert.T(t, !repository.CheckAuthorization(user2.CertHash, id))
assert.T(t, !repository.CheckAuthorization(user2.CertHash, bson.NewObjectId()))
res, err := repository.GetWithSigner(user1.CertHash, id)
assert.Equal(t, nil, err)
assert.T(t, res != nil)
res, err = repository.GetWithSigner(user1.CertHash, bson.NewObjectId())
assert.Equal(t, nil, err)
assert.T(t, res == nil)
res, err = repository.GetWithSigner(user2.CertHash, id)
assert.Equal(t, nil, err)
assert.T(t, res == nil)
res, err = repository.GetWithSigner(user2.CertHash, bson.NewObjectId())
assert.Equal(t, nil, err)
assert.T(t, res == nil)
contract := entities.Contract{}
_ = repository.Collection.FindByID(entities.Contract{ID: id}, &contract)
contract.Ready = false
_, _ = repository.Collection.UpdateByID(contract)
// Not valid if contract is not ready
assert.T(t, !repository.CheckAuthorization(user1.CertHash, id))
// Still valid if contract is not ready
res, _ = repository.GetWithSigner(user1.CertHash, id)
assert.T(t, res != nil)
assert.T(t, !res.Ready)
}
......@@ -20,7 +20,6 @@ var user1, user2, user3 *entities.User
var defaultHash = sha512.Sum512([]byte{0})
func createDataset() {
user1 = entities.NewUser() // Regular user
user2 = entities.NewUser() // Regular user
user3 = entities.NewUser() // Non-auth user
......@@ -43,14 +42,11 @@ func createDataset() {
_, _ = manager.Get("users").Insert(user1)
_, _ = manager.Get("users").Insert(user2)
_, _ = manager.Get("users").Insert(user3)
}
func dropDataset() {
_ = manager.Get("users").Drop()
_ = manager.Get("contracts").Drop()
}
func clientTest(t *testing.T) api.PlatformClient {
......
package contract
import (
"dfss/dfssp/api"
"dfss/dfssp/entities"
"dfss/mgdb"
"gopkg.in/mgo.v2/bson"
)
// Fetch returns the protobuf message when asking a specific contract containing a specific user.
func Fetch(db *mgdb.MongoManager, contractUUID string, clientHash []byte) *api.Contract {
if !bson.IsObjectIdHex(contractUUID) {
return &api.Contract{
ErrorCode: &api.ErrorCode{Code: api.ErrorCode_INVARG},
}
}
repository := entities.NewContractRepository(db.Get("contracts"))
contract, _ := repository.GetWithSigner(clientHash, bson.ObjectIdHex(contractUUID))
if contract == nil {
return &api.Contract{
ErrorCode: &api.ErrorCode{Code: api.ErrorCode_BADAUTH},
}
}
data, err := GetJSON(contract, nil)
if err != nil {
return &api.Contract{
ErrorCode: &api.ErrorCode{Code: api.ErrorCode_INTERR},
}
}
return &api.Contract{
ErrorCode: &api.ErrorCode{Code: api.ErrorCode_SUCCESS},
Json: data,
}
}
package contract_test
import (
"encoding/json"
"testing"
"dfss/dfssp/api"
"dfss/dfssp/contract"
"dfss/dfssp/entities"
"github.com/bmizerany/assert"
"golang.org/x/net/context"
"gopkg.in/mgo.v2/bson"
)
var contract1 *entities.Contract
func insertTestContract(insertUser1 bool) {
contract1 = entities.NewContract()
if insertUser1 {
contract1.AddSigner(&user1.ID, user1.Email, user1.CertHash)
}
contract1.AddSigner(&user2.ID, user2.Email, user2.CertHash)
_, _ = manager.Get("contracts").Insert(contract1)
}
func TestGetContract(t *testing.T) {
dropDataset()
createDataset()
insertTestContract(true)
client := clientTest(t)
c, err := client.GetContract(context.Background(), &api.GetContractRequest{
Uuid: contract1.ID.Hex(),
})
assert.Equal(t, nil, err)
assert.Equal(t, api.ErrorCode_SUCCESS, c.ErrorCode.Code)
assert.T(t, len(c.Json) > 0)
// Trying to unmarshal contract
var entity contract.JSON
err = json.Unmarshal(c.Json, &entity)
assert.Equal(t, nil, err)
assert.Equal(t, 2, len(entity.Signers))
}
func TestGetContractWrongSigner(t *testing.T) {
dropDataset()
createDataset()
insertTestContract(false)
client := clientTest(t)
c, err := client.GetContract(context.Background(), &api.GetContractRequest{
Uuid: contract1.ID.Hex(),
})
assert.Equal(t, nil, err)
assert.Equal(t, api.ErrorCode_BADAUTH, c.ErrorCode.Code)
assert.Equal(t, 0, len(c.Json))
}
func TestGetContractWrongContract(t *testing.T) {
dropDataset()
createDataset()
insertTestContract(true)
client := clientTest(t)
c, err := client.GetContract(context.Background(), &api.GetContractRequest{
Uuid: bson.NewObjectId().Hex(),
})
assert.Equal(t, nil, err)
assert.Equal(t, api.ErrorCode_BADAUTH, c.ErrorCode.Code)
assert.Equal(t, 0, len(c.Json))
}
func TestGetContractWrongContractUUID(t *testing.T) {
dropDataset()
createDataset()
insertTestContract(true)
client := clientTest(t)
c, err := client.GetContract(context.Background(), &api.GetContractRequest{
Uuid: "wrongUUID",
})
assert.Equal(t, nil, err)
assert.Equal(t, api.ErrorCode_INVARG, c.ErrorCode.Code)
assert.Equal(t, 0, len(c.Json))
}
......@@ -39,7 +39,6 @@ type JSON struct {
// GetJSON returns indented json from a contract and some ttp information (nil allowed)
func GetJSON(c *entities.Contract, ttp *TTPJSON) ([]byte, error) {
data := JSON{
UUID: c.ID.Hex(),
Date: &c.Date,
......
......@@ -84,7 +84,8 @@ func checkJoinSignatureRequest(db *mgdb.MongoManager, stream *api.Platform_JoinS
}
repository := entities.NewContractRepository(db.Get("contracts"))
if !repository.CheckAuthorization(clientHash, bson.ObjectIdHex(contractUUID)) {
contract, _ := repository.GetWithSigner(clientHash, bson.ObjectIdHex(contractUUID))
if contract == nil || !contract.Ready {
_ = (*stream).Send(&api.UserConnected{
ErrorCode: &api.ErrorCode{
Code: api.ErrorCode_INVARG,
......
......@@ -4,6 +4,7 @@ import (
"dfss/mgdb"
"time"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
......@@ -94,16 +95,20 @@ func (r *ContractRepository) GetWaitingForUser(email string) ([]Contract, error)
return res, err
}
// CheckAuthorization checks that a client is allowed to sign a specific contract
func (r *ContractRepository) CheckAuthorization(signerHash []byte, contractID bson.ObjectId) bool {
count, _ := r.Collection.Collection.Find(bson.M{
"_id": contractID,
"ready": true,
// GetWithSigner returns the contract corresponding to an UUID and containing a specific signer, or nil if no contract matches.
func (r *ContractRepository) GetWithSigner(signerHash []byte, contractUUID bson.ObjectId) (contract *Contract, err error) {
contract = new(Contract)
err = r.Collection.Collection.Find(bson.M{
"_id": contractUUID,
"signers": bson.M{
"$elemMatch": bson.M{"hash": signerHash},
},
}).Count()
}).One(contract)
return count == 1
if err == mgo.ErrNotFound {
contract = nil
err = nil
return
}
return
}
......@@ -49,7 +49,6 @@ func (s *platformServer) Unregister(ctx context.Context, in *api.Empty) (*api.Er
//
// Handle incoming PostContractRequest messages
func (s *platformServer) PostContract(ctx context.Context, in *api.PostContractRequest) (*api.ErrorCode, error) {
cn := net.GetCN(&ctx)
if len(cn) == 0 {
return &api.ErrorCode{Code: api.ErrorCode_BADAUTH}, nil
......@@ -59,11 +58,21 @@ func (s *platformServer) PostContract(ctx context.Context, in *api.PostContractR
return builder.Execute(), nil
}
// GetContract handler
//
// Handle incoming GetContractRequest messages
func (s *platformServer) GetContract(ctx context.Context, in *api.GetContractRequest) (*api.Contract, error) {
hash := net.GetClientHash(&ctx)
if hash == nil {
return &api.Contract{ErrorCode: &api.ErrorCode{Code: api.ErrorCode_BADAUTH}}, nil
}
return contract.Fetch(s.DB, in.Uuid, hash), nil
}
// JoinSignature handler
//
// Handle incoming JoinSignatureRequest messages
func (s *platformServer) JoinSignature(in *api.JoinSignatureRequest, stream api.Platform_JoinSignatureServer) error {
ctx := stream.Context()
cn := net.GetCN(&ctx)
if len(cn) == 0 {
......
......@@ -74,6 +74,10 @@ func init() {