github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/sys/authnz/impl_refreshprincipaltoken.go (about)

     1  /*
     2   * Copyright (c) 2021-present unTill Pro, Ltd.
     3   */
     4  
     5  package authnz
     6  
     7  import (
     8  	"context"
     9  	"fmt"
    10  
    11  	"github.com/voedger/voedger/pkg/istructs"
    12  	"github.com/voedger/voedger/pkg/istructsmem"
    13  	"github.com/voedger/voedger/pkg/itokens"
    14  	payloads "github.com/voedger/voedger/pkg/itokens-payloads"
    15  	"github.com/voedger/voedger/pkg/state"
    16  )
    17  
    18  func provideRefreshPrincipalTokenExec(itokens itokens.ITokens) istructsmem.ExecQueryClosure {
    19  	return func(_ context.Context, args istructs.ExecQueryArgs, callback istructs.ExecQueryCallback) (err error) {
    20  		existingPrincipalToken, err := state.GetPrincipalTokenFromState(args.State)
    21  		if err != nil {
    22  			return err
    23  		}
    24  
    25  		principalPayload := payloads.PrincipalPayload{}
    26  		gp, err := payloads.GetPayloadRegistry(itokens, existingPrincipalToken, &principalPayload)
    27  		if err != nil {
    28  			return err
    29  		}
    30  
    31  		newPrincipalToken, err := itokens.IssueToken(gp.AppQName, gp.Duration, &principalPayload)
    32  		if err != nil {
    33  			return fmt.Errorf("token issue failed: %w", err)
    34  		}
    35  
    36  		issuePrincipalTokenRR := &issuePrincipalTokenRR{
    37  			principalToken: newPrincipalToken,
    38  		}
    39  		return callback(issuePrincipalTokenRR)
    40  	}
    41  }
    42  
    43  type issuePrincipalTokenRR struct {
    44  	istructs.NullObject
    45  	principalToken string
    46  }
    47  
    48  func (ipt *issuePrincipalTokenRR) AsString(string) string {
    49  	return ipt.principalToken
    50  }