mirror of
https://github.com/status-im/status-go.git
synced 2025-01-14 00:36:40 +00:00
bf56cb7ee2
When a user updates the preferred name, we should just ignore if the name is an ENS name, because the ENS name is set only in the ENS popup. But this also means that if a user set the profile name to an ENS name, this change will also be ignored.
75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package common
|
|
|
|
import (
|
|
"crypto/ecdsa"
|
|
"errors"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/status-im/status-go/eth-node/crypto"
|
|
"github.com/status-im/status-go/protocol/identity/alias"
|
|
"github.com/status-im/status-go/protocol/protobuf"
|
|
)
|
|
|
|
var ErrInvalidDisplayNameRegExp = errors.New("only letters, numbers, underscores and hyphens allowed")
|
|
var ErrInvalidDisplayNameEthSuffix = errors.New(`usernames ending with "eth" are not allowed`)
|
|
var ErrInvalidDisplayNameNotAllowed = errors.New("name is not allowed")
|
|
|
|
var DISPLAY_NAME_EXT = []string{"_eth", ".eth", "-eth"}
|
|
|
|
func RecoverKey(m *protobuf.ApplicationMetadataMessage) (*ecdsa.PublicKey, error) {
|
|
if m.Signature == nil {
|
|
return nil, nil
|
|
}
|
|
|
|
recoveredKey, err := crypto.SigToPub(
|
|
crypto.Keccak256(m.Payload),
|
|
m.Signature,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return recoveredKey, nil
|
|
}
|
|
|
|
func ValidateDisplayName(displayName *string) error {
|
|
name := strings.TrimSpace(*displayName)
|
|
*displayName = name
|
|
|
|
if name == "" {
|
|
return nil
|
|
}
|
|
|
|
// ^[\\w-\\s]{5,24}$ to allow spaces
|
|
if match, _ := regexp.MatchString("^[\\w-\\s]{5,24}$", name); !match {
|
|
return ErrInvalidDisplayNameRegExp
|
|
}
|
|
|
|
// .eth should not happen due to the regexp above, but let's keep it here in case the regexp is changed in the future
|
|
for _, ext := range DISPLAY_NAME_EXT {
|
|
if strings.HasSuffix(*displayName, ext) {
|
|
return ErrInvalidDisplayNameEthSuffix
|
|
}
|
|
}
|
|
|
|
if alias.IsAlias(name) {
|
|
return ErrInvalidDisplayNameNotAllowed
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// implementation referenced from https://github.com/embarklabs/embark/blob/master/packages/plugins/ens/src/index.js
|
|
func IsENSName(displayName string) bool {
|
|
if len(displayName) == 0 {
|
|
return false
|
|
}
|
|
|
|
if strings.HasSuffix(displayName, ".eth") {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|