github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/sys/invite/utils.go (about) 1 /* 2 * Copyright (c) 2020-present unTill Pro, Ltd. 3 * @author Denis Gribanov 4 */ 5 6 package invite 7 8 import ( 9 "github.com/voedger/voedger/pkg/appdef" 10 "github.com/voedger/voedger/pkg/istructs" 11 "github.com/voedger/voedger/pkg/state" 12 coreutils "github.com/voedger/voedger/pkg/utils" 13 ) 14 15 func GetCDocJoinedWorkspaceForUpdateRequired(st istructs.IState, intents istructs.IIntents, invitingWorkspaceWSID int64) (svbCDocJoinedWorkspace istructs.IStateValueBuilder, err error) { 16 skbViewJoinedWorkspaceIndex, err := st.KeyBuilder(state.View, QNameViewJoinedWorkspaceIndex) 17 if err != nil { 18 // notest 19 return nil, err 20 } 21 skbViewJoinedWorkspaceIndex.PutInt32(field_Dummy, value_Dummy_Two) 22 skbViewJoinedWorkspaceIndex.PutInt64(Field_InvitingWorkspaceWSID, invitingWorkspaceWSID) 23 svViewJoinedWorkspaceIndex, err := st.MustExist(skbViewJoinedWorkspaceIndex) 24 if err != nil { 25 return nil, err 26 } 27 skb, err := st.KeyBuilder(state.Record, QNameCDocJoinedWorkspace) 28 if err != nil { 29 // notest 30 return nil, err 31 } 32 skb.PutRecordID(state.Field_ID, svViewJoinedWorkspaceIndex.AsRecordID(field_JoinedWorkspaceID)) 33 svCDocJoinedWorkspace, err := st.MustExist(skb) 34 if err != nil { 35 return nil, err 36 } 37 svbCDocJoinedWorkspace, err = intents.UpdateValue(skb, svCDocJoinedWorkspace) 38 return 39 } 40 41 func GetCDocJoinedWorkspace(st istructs.IState, invitingWorkspaceWSID int64) (svbCDocJoinedWorkspace istructs.IStateValue, skb istructs.IStateKeyBuilder, ok bool, err error) { 42 skbViewJoinedWorkspaceIndex, err := st.KeyBuilder(state.View, QNameViewJoinedWorkspaceIndex) 43 if err != nil { 44 // notest 45 return nil, nil, false, err 46 } 47 skbViewJoinedWorkspaceIndex.PutInt32(field_Dummy, value_Dummy_Two) 48 skbViewJoinedWorkspaceIndex.PutInt64(Field_InvitingWorkspaceWSID, invitingWorkspaceWSID) 49 svViewJoinedWorkspaceIndex, ok, err := st.CanExist(skbViewJoinedWorkspaceIndex) 50 if err != nil { 51 // notest 52 return nil, nil, false, err 53 } 54 if !ok { 55 return nil, nil, false, nil 56 } 57 58 skb, err = st.KeyBuilder(state.Record, QNameCDocJoinedWorkspace) 59 if err != nil { 60 // notest 61 return nil, nil, false, err 62 } 63 skb.PutRecordID(state.Field_ID, svViewJoinedWorkspaceIndex.AsRecordID(field_JoinedWorkspaceID)) 64 svbCDocJoinedWorkspace, ok, err = st.CanExist(skb) 65 return svbCDocJoinedWorkspace, skb, ok, err 66 } 67 68 func GetCDocJoinedWorkspaceForUpdate(st istructs.IState, intents istructs.IIntents, invitingWorkspaceWSID int64) (svbCDocJoinedWorkspace istructs.IStateValueBuilder, ok bool, err error) { 69 svCDocJoinedWorkspace, skb, ok, err := GetCDocJoinedWorkspace(st, invitingWorkspaceWSID) 70 if err != nil || !ok { 71 return nil, false, err 72 } 73 svbCDocJoinedWorkspace, err = intents.UpdateValue(skb, svCDocJoinedWorkspace) 74 return svbCDocJoinedWorkspace, true, err 75 } 76 77 func GetSubjectIdxViewKeyBuilder(login string, s istructs.IState) (istructs.IStateKeyBuilder, error) { 78 skbViewSubjectsIdx, err := s.KeyBuilder(state.View, QNameViewSubjectsIdx) 79 if err != nil { 80 // notest 81 return nil, err 82 } 83 skbViewSubjectsIdx.PutInt64(Field_LoginHash, coreutils.HashBytes([]byte(login))) 84 skbViewSubjectsIdx.PutString(Field_Login, login) 85 return skbViewSubjectsIdx, nil 86 } 87 88 // checks cdoc.sys.SubjectIdx existence by login as cdoc.sys.Invite.EMail and as token.Login 89 func SubjectExistByBothLogins(login string, st istructs.IState) (ok bool, actualLogin string, _ error) { 90 subjectExists, err := SubjectExistsByLogin(login, st) // for backward compatibility 91 if err != nil { 92 return false, "", err 93 } 94 skbPrincipal, err := st.KeyBuilder(state.RequestSubject, appdef.NullQName) 95 if err != nil { 96 return false, "", err 97 } 98 svPrincipal, err := st.MustExist(skbPrincipal) 99 if err != nil { 100 return 101 } 102 actualLogin = svPrincipal.AsString(state.Field_Name) 103 if !subjectExists { 104 subjectExists, err = SubjectExistsByLogin(actualLogin, st) 105 if err != nil { 106 return false, "", err 107 } 108 } 109 return subjectExists, actualLogin, nil 110 111 } 112 113 func SubjectExistsByLogin(login string, state istructs.IState) (ok bool, _ error) { 114 skbViewSubjectsIdx, err := GetSubjectIdxViewKeyBuilder(login, state) 115 if err == nil { 116 _, ok, err = state.CanExist(skbViewSubjectsIdx) 117 } 118 return ok, err 119 }