1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-09 17:44:59 +09:00

GO-4616 Merge main

This commit is contained in:
kirillston 2024-12-10 14:10:59 +01:00
commit 2746b1b7bc
No known key found for this signature in database
GPG key ID: BE4BF014F0ECDFE8
44 changed files with 1682 additions and 1368 deletions

View file

@ -0,0 +1,48 @@
package metricsid
import (
"bytes"
"github.com/anyproto/any-sync/util/crypto"
"github.com/anyproto/any-sync/util/strkey"
"github.com/anyproto/go-slip10"
)
const (
metricsVersionByte strkey.VersionByte = 0xce
MetricsDerivationPath = "m/99999'/0'"
)
func deriveFromPrivKey(path string, privKey crypto.PrivKey) (key crypto.PrivKey, err error) {
rawBytes, err := privKey.Raw()
if err != nil {
return nil, err
}
node, err := slip10.DeriveForPath(path, rawBytes)
if err != nil {
return nil, err
}
return genKey(node)
}
func genKey(node slip10.Node) (key crypto.PrivKey, err error) {
reader := bytes.NewReader(node.RawSeed())
key, _, err = crypto.GenerateEd25519Key(reader)
return
}
func encodeMetricsId(pubKey crypto.PubKey) (string, error) {
raw, err := pubKey.Raw()
if err != nil {
return "", err
}
return strkey.Encode(metricsVersionByte, raw)
}
func DeriveMetricsId(privKey crypto.PrivKey) (string, error) {
key, err := deriveFromPrivKey(MetricsDerivationPath, privKey)
if err != nil {
return "", err
}
return encodeMetricsId(key.GetPublic())
}

View file

@ -0,0 +1,20 @@
package metricsid
import (
"testing"
"github.com/anyproto/any-sync/util/crypto"
"github.com/anyproto/any-sync/util/strkey"
"github.com/stretchr/testify/require"
)
func TestMetrics(t *testing.T) {
privKey, _, err := crypto.GenerateRandomEd25519KeyPair()
require.NoError(t, err)
res, err := DeriveMetricsId(privKey)
require.NoError(t, err)
decoded, err := strkey.Decode(metricsVersionByte, res)
require.NoError(t, err)
_, err = crypto.NewSigningEd25519PubKeyFromBytes(decoded)
require.NoError(t, err)
}

View file

@ -131,8 +131,9 @@ func IsEmptyValueOrAbsent(s *types.Struct, name string) bool {
return IsEmptyValue(value)
}
// IsEmptyValue returns true for nil, null value, unknown kind of value, empty strings and empty lists
func IsEmptyValue(value *types.Value) bool {
if value == nil {
if IsNullValue(value) {
return true
}
@ -140,22 +141,18 @@ func IsEmptyValue(value *types.Value) bool {
return len(v.StringValue) == 0
}
if v, ok := value.Kind.(*types.Value_NumberValue); ok {
return v.NumberValue == 0
if _, ok := value.Kind.(*types.Value_NumberValue); ok {
return false
}
if v, ok := value.Kind.(*types.Value_BoolValue); ok {
return !v.BoolValue
if _, ok := value.Kind.(*types.Value_BoolValue); ok {
return false
}
if _, ok := value.Kind.(*types.Value_ListValue); ok {
return len(GetStringListValue(value)) == 0
}
if _, ok := value.Kind.(*types.Value_NullValue); ok {
return true
}
if _, ok := value.Kind.(*types.Value_StructValue); ok {
return false
}
@ -163,6 +160,16 @@ func IsEmptyValue(value *types.Value) bool {
return true
}
func IsNullValue(value *types.Value) bool {
if value == nil {
return true
}
if _, ok := value.Kind.(*types.Value_NullValue); ok {
return true
}
return false
}
func GetStruct(s *types.Struct, name string) *types.Struct {
if s == nil || s.Fields == nil {
return nil

View file

@ -163,9 +163,9 @@ func TestIsEmptyValueOrAbsent(t *testing.T) {
{"AbsentField", data, "nonExistentField", true},
{"EmptyStringValue", data, "emptyStringValue", true},
{"NonEmptyStringValue", data, "stringValue", false},
{"ZeroNumberValue", data, "emptyNumberValue", true},
{"ZeroNumberValue", data, "emptyNumberValue", false},
{"NonZeroNumberValue", data, "numberValue", false},
{"FalseBoolValue", data, "emptyBoolValue", true},
{"FalseBoolValue", data, "emptyBoolValue", false},
{"TrueBoolValue", data, "boolValue", false},
{"EmptyListValue", data, "emptyListValue", true},
{"NullValue", data, "nullValue", true},