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 }