feat: add EIP712 verification, auth service implemention and jwt gen
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"backend/pkg/errors"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
)
|
||||
|
||||
func IsValidPhone(value string) (bool, error) {
|
||||
re := regexp.MustCompile(`^(?:0|\+98|0098)(\d{10})$`)
|
||||
result := re.FindStringSubmatch(value)
|
||||
if len(result) > 0 {
|
||||
return true, nil
|
||||
}
|
||||
return false, errors.ErrPhoneInvalid
|
||||
}
|
||||
|
||||
func IsValidNationalID(value string) (bool, error) {
|
||||
valueCount := len(value)
|
||||
if valueCount < 8 {
|
||||
return false, errors.ErrNationalIDInvalid
|
||||
}
|
||||
|
||||
if valueCount >= 8 && valueCount < 10 {
|
||||
value = strings.Repeat("0", 10-valueCount) + value
|
||||
}
|
||||
|
||||
var valueSlices []uint8
|
||||
for _, s := range value {
|
||||
i, err := strconv.ParseInt(string(s), 10, 8)
|
||||
if err != nil {
|
||||
return false, errors.ErrNationalIDInvalid
|
||||
}
|
||||
valueSlices = append(valueSlices, uint8(i))
|
||||
}
|
||||
|
||||
s := calculateNationalIDNumbers(&valueSlices)
|
||||
|
||||
s %= 11
|
||||
l := valueSlices[len(value)-1]
|
||||
if (s < 2 && s != int(l)) || (s >= 2 && int(l) != 11-s) {
|
||||
return false, errors.ErrNationalIDInvalid
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func calculateNationalIDNumbers(valueSlices *[]uint8) (sum int) {
|
||||
var i uint8
|
||||
for i = 10; i >= 2; i-- {
|
||||
sum += int(i * (*valueSlices)[10-i])
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
func IsValidPublicKey(value string) (bool, error) {
|
||||
if !common.IsHexAddress(value) {
|
||||
return false, errors.ErrWalletInvalid
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
Reference in New Issue
Block a user