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 }