github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/state/impl_subject_storage.go (about)

     1  /*
     2   * Copyright (c) 2023-present unTill Pro, Ltd.
     3   */
     4  
     5  package state
     6  
     7  import (
     8  	"github.com/voedger/voedger/pkg/appdef"
     9  	"github.com/voedger/voedger/pkg/iauthnz"
    10  	"github.com/voedger/voedger/pkg/istructs"
    11  )
    12  
    13  type subjectStorage struct {
    14  	principalsFunc PrincipalsFunc
    15  	tokenFunc      TokenFunc
    16  }
    17  
    18  func (s *subjectStorage) NewKeyBuilder(_ appdef.QName, _ istructs.IStateKeyBuilder) istructs.IStateKeyBuilder {
    19  	return newKeyBuilder(RequestSubject, appdef.NullQName)
    20  }
    21  func (s *subjectStorage) Get(_ istructs.IStateKeyBuilder) (istructs.IStateValue, error) {
    22  	ssv := &requestSubjectValue{
    23  		token: s.tokenFunc(),
    24  	}
    25  	for _, principal := range s.principalsFunc() {
    26  		if principal.Kind == iauthnz.PrincipalKind_Device || principal.Kind == iauthnz.PrincipalKind_User {
    27  			ssv.profileWSID = int64(principal.WSID)
    28  			ssv.name = principal.Name
    29  			if principal.Kind == iauthnz.PrincipalKind_Device {
    30  				ssv.kind = int32(istructs.SubjectKind_Device)
    31  			} else {
    32  				ssv.kind = int32(istructs.SubjectKind_User)
    33  			}
    34  			break
    35  		}
    36  	}
    37  	return ssv, nil
    38  }