github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/sys/verifier/utils.go (about) 1 /* 2 * Copyright (c) 2020-present unTill Pro, Ltd. 3 */ 4 5 package verifier 6 7 import ( 8 "net/http" 9 10 "github.com/voedger/voedger/pkg/appdef" 11 "github.com/voedger/voedger/pkg/istructs" 12 "github.com/voedger/voedger/pkg/itokens" 13 payloads "github.com/voedger/voedger/pkg/itokens-payloads" 14 coreutils "github.com/voedger/voedger/pkg/utils" 15 ) 16 17 func NewVerificationToken(entity string, field, value string, kind appdef.VerificationKind, targetWSID istructs.WSID, itokens itokens.ITokens, appTokens istructs.IAppTokens) (token, code string, err error) { 18 verificationCode, err := coreutils.EmailVerificationCode() 19 if err != nil { 20 // notest 21 return "", "", err 22 } 23 verificationCodeHash := itokens.CryptoHash256([]byte(verificationCode)) 24 25 entityQName, err := appdef.ParseQName(entity) 26 if err != nil { 27 return "", "", err 28 } 29 vp := payloads.VerificationPayload{ 30 VerifiedValuePayload: payloads.VerifiedValuePayload{ 31 VerificationKind: kind, 32 Entity: entityQName, 33 Field: field, 34 Value: value, 35 WSID: targetWSID, 36 }, 37 Hash256: verificationCodeHash, 38 } 39 40 token, err = appTokens.IssueToken(VerificationTokenDuration, &vp) 41 return token, verificationCode, err 42 } 43 44 func IssueVerfiedValueToken(token, code string, appTokens istructs.IAppTokens, itokens itokens.ITokens) (verifiedValueToken string, err error) { 45 vp := payloads.VerificationPayload{} 46 if _, err = appTokens.ValidateToken(token, &vp); err != nil { 47 return "", coreutils.NewHTTPError(http.StatusBadRequest, err) 48 } 49 if vp.Hash256 != itokens.CryptoHash256([]byte(code)) { 50 return "", coreutils.NewHTTPErrorf(http.StatusBadRequest, "invalid verification code") 51 } 52 if verifiedValueToken, err = appTokens.IssueToken(VerifiedValueTokenDuration, &vp.VerifiedValuePayload); err != nil { 53 return "", err 54 } 55 return 56 }