metainfo: add project info rpc for getting a project salt using an api key (#2311)

The API exposed in #2302 needs to be able to get a project-level salt (https://github.com/storj/storj/pull/2302/files#diff-72b734f4a2e408a544fef071d2565fc8R200), see https://github.com/storj/storj/blob/master/docs/design/password-key-derivation.md also

I realized this morning that if we need it later this week, we need to get it into today's release.

Please describe the tests: tests will come as part of #2302

Please describe the performance impact: none
This commit is contained in:
JT Olio 2019-06-24 11:15:45 -06:00 committed by GitHub
parent fd6a4d96f2
commit e17908a266
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 224 additions and 67 deletions

View File

@ -33,16 +33,19 @@ var (
type ActionType int type ActionType int
const ( const (
_ ActionType = iota // ActionType zero value // not using iota because these values are persisted in macaroons
_ ActionType = 0
// ActionRead specifies a read operation // ActionRead specifies a read operation
ActionRead ActionRead ActionType = 1
// ActionWrite specifies a read operation // ActionWrite specifies a read operation
ActionWrite ActionWrite ActionType = 2
// ActionList specifies a read operation // ActionList specifies a read operation
ActionList ActionList ActionType = 3
// ActionDelete specifies a read operation // ActionDelete specifies a read operation
ActionDelete ActionDelete ActionType = 4
// ActionProjectInfo requests project-level information
ActionProjectInfo ActionType = 5
) )
// Action specifies the specific operation being performed that the Macaroon will validate // Action specifies the specific operation being performed that the Macaroon will validate
@ -165,6 +168,8 @@ func (c *Caveat) Allows(action Action) bool {
if c.DisallowDeletes { if c.DisallowDeletes {
return false return false
} }
case ActionProjectInfo:
// allow
default: default:
return false return false
} }

View File

@ -841,6 +841,74 @@ func (m *SetAttributionResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_SetAttributionResponse proto.InternalMessageInfo var xxx_messageInfo_SetAttributionResponse proto.InternalMessageInfo
type ProjectInfoRequest struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ProjectInfoRequest) Reset() { *m = ProjectInfoRequest{} }
func (m *ProjectInfoRequest) String() string { return proto.CompactTextString(m) }
func (*ProjectInfoRequest) ProtoMessage() {}
func (*ProjectInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{15}
}
func (m *ProjectInfoRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ProjectInfoRequest.Unmarshal(m, b)
}
func (m *ProjectInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ProjectInfoRequest.Marshal(b, m, deterministic)
}
func (m *ProjectInfoRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_ProjectInfoRequest.Merge(m, src)
}
func (m *ProjectInfoRequest) XXX_Size() int {
return xxx_messageInfo_ProjectInfoRequest.Size(m)
}
func (m *ProjectInfoRequest) XXX_DiscardUnknown() {
xxx_messageInfo_ProjectInfoRequest.DiscardUnknown(m)
}
var xxx_messageInfo_ProjectInfoRequest proto.InternalMessageInfo
type ProjectInfoResponse struct {
ProjectSalt []byte `protobuf:"bytes,1,opt,name=project_salt,json=projectSalt,proto3" json:"project_salt,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ProjectInfoResponse) Reset() { *m = ProjectInfoResponse{} }
func (m *ProjectInfoResponse) String() string { return proto.CompactTextString(m) }
func (*ProjectInfoResponse) ProtoMessage() {}
func (*ProjectInfoResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{16}
}
func (m *ProjectInfoResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ProjectInfoResponse.Unmarshal(m, b)
}
func (m *ProjectInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ProjectInfoResponse.Marshal(b, m, deterministic)
}
func (m *ProjectInfoResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_ProjectInfoResponse.Merge(m, src)
}
func (m *ProjectInfoResponse) XXX_Size() int {
return xxx_messageInfo_ProjectInfoResponse.Size(m)
}
func (m *ProjectInfoResponse) XXX_DiscardUnknown() {
xxx_messageInfo_ProjectInfoResponse.DiscardUnknown(m)
}
var xxx_messageInfo_ProjectInfoResponse proto.InternalMessageInfo
func (m *ProjectInfoResponse) GetProjectSalt() []byte {
if m != nil {
return m.ProjectSalt
}
return nil
}
func init() { func init() {
proto.RegisterType((*AddressedOrderLimit)(nil), "metainfo.AddressedOrderLimit") proto.RegisterType((*AddressedOrderLimit)(nil), "metainfo.AddressedOrderLimit")
proto.RegisterType((*SegmentWriteRequest)(nil), "metainfo.SegmentWriteRequest") proto.RegisterType((*SegmentWriteRequest)(nil), "metainfo.SegmentWriteRequest")
@ -858,70 +926,75 @@ func init() {
proto.RegisterType((*ListSegmentsResponse_Item)(nil), "metainfo.ListSegmentsResponse.Item") proto.RegisterType((*ListSegmentsResponse_Item)(nil), "metainfo.ListSegmentsResponse.Item")
proto.RegisterType((*SetAttributionRequest)(nil), "metainfo.SetAttributionRequest") proto.RegisterType((*SetAttributionRequest)(nil), "metainfo.SetAttributionRequest")
proto.RegisterType((*SetAttributionResponse)(nil), "metainfo.SetAttributionResponse") proto.RegisterType((*SetAttributionResponse)(nil), "metainfo.SetAttributionResponse")
proto.RegisterType((*ProjectInfoRequest)(nil), "metainfo.ProjectInfoRequest")
proto.RegisterType((*ProjectInfoResponse)(nil), "metainfo.ProjectInfoResponse")
} }
func init() { proto.RegisterFile("metainfo.proto", fileDescriptor_631e2f30a93cd64e) } func init() { proto.RegisterFile("metainfo.proto", fileDescriptor_631e2f30a93cd64e) }
var fileDescriptor_631e2f30a93cd64e = []byte{ var fileDescriptor_631e2f30a93cd64e = []byte{
// 922 bytes of a gzipped FileDescriptorProto // 967 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x6e, 0x1b, 0x45, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x6e, 0x1b, 0x45,
0x14, 0x66, 0xfd, 0x13, 0xc7, 0xc7, 0x4e, 0x0c, 0x93, 0x90, 0xae, 0xb6, 0x0d, 0x36, 0xcb, 0x4d, 0x14, 0x66, 0xed, 0x38, 0x8e, 0x8f, 0x9d, 0x18, 0xc6, 0x26, 0x5d, 0x6d, 0x1b, 0xec, 0x2e, 0x37,
0x90, 0x90, 0x2b, 0xa5, 0x57, 0x50, 0x6e, 0xf2, 0x53, 0x44, 0x50, 0x1b, 0xa2, 0x0d, 0xa2, 0x52, 0x41, 0x42, 0xae, 0x94, 0xde, 0x00, 0xe5, 0x26, 0x3f, 0x45, 0x04, 0xb5, 0xc1, 0x5a, 0x23, 0x2a,
0x85, 0x58, 0x8d, 0xbd, 0xc7, 0xee, 0x08, 0xef, 0xce, 0x32, 0x33, 0x86, 0xb4, 0xf7, 0x3c, 0x40, 0x55, 0x88, 0xd5, 0xd8, 0x7b, 0xec, 0x0e, 0x78, 0x77, 0x96, 0x99, 0x31, 0xa4, 0xbd, 0xe7, 0x01,
0x2f, 0x78, 0x25, 0xd4, 0x0b, 0x1e, 0x00, 0x71, 0xd1, 0x67, 0x41, 0xf3, 0xb3, 0xf6, 0x3a, 0xb6, 0x8a, 0xc4, 0x3b, 0xf5, 0x82, 0x07, 0x40, 0x5c, 0xf4, 0x59, 0xd0, 0xce, 0xcc, 0xda, 0xeb, 0xd8,
0x09, 0x48, 0xbe, 0xdb, 0x73, 0xe6, 0x9b, 0xf3, 0xf3, 0x7d, 0x67, 0x8e, 0x0d, 0xbb, 0x29, 0x2a, 0x26, 0x54, 0xf2, 0xdd, 0x9c, 0x33, 0x67, 0xce, 0xcf, 0xf7, 0x1d, 0x7f, 0x6b, 0x38, 0x88, 0x51,
0xca, 0xb2, 0x11, 0xef, 0xe7, 0x82, 0x2b, 0x4e, 0xb6, 0x0b, 0x3b, 0x80, 0x31, 0x1f, 0x3b, 0x6f, 0x51, 0x96, 0x8c, 0x79, 0x2f, 0x15, 0x5c, 0x71, 0xb2, 0x97, 0xdb, 0x1e, 0x4c, 0xf8, 0xc4, 0x7a,
0xd0, 0x1d, 0x73, 0x3e, 0x9e, 0xe0, 0x43, 0x63, 0x0d, 0xa6, 0xa3, 0x87, 0x8a, 0xa5, 0x28, 0x15, 0xbd, 0xce, 0x84, 0xf3, 0xc9, 0x14, 0x1f, 0x68, 0x6b, 0x38, 0x1b, 0x3f, 0x50, 0x2c, 0x46, 0xa9,
0x4d, 0x73, 0x07, 0x80, 0x8c, 0x27, 0xe8, 0xbe, 0x3b, 0x39, 0x67, 0x99, 0x42, 0x91, 0x0c, 0x9c, 0x68, 0x9c, 0xda, 0x00, 0x48, 0x78, 0x84, 0xf6, 0xdc, 0x4c, 0x39, 0x4b, 0x14, 0x8a, 0x68, 0x68,
0xa3, 0xcd, 0x45, 0x82, 0x42, 0x5a, 0x2b, 0xfc, 0xcd, 0x83, 0xbd, 0x93, 0x24, 0x11, 0x28, 0x25, 0x1d, 0x0d, 0x2e, 0x22, 0x14, 0xd2, 0x58, 0xfe, 0xef, 0x0e, 0xb4, 0x4e, 0xa3, 0x48, 0xa0, 0x94,
0x26, 0xdf, 0xea, 0x93, 0xa7, 0x2c, 0x65, 0x8a, 0x7c, 0x0a, 0xf5, 0x89, 0xfe, 0xf0, 0xbd, 0x9e, 0x18, 0x7d, 0x9b, 0xdd, 0x3c, 0x61, 0x31, 0x53, 0xe4, 0x13, 0xa8, 0x4c, 0xb3, 0x83, 0xeb, 0x74,
0x77, 0xd4, 0x3a, 0xde, 0xeb, 0xbb, 0x5b, 0x73, 0xc8, 0x71, 0x64, 0x11, 0xe4, 0x0c, 0xf6, 0xa5, 0x9d, 0xe3, 0xfa, 0x49, 0xab, 0x67, 0x5f, 0x2d, 0x42, 0x4e, 0x02, 0x13, 0x41, 0xce, 0xa1, 0x2d,
0xe2, 0x82, 0x8e, 0x31, 0xd6, 0x79, 0x63, 0x6a, 0xc3, 0xf9, 0x15, 0x73, 0xf3, 0x83, 0xbe, 0x29, 0x15, 0x17, 0x74, 0x82, 0x61, 0x56, 0x37, 0xa4, 0x26, 0x9d, 0x5b, 0xd2, 0x2f, 0x3f, 0xe8, 0xe9,
0xe6, 0x92, 0x27, 0xe8, 0xf2, 0x44, 0xc4, 0xc1, 0x4b, 0xbe, 0xf0, 0x4d, 0x05, 0xf6, 0xae, 0x71, 0x66, 0xae, 0x78, 0x84, 0xb6, 0x4e, 0x40, 0x6c, 0x78, 0xc1, 0xe7, 0xbf, 0x2e, 0x41, 0x6b, 0x80,
0x9c, 0x62, 0xa6, 0x9e, 0x0b, 0xa6, 0x30, 0xc2, 0x9f, 0xa7, 0x28, 0x15, 0x39, 0x80, 0xad, 0xc1, 0x93, 0x18, 0x13, 0xf5, 0x4c, 0x30, 0x85, 0x01, 0xfe, 0x32, 0x43, 0xa9, 0xc8, 0x21, 0xec, 0x0e,
0x74, 0xf8, 0x13, 0xda, 0x42, 0xda, 0x91, 0xb3, 0x08, 0x81, 0x5a, 0x4e, 0xd5, 0x4b, 0x93, 0xa4, 0x67, 0xa3, 0x9f, 0xd1, 0x34, 0xd2, 0x08, 0xac, 0x45, 0x08, 0xec, 0xa4, 0x54, 0xbd, 0xd0, 0x45,
0x1d, 0x99, 0x6f, 0xe2, 0x43, 0x43, 0xda, 0x10, 0x7e, 0xb5, 0xe7, 0x1d, 0x55, 0xa3, 0xc2, 0x24, 0x1a, 0x81, 0x3e, 0x13, 0x17, 0xaa, 0xd2, 0xa4, 0x70, 0xcb, 0x5d, 0xe7, 0xb8, 0x1c, 0xe4, 0x26,
0x8f, 0x01, 0x04, 0x26, 0xd3, 0x2c, 0xa1, 0xd9, 0xf0, 0x95, 0x5f, 0x33, 0x85, 0xdd, 0xef, 0xcf, 0x79, 0x04, 0x20, 0x30, 0x9a, 0x25, 0x11, 0x4d, 0x46, 0x2f, 0xdd, 0x1d, 0xdd, 0xd8, 0xdd, 0xde,
0x99, 0x89, 0x66, 0x87, 0xd7, 0xc3, 0x97, 0x98, 0x62, 0x54, 0x82, 0x93, 0xc7, 0x10, 0xa4, 0xf4, 0x02, 0x99, 0x60, 0x7e, 0x39, 0x18, 0xbd, 0xc0, 0x18, 0x83, 0x42, 0x38, 0x79, 0x04, 0x5e, 0x4c,
0x26, 0xc6, 0x6c, 0x28, 0x5e, 0xe5, 0x0a, 0x93, 0xd8, 0x45, 0x8d, 0x25, 0x7b, 0x8d, 0x7e, 0xdd, 0xaf, 0x43, 0x4c, 0x46, 0xe2, 0x65, 0xaa, 0x30, 0x0a, 0x6d, 0xd6, 0x50, 0xb2, 0x57, 0xe8, 0x56,
0x64, 0xba, 0x97, 0xd2, 0x9b, 0x27, 0x05, 0xc0, 0xf5, 0x71, 0xcd, 0x5e, 0x23, 0xf9, 0x02, 0x00, 0x74, 0xa5, 0x3b, 0x31, 0xbd, 0x7e, 0x9c, 0x07, 0xd8, 0x39, 0x06, 0xec, 0x15, 0x92, 0x2f, 0x00,
0x6f, 0x72, 0x26, 0xa8, 0x62, 0x3c, 0xf3, 0xb7, 0x4c, 0xe6, 0xa0, 0x6f, 0x05, 0xec, 0x17, 0x02, 0xf0, 0x3a, 0x65, 0x82, 0x2a, 0xc6, 0x13, 0x77, 0x57, 0x57, 0xf6, 0x7a, 0x86, 0xc0, 0x5e, 0x4e,
0xf6, 0xbf, 0x2b, 0x04, 0x8c, 0x4a, 0xe8, 0xf0, 0x77, 0x0f, 0xf6, 0x17, 0x39, 0x91, 0x39, 0xcf, 0x60, 0xef, 0xbb, 0x9c, 0xc0, 0xa0, 0x10, 0xed, 0xff, 0xe9, 0x40, 0x7b, 0x19, 0x13, 0x99, 0xf2,
0x24, 0x92, 0xaf, 0xe1, 0x7d, 0x5a, 0x68, 0x16, 0x1b, 0x11, 0xa4, 0xef, 0xf5, 0xaa, 0x47, 0xad, 0x44, 0x22, 0xf9, 0x1a, 0xde, 0xa7, 0x39, 0x67, 0xa1, 0x26, 0x41, 0xba, 0x4e, 0xb7, 0x7c, 0x5c,
0xe3, 0xc3, 0xfe, 0x6c, 0x82, 0x56, 0xa8, 0x1a, 0x75, 0x66, 0xd7, 0x8c, 0x2d, 0xc9, 0x23, 0xd8, 0x3f, 0x39, 0xea, 0xcd, 0x37, 0x68, 0x0d, 0xab, 0x41, 0x73, 0xfe, 0x4c, 0xdb, 0x92, 0x3c, 0x84,
0x11, 0x9c, 0xab, 0x38, 0x67, 0x38, 0xc4, 0x98, 0x25, 0x96, 0xcf, 0xd3, 0xce, 0xdb, 0x77, 0xdd, 0x7d, 0xc1, 0xb9, 0x0a, 0x53, 0x86, 0x23, 0x0c, 0x59, 0x64, 0xf0, 0x3c, 0x6b, 0xbe, 0x79, 0xdb,
0xf7, 0xfe, 0x7e, 0xd7, 0x6d, 0x5c, 0x69, 0xff, 0xc5, 0x79, 0xd4, 0xd2, 0x28, 0x6b, 0x24, 0xe1, 0x79, 0xef, 0x9f, 0xb7, 0x9d, 0x6a, 0x3f, 0xf3, 0x5f, 0x5e, 0x04, 0xf5, 0x2c, 0xca, 0x18, 0x91,
0xdb, 0x79, 0x5d, 0x67, 0x3c, 0xd5, 0x71, 0x37, 0x2a, 0xd6, 0x67, 0xd0, 0x70, 0xca, 0x38, 0xa5, 0xff, 0x66, 0xd1, 0xd7, 0x39, 0x8f, 0xb3, 0xbc, 0x5b, 0x25, 0xeb, 0x53, 0xa8, 0x5a, 0x66, 0x2c,
0x48, 0x49, 0xa9, 0x2b, 0xfb, 0x15, 0x15, 0x10, 0xf2, 0x25, 0x74, 0xb8, 0x60, 0x63, 0x96, 0xd1, 0x53, 0xa4, 0xc0, 0x54, 0xdf, 0x9c, 0x82, 0x3c, 0x84, 0x7c, 0x09, 0x4d, 0x2e, 0xd8, 0x84, 0x25,
0x49, 0x41, 0x45, 0xdd, 0x50, 0xb1, 0x72, 0x64, 0x77, 0x0b, 0xac, 0xed, 0x3f, 0x7c, 0x02, 0x1f, 0x74, 0x9a, 0x43, 0x51, 0xd1, 0x50, 0xac, 0x5d, 0xd9, 0x83, 0x3c, 0xd6, 0xcc, 0xef, 0x3f, 0x86,
0xde, 0xea, 0xc4, 0x51, 0x5c, 0x2a, 0xc2, 0xbb, 0xb3, 0x88, 0xf0, 0x47, 0x38, 0x70, 0x61, 0xce, 0x0f, 0x6f, 0x4c, 0x62, 0x21, 0x2e, 0x34, 0xe1, 0xdc, 0xda, 0x84, 0xff, 0x23, 0x1c, 0xda, 0x34,
0xf9, 0xaf, 0xd9, 0x84, 0xd3, 0x64, 0xa3, 0x94, 0x84, 0x6f, 0x3c, 0xb8, 0xb7, 0x94, 0x60, 0xe3, 0x17, 0xfc, 0xb7, 0x64, 0xca, 0x69, 0xb4, 0x55, 0x48, 0xfc, 0xd7, 0x0e, 0xdc, 0x59, 0x29, 0xb0,
0xc3, 0x50, 0xea, 0xb9, 0x72, 0x77, 0xcf, 0x2f, 0x80, 0xb8, 0x92, 0x2e, 0xb2, 0x11, 0xdf, 0x6c, 0xf5, 0x65, 0x28, 0xcc, 0x5c, 0xba, 0x7d, 0xe6, 0xe7, 0x40, 0x6c, 0x4b, 0x97, 0xc9, 0x98, 0x6f,
0xbf, 0x67, 0xb3, 0x65, 0x60, 0x63, 0x2f, 0x8b, 0xf2, 0x1f, 0x0a, 0xfc, 0x61, 0x36, 0xa5, 0xe7, 0x77, 0xde, 0xf3, 0xb9, 0x18, 0x98, 0xdc, 0xab, 0xa4, 0xfc, 0x8f, 0x06, 0x7f, 0x98, 0x6f, 0xe9,
0x38, 0xc1, 0x0d, 0xaf, 0x94, 0x90, 0xce, 0x26, 0xa7, 0x88, 0xbe, 0x69, 0x3d, 0xc2, 0xbf, 0x3c, 0x05, 0x4e, 0x71, 0xcb, 0x92, 0xe2, 0xd3, 0xf9, 0xe6, 0xe4, 0xd9, 0xb7, 0xcd, 0x87, 0xff, 0xb7,
0xd8, 0x7b, 0xca, 0xa4, 0x72, 0x79, 0xe4, 0x5d, 0x0d, 0x1c, 0xc0, 0x56, 0x2e, 0x70, 0xc4, 0x6e, 0x03, 0xad, 0x27, 0x4c, 0x2a, 0x5b, 0x47, 0xde, 0x36, 0xc0, 0x21, 0xec, 0xa6, 0x02, 0xc7, 0xec,
0x5c, 0x0b, 0xce, 0x22, 0x5d, 0x68, 0x49, 0x45, 0x85, 0x8a, 0xe9, 0x48, 0x53, 0x57, 0x35, 0x87, 0xda, 0x8e, 0x60, 0x2d, 0xd2, 0x81, 0xba, 0x54, 0x54, 0xa8, 0x90, 0x8e, 0x33, 0xe8, 0xca, 0xfa,
0x60, 0x5c, 0x27, 0xda, 0x43, 0x0e, 0x01, 0x30, 0x4b, 0xe2, 0x01, 0x8e, 0xb8, 0x40, 0xf3, 0xe8, 0x12, 0xb4, 0xeb, 0x34, 0xf3, 0x90, 0x23, 0x00, 0x4c, 0xa2, 0x70, 0x88, 0x63, 0x2e, 0x50, 0xff,
0xda, 0x51, 0x13, 0xb3, 0xe4, 0xd4, 0x38, 0xc8, 0x03, 0x68, 0x0a, 0x1c, 0x4e, 0x85, 0x64, 0xbf, 0xe8, 0x1a, 0x41, 0x0d, 0x93, 0xe8, 0x4c, 0x3b, 0xc8, 0x3d, 0xa8, 0x09, 0x1c, 0xcd, 0x84, 0x64,
0xd8, 0x7d, 0xb7, 0x1d, 0xcd, 0x1d, 0x64, 0xbf, 0xf8, 0xa5, 0xd0, 0xcb, 0xad, 0x5e, 0xfc, 0x28, 0xbf, 0x1a, 0xbd, 0xdb, 0x0b, 0x16, 0x0e, 0xd2, 0xce, 0xbf, 0x14, 0x99, 0xb8, 0x55, 0xf2, 0x8f,
0x1c, 0x02, 0xe8, 0x66, 0xe3, 0xd1, 0x84, 0x8e, 0xa5, 0xdf, 0xe8, 0x79, 0x47, 0x8d, 0xa8, 0xa9, 0xc2, 0x11, 0x40, 0x36, 0x6c, 0x38, 0x9e, 0xd2, 0x89, 0x74, 0xab, 0x5d, 0xe7, 0xb8, 0x1a, 0xd4,
0x3d, 0x5f, 0x69, 0x47, 0xf8, 0xa7, 0x07, 0xfb, 0x8b, 0xad, 0x39, 0xf6, 0x3e, 0x87, 0x3a, 0x53, 0x32, 0xcf, 0x57, 0x99, 0xc3, 0xff, 0xcb, 0x81, 0xf6, 0xf2, 0x68, 0x16, 0xbd, 0xcf, 0xa1, 0xc2,
0x98, 0x16, 0x94, 0x7d, 0x32, 0xa7, 0x6c, 0x15, 0xbc, 0x7f, 0xa1, 0x30, 0x8d, 0xec, 0x0d, 0xad, 0x14, 0xc6, 0x39, 0x64, 0x1f, 0x2f, 0x20, 0x5b, 0x17, 0xde, 0xbb, 0x54, 0x18, 0x07, 0xe6, 0x45,
0x5f, 0xaa, 0xeb, 0xaf, 0x98, 0x0a, 0xcd, 0x77, 0x80, 0x50, 0xd3, 0x90, 0x99, 0xb6, 0x5e, 0x49, 0xc6, 0x5f, 0x9c, 0xf5, 0x5f, 0xd2, 0x1d, 0xea, 0xb3, 0x87, 0xb0, 0x93, 0x85, 0xcc, 0xb9, 0x75,
0xdb, 0xff, 0x35, 0x4d, 0xe4, 0x3e, 0x34, 0x99, 0x8c, 0x1d, 0xbf, 0x55, 0x93, 0x62, 0x9b, 0xc9, 0x0a, 0xdc, 0xbe, 0xd3, 0x36, 0x91, 0xbb, 0x50, 0x63, 0x32, 0xb4, 0xf8, 0x96, 0x75, 0x89, 0x3d,
0x2b, 0x63, 0x87, 0xcf, 0xf5, 0x30, 0xa8, 0x13, 0xa5, 0x04, 0x1b, 0x4c, 0xf5, 0xee, 0x2e, 0xa4, 0x26, 0xfb, 0xda, 0xf6, 0x9f, 0x65, 0xcb, 0xa0, 0x4e, 0x95, 0x12, 0x6c, 0x38, 0xcb, 0xb4, 0x3b,
0xea, 0x42, 0xcb, 0x8a, 0x13, 0x67, 0x34, 0x45, 0x97, 0x1e, 0xac, 0xeb, 0x92, 0xa6, 0xa8, 0x79, 0xa7, 0xaa, 0x03, 0x75, 0x43, 0x4e, 0x98, 0xd0, 0x18, 0x6d, 0x79, 0x30, 0xae, 0x2b, 0x1a, 0x63,
0xca, 0xa9, 0x50, 0x19, 0x8a, 0xd9, 0xf6, 0x8d, 0x9a, 0xce, 0x73, 0x91, 0x84, 0xbe, 0x5e, 0x2c, 0x86, 0x53, 0x4a, 0x85, 0x4a, 0x50, 0xcc, 0xd5, 0x37, 0xa8, 0x59, 0xcf, 0x65, 0xe4, 0xbb, 0x99,
0x8b, 0x81, 0x6d, 0xe7, 0xc7, 0x7f, 0xd4, 0x60, 0xfb, 0x99, 0xe3, 0x86, 0x5c, 0xc2, 0xce, 0x99, 0xb0, 0x2c, 0x27, 0x36, 0x93, 0xfb, 0x6d, 0x20, 0x7d, 0xc1, 0x7f, 0xc2, 0x51, 0xf1, 0xe7, 0xe7,
0x40, 0xaa, 0xd0, 0x11, 0x44, 0x4a, 0xa3, 0xb6, 0xe2, 0x57, 0x35, 0xf8, 0x68, 0xdd, 0xb1, 0x53, 0x7f, 0x06, 0xad, 0x25, 0xaf, 0x45, 0xf5, 0x3e, 0x34, 0x52, 0xe3, 0x0e, 0x25, 0x9d, 0xe6, 0x7b,
0xe1, 0x0a, 0x76, 0xec, 0x3e, 0x2c, 0xe2, 0x2d, 0x5f, 0x58, 0xd8, 0xfc, 0x41, 0x77, 0xed, 0xb9, 0x53, 0xb7, 0xbe, 0x01, 0x9d, 0xaa, 0x93, 0x3f, 0x2a, 0xb0, 0xf7, 0xd4, 0x62, 0x4d, 0xae, 0x60,
0x8b, 0xf8, 0x0d, 0xb4, 0x4a, 0x2f, 0x9a, 0x3c, 0x58, 0xc2, 0x97, 0x96, 0x48, 0x70, 0xb8, 0xe6, 0xff, 0x5c, 0x20, 0x55, 0x68, 0x01, 0x27, 0x85, 0xd5, 0x5d, 0xf3, 0x95, 0xf6, 0x3e, 0xda, 0x74,
0xd4, 0xc5, 0xfa, 0x1e, 0x3a, 0xc5, 0x16, 0x2c, 0xea, 0xeb, 0x2d, 0xdd, 0xb8, 0xb5, 0x88, 0x83, 0x6d, 0xeb, 0xf7, 0x61, 0xdf, 0xe8, 0x6b, 0x9e, 0x6f, 0xf5, 0xc1, 0xd2, 0x97, 0xc4, 0xeb, 0x6c,
0x8f, 0xff, 0x05, 0x31, 0xef, 0xda, 0xbe, 0xe5, 0xf5, 0x5d, 0x2f, 0x6c, 0x92, 0x15, 0x5d, 0xdf, 0xbc, 0xb7, 0x19, 0xbf, 0x81, 0x7a, 0x41, 0x21, 0xc8, 0xbd, 0x95, 0xf8, 0x02, 0x2a, 0xde, 0xd1,
0xda, 0x05, 0xcf, 0xa0, 0x5d, 0x1e, 0xdb, 0xb2, 0x2c, 0x2b, 0x1e, 0x76, 0x59, 0x96, 0x95, 0x8f, 0x86, 0x5b, 0x9b, 0xeb, 0x7b, 0x68, 0xe6, 0xaa, 0x9a, 0xf7, 0xd7, 0x5d, 0x79, 0x71, 0x43, 0xd8,
0xe3, 0x1a, 0x76, 0x17, 0xa7, 0x81, 0x2c, 0x54, 0xb0, 0x62, 0x00, 0x83, 0xde, 0x7a, 0x80, 0x0d, 0xbd, 0xfb, 0xff, 0x11, 0xb1, 0x98, 0xda, 0x68, 0xc3, 0xe6, 0xa9, 0x97, 0x94, 0x69, 0xcd, 0xd4,
0x7a, 0x5a, 0x7b, 0x51, 0xc9, 0x07, 0x83, 0x2d, 0xf3, 0x5f, 0xe4, 0xd1, 0x3f, 0x01, 0x00, 0x00, 0x37, 0xb4, 0xe5, 0x29, 0x34, 0x8a, 0x3f, 0x83, 0x22, 0x2d, 0x6b, 0x84, 0xa2, 0x48, 0xcb, 0xda,
0xff, 0xff, 0x5a, 0x2a, 0xfb, 0x35, 0x82, 0x0a, 0x00, 0x00, 0x1f, 0xdb, 0x00, 0x0e, 0x96, 0xb7, 0x8b, 0x2c, 0x75, 0xb0, 0x66, 0xa1, 0xbd, 0xee, 0xe6, 0x80,
0x05, 0x33, 0x85, 0x15, 0x2c, 0x32, 0xb3, 0xba, 0xaf, 0x45, 0x66, 0xd6, 0xec, 0xed, 0xd9, 0xce,
0xf3, 0x52, 0x3a, 0x1c, 0xee, 0xea, 0xff, 0x49, 0x0f, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x14,
0x86, 0xb1, 0x2d, 0x1e, 0x0b, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -943,6 +1016,7 @@ type MetainfoClient interface {
DeleteSegment(ctx context.Context, in *SegmentDeleteRequest, opts ...grpc.CallOption) (*SegmentDeleteResponse, error) DeleteSegment(ctx context.Context, in *SegmentDeleteRequest, opts ...grpc.CallOption) (*SegmentDeleteResponse, error)
ListSegments(ctx context.Context, in *ListSegmentsRequest, opts ...grpc.CallOption) (*ListSegmentsResponse, error) ListSegments(ctx context.Context, in *ListSegmentsRequest, opts ...grpc.CallOption) (*ListSegmentsResponse, error)
SetAttribution(ctx context.Context, in *SetAttributionRequest, opts ...grpc.CallOption) (*SetAttributionResponse, error) SetAttribution(ctx context.Context, in *SetAttributionRequest, opts ...grpc.CallOption) (*SetAttributionResponse, error)
ProjectInfo(ctx context.Context, in *ProjectInfoRequest, opts ...grpc.CallOption) (*ProjectInfoResponse, error)
} }
type metainfoClient struct { type metainfoClient struct {
@ -1016,6 +1090,15 @@ func (c *metainfoClient) SetAttribution(ctx context.Context, in *SetAttributionR
return out, nil return out, nil
} }
func (c *metainfoClient) ProjectInfo(ctx context.Context, in *ProjectInfoRequest, opts ...grpc.CallOption) (*ProjectInfoResponse, error) {
out := new(ProjectInfoResponse)
err := c.cc.Invoke(ctx, "/metainfo.Metainfo/ProjectInfo", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// MetainfoServer is the server API for Metainfo service. // MetainfoServer is the server API for Metainfo service.
type MetainfoServer interface { type MetainfoServer interface {
CreateSegment(context.Context, *SegmentWriteRequest) (*SegmentWriteResponse, error) CreateSegment(context.Context, *SegmentWriteRequest) (*SegmentWriteResponse, error)
@ -1025,6 +1108,7 @@ type MetainfoServer interface {
DeleteSegment(context.Context, *SegmentDeleteRequest) (*SegmentDeleteResponse, error) DeleteSegment(context.Context, *SegmentDeleteRequest) (*SegmentDeleteResponse, error)
ListSegments(context.Context, *ListSegmentsRequest) (*ListSegmentsResponse, error) ListSegments(context.Context, *ListSegmentsRequest) (*ListSegmentsResponse, error)
SetAttribution(context.Context, *SetAttributionRequest) (*SetAttributionResponse, error) SetAttribution(context.Context, *SetAttributionRequest) (*SetAttributionResponse, error)
ProjectInfo(context.Context, *ProjectInfoRequest) (*ProjectInfoResponse, error)
} }
func RegisterMetainfoServer(s *grpc.Server, srv MetainfoServer) { func RegisterMetainfoServer(s *grpc.Server, srv MetainfoServer) {
@ -1157,6 +1241,24 @@ func _Metainfo_SetAttribution_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _Metainfo_ProjectInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ProjectInfoRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MetainfoServer).ProjectInfo(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/metainfo.Metainfo/ProjectInfo",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MetainfoServer).ProjectInfo(ctx, req.(*ProjectInfoRequest))
}
return interceptor(ctx, in, info, handler)
}
var _Metainfo_serviceDesc = grpc.ServiceDesc{ var _Metainfo_serviceDesc = grpc.ServiceDesc{
ServiceName: "metainfo.Metainfo", ServiceName: "metainfo.Metainfo",
HandlerType: (*MetainfoServer)(nil), HandlerType: (*MetainfoServer)(nil),
@ -1189,6 +1291,10 @@ var _Metainfo_serviceDesc = grpc.ServiceDesc{
MethodName: "SetAttribution", MethodName: "SetAttribution",
Handler: _Metainfo_SetAttribution_Handler, Handler: _Metainfo_SetAttribution_Handler,
}, },
{
MethodName: "ProjectInfo",
Handler: _Metainfo_ProjectInfo_Handler,
},
}, },
Streams: []grpc.StreamDesc{}, Streams: []grpc.StreamDesc{},
Metadata: "metainfo.proto", Metadata: "metainfo.proto",

View File

@ -21,6 +21,7 @@ service Metainfo {
rpc DeleteSegment(SegmentDeleteRequest) returns (SegmentDeleteResponse); rpc DeleteSegment(SegmentDeleteRequest) returns (SegmentDeleteResponse);
rpc ListSegments(ListSegmentsRequest) returns (ListSegmentsResponse); rpc ListSegments(ListSegmentsRequest) returns (ListSegmentsResponse);
rpc SetAttribution(SetAttributionRequest) returns (SetAttributionResponse); rpc SetAttribution(SetAttributionRequest) returns (SetAttributionResponse);
rpc ProjectInfo(ProjectInfoRequest) returns (ProjectInfoResponse);
} }
message AddressedOrderLimit { message AddressedOrderLimit {
@ -55,7 +56,7 @@ message SegmentCommitResponse {
} }
message SegmentDownloadRequest { message SegmentDownloadRequest {
bytes bucket = 1; bytes bucket = 1;
bytes path = 2; bytes path = 2;
int64 segment = 3; int64 segment = 3;
} }
@ -66,7 +67,7 @@ message SegmentDownloadResponse {
} }
message SegmentInfoRequest { message SegmentInfoRequest {
bytes bucket = 1; bytes bucket = 1;
bytes path = 2; bytes path = 2;
int64 segment = 3; int64 segment = 3;
} }
@ -101,7 +102,7 @@ message ListSegmentsResponse {
pointerdb.Pointer pointer = 2; pointerdb.Pointer pointer = 2;
bool is_prefix = 3; bool is_prefix = 3;
} }
repeated Item items = 1; repeated Item items = 1;
bool more = 2; bool more = 2;
} }
@ -112,4 +113,11 @@ message SetAttributionRequest{
} }
message SetAttributionResponse { message SetAttributionResponse {
} }
message ProjectInfoRequest {
}
message ProjectInfoResponse {
bytes project_salt = 1;
}

View File

@ -1789,6 +1789,19 @@
}, },
{ {
"name": "SetAttributionResponse" "name": "SetAttributionResponse"
},
{
"name": "ProjectInfoRequest"
},
{
"name": "ProjectInfoResponse",
"fields": [
{
"id": 1,
"name": "project_salt",
"type": "bytes"
}
]
} }
], ],
"services": [ "services": [
@ -1829,6 +1842,11 @@
"name": "SetAttribution", "name": "SetAttribution",
"in_type": "SetAttributionRequest", "in_type": "SetAttributionRequest",
"out_type": "SetAttributionResponse" "out_type": "SetAttributionResponse"
},
{
"name": "ProjectInfo",
"in_type": "ProjectInfoRequest",
"out_type": "ProjectInfoResponse"
} }
] ]
} }

View File

@ -5,6 +5,7 @@ package metainfo
import ( import (
"context" "context"
"crypto/sha256"
"errors" "errors"
"strconv" "strconv"
"time" "time"
@ -579,3 +580,22 @@ func bytesToUUID(data []byte) (uuid.UUID, error) {
return id, nil return id, nil
} }
// ProjectInfo returns allowed ProjectInfo for the provided API key
func (endpoint *Endpoint) ProjectInfo(ctx context.Context, req *pb.ProjectInfoRequest) (_ *pb.ProjectInfoResponse, err error) {
defer mon.Task()(&ctx)(&err)
keyInfo, err := endpoint.validateAuth(ctx, macaroon.Action{
Op: macaroon.ActionProjectInfo,
Time: time.Now(),
})
if err != nil {
return nil, status.Errorf(codes.Unauthenticated, err.Error())
}
salt := sha256.Sum256(keyInfo.ProjectID[:])
return &pb.ProjectInfoResponse{
ProjectSalt: salt[:],
}, nil
}