Add metadate management in grpc
All checks were successful
Build and Push Docker Image / build_and_push (push) Successful in 2m7s

This commit is contained in:
Arnaud Delcasse
2026-01-14 00:38:18 +01:00
parent 44f5a3d182
commit bc7ba530d4
3 changed files with 46 additions and 11 deletions

View File

@@ -19,6 +19,7 @@ func (a Account) ToStorageType() storage.Account {
ID: a.Id, ID: a.Id,
Namespace: a.Namespace, Namespace: a.Namespace,
Data: map[string]any{}, Data: map[string]any{},
Metadata: map[string]any{},
Authentication: storage.AccountAuth{ Authentication: storage.AccountAuth{
Local: localauth, Local: localauth,
}, },
@@ -35,6 +36,17 @@ func (a Account) ToStorageType() storage.Account {
account.Data[k] = data account.Data[k] = data
} }
for k, d := range a.Metadata.GetFields() {
jsondata, err := protojson.Marshal(d)
if err != nil {
log.Error().Err(err).Msg("")
break
}
var data any
json.Unmarshal(jsondata, &data)
account.Metadata[k] = data
}
return account return account
} }
@@ -84,10 +96,22 @@ func AccountFromStorageType(account *storage.Account) (*Account, error) {
return nil, err return nil, err
} }
m, err := sanitizeData(account.Metadata)
if err != nil {
return nil, err
}
metadata, err := structpb.NewStruct(m)
if err != nil {
log.Error().Err(err).Msg("")
return nil, err
}
return &Account{ return &Account{
Id: account.ID, Id: account.ID,
Namespace: account.Namespace, Namespace: account.Namespace,
Data: data, Data: data,
Metadata: metadata,
Authentication: &AccountAuth{ Authentication: &AccountAuth{
Local: lc, Local: lc,
}, },

View File

@@ -28,6 +28,7 @@ type Account struct {
Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"`
Authentication *AccountAuth `protobuf:"bytes,3,opt,name=authentication,proto3" json:"authentication,omitempty"` Authentication *AccountAuth `protobuf:"bytes,3,opt,name=authentication,proto3" json:"authentication,omitempty"`
Data *structpb.Struct `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` Data *structpb.Struct `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"`
Metadata *structpb.Struct `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
@@ -90,6 +91,13 @@ func (x *Account) GetData() *structpb.Struct {
return nil return nil
} }
func (x *Account) GetMetadata() *structpb.Struct {
if x != nil {
return x.Metadata
}
return nil
}
type AccountAuth struct { type AccountAuth struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
Local *LocalAuth `protobuf:"bytes,7,opt,name=local,proto3,oneof" json:"local,omitempty"` //TODO SSO Local *LocalAuth `protobuf:"bytes,7,opt,name=local,proto3,oneof" json:"local,omitempty"` //TODO SSO
@@ -274,12 +282,13 @@ var File_accounts_proto protoreflect.FileDescriptor
const file_accounts_proto_rawDesc = "" + const file_accounts_proto_rawDesc = "" +
"\n" + "\n" +
"\x0eaccounts.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x9a\x01\n" + "\x0eaccounts.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xcf\x01\n" +
"\aAccount\x12\x0e\n" + "\aAccount\x12\x0e\n" +
"\x02id\x18\x01 \x01(\tR\x02id\x12\x1c\n" + "\x02id\x18\x01 \x01(\tR\x02id\x12\x1c\n" +
"\tnamespace\x18\x02 \x01(\tR\tnamespace\x124\n" + "\tnamespace\x18\x02 \x01(\tR\tnamespace\x124\n" +
"\x0eauthentication\x18\x03 \x01(\v2\f.AccountAuthR\x0eauthentication\x12+\n" + "\x0eauthentication\x18\x03 \x01(\v2\f.AccountAuthR\x0eauthentication\x12+\n" +
"\x04data\x18\x04 \x01(\v2\x17.google.protobuf.StructR\x04data\">\n" + "\x04data\x18\x04 \x01(\v2\x17.google.protobuf.StructR\x04data\x123\n" +
"\bmetadata\x18\x05 \x01(\v2\x17.google.protobuf.StructR\bmetadata\">\n" +
"\vAccountAuth\x12%\n" + "\vAccountAuth\x12%\n" +
"\x05local\x18\a \x01(\v2\n" + "\x05local\x18\a \x01(\v2\n" +
".LocalAuthH\x00R\x05local\x88\x01\x01B\b\n" + ".LocalAuthH\x00R\x05local\x88\x01\x01B\b\n" +
@@ -325,14 +334,15 @@ var file_accounts_proto_goTypes = []any{
var file_accounts_proto_depIdxs = []int32{ var file_accounts_proto_depIdxs = []int32{
1, // 0: Account.authentication:type_name -> AccountAuth 1, // 0: Account.authentication:type_name -> AccountAuth
4, // 1: Account.data:type_name -> google.protobuf.Struct 4, // 1: Account.data:type_name -> google.protobuf.Struct
2, // 2: AccountAuth.local:type_name -> LocalAuth 4, // 2: Account.metadata:type_name -> google.protobuf.Struct
3, // 3: LocalAuth.email_validation:type_name -> Validation 2, // 3: AccountAuth.local:type_name -> LocalAuth
3, // 4: LocalAuth.phone_number_validation:type_name -> Validation 3, // 4: LocalAuth.email_validation:type_name -> Validation
5, // [5:5] is the sub-list for method output_type 3, // 5: LocalAuth.phone_number_validation:type_name -> Validation
5, // [5:5] is the sub-list for method input_type 6, // [6:6] is the sub-list for method output_type
5, // [5:5] is the sub-list for extension type_name 6, // [6:6] is the sub-list for method input_type
5, // [5:5] is the sub-list for extension extendee 6, // [6:6] is the sub-list for extension type_name
0, // [0:5] is the sub-list for field type_name 6, // [6:6] is the sub-list for extension extendee
0, // [0:6] is the sub-list for field type_name
} }
func init() { file_accounts_proto_init() } func init() { file_accounts_proto_init() }

View File

@@ -9,6 +9,7 @@ message Account {
string namespace = 2; string namespace = 2;
AccountAuth authentication = 3; AccountAuth authentication = 3;
google.protobuf.Struct data = 4; google.protobuf.Struct data = 4;
google.protobuf.Struct metadata = 5;
} }
message AccountAuth { message AccountAuth {