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  }