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  }