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:
commit
2746b1b7bc
44 changed files with 1682 additions and 1368 deletions
48
util/metricsid/metricsid.go
Normal file
48
util/metricsid/metricsid.go
Normal 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())
|
||||
}
|
20
util/metricsid/metricsid_test.go
Normal file
20
util/metricsid/metricsid_test.go
Normal 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)
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue