seekia/internal/messaging/myInbox/myInbox.go

150 lines
4.9 KiB
Go
Raw Normal View History

// myInbox provides functions to get a user's public and secret inboxes
package myInbox
import "seekia/internal/encoding"
import "seekia/internal/helpers"
import "seekia/internal/myIdentity"
import "seekia/internal/messaging/inbox"
import "seekia/internal/messaging/mySecretInboxes"
import "errors"
// Returns all inboxes that we want to download messages from
// It will omit inboxes that are old enough that they have no messages, or ones we have checked sufficiently
func GetAllMyActiveInboxes(myIdentityHash [16]byte, networkType byte)([][10]byte, error){
myPublicInbox, err := inbox.GetPublicInboxFromIdentityHash(myIdentityHash)
if (err != nil) {
myIdentityHashHex := encoding.EncodeBytesToHexString(myIdentityHash[:])
return nil, errors.New("GetAllMyActiveInboxes called with invalid identity hash: " + myIdentityHashHex)
}
isValid := helpers.VerifyNetworkType(networkType)
if (isValid == false){
networkTypeString := helpers.ConvertByteToString(networkType)
return nil, errors.New("GetAllMyActiveInboxes called with invalid networkType: " + networkTypeString)
}
myInboxesList := [][10]byte{myPublicInbox}
myActiveSecretInboxesList, err := mySecretInboxes.GetAllMyActiveSecretInboxes(myIdentityHash, networkType)
if (err != nil) { return nil, err }
myInboxesList = append(myInboxesList, myActiveSecretInboxesList...)
return myInboxesList, nil
}
// Returns all inboxes, even ones we have already sufficiently checked
// Will not return inboxes for users I have blocked
func GetAllMyInboxes(myIdentityHash [16]byte, networkType byte)([][10]byte, error){
myPublicInbox, err := inbox.GetPublicInboxFromIdentityHash(myIdentityHash)
if (err != nil) {
myIdentityHashHex := encoding.EncodeBytesToHexString(myIdentityHash[:])
return nil, errors.New("GetAllMyInboxes called with invalid identity hash: " + myIdentityHashHex)
}
isValid := helpers.VerifyNetworkType(networkType)
if (isValid == false){
networkTypeString := helpers.ConvertByteToString(networkType)
return nil, errors.New("GetAllMyInboxes called with invalid networkType: " + networkTypeString)
}
myInboxesList := [][10]byte{myPublicInbox}
mySecretInboxesList, err := mySecretInboxes.GetAllMySecretInboxes(myIdentityHash, networkType)
if (err != nil) { return nil, err }
myInboxesList = append(myInboxesList, mySecretInboxesList...)
return myInboxesList, nil
}
//Outputs:
// -bool: Inbox is mine
// -string: Identity type of inbox
// -error
func CheckIfInboxIsMine(inputInbox [10]byte, networkType byte)(bool, string, error){
isValid := helpers.VerifyNetworkType(networkType)
if (isValid == false){
networkTypeString := helpers.ConvertByteToString(networkType)
return false, "", errors.New("CheckIfInboxIsMine called with invalid networkType: " + networkTypeString)
}
chatIdentityTypesList := []string{"Mate", "Moderator"}
for _, identityType := range chatIdentityTypesList{
myIdentityFound, myIdentityHash, err := myIdentity.GetMyIdentityHash(identityType)
if (err != nil) { return false, "", err }
if (myIdentityFound == false){
continue
}
myInboxesList, err := GetAllMyInboxes(myIdentityHash, networkType)
if (err != nil) { return false, "", err }
for _, inbox := range myInboxesList{
if (inbox == inputInbox){
return true, identityType, nil
}
}
}
return false, "", nil
}
//Outputs:
// -bool: Inbox found
// -[16]byte: Inbox My Identity Hash
// -[32]byte: inbox doubledSealedKeys sealer key
// -bool: Inbox is secret
// -byte: Inbox network type (if inbox is secret)
// -[16]byte: Conversation recipient (if inbox is secret)
// -error
func GetMyInboxInfo(inputInbox [10]byte)(bool, [16]byte, [32]byte, bool, byte, [16]byte, error){
chatIdentityTypesList := []string{"Mate", "Moderator"}
for _, identityType := range chatIdentityTypesList{
myIdentityExists, myIdentityHash, err := myIdentity.GetMyIdentityHash(identityType)
if (err != nil) { return false, [16]byte{}, [32]byte{}, false, 0, [16]byte{}, err }
if (myIdentityExists == false){
continue
}
myPublicInbox, err := inbox.GetPublicInboxFromIdentityHash(myIdentityHash)
if (err != nil) { return false, [16]byte{}, [32]byte{}, false, 0, [16]byte{}, err }
if (inputInbox == myPublicInbox){
doubleSealedKeysSealerKey, err := inbox.GetPublicInboxSealerKeyFromIdentityHash(myIdentityHash)
if (err != nil) { return false, [16]byte{}, [32]byte{}, false, 0, [16]byte{}, err }
return true, myIdentityHash, doubleSealedKeysSealerKey, false, 0, [16]byte{}, nil
}
}
inboxFound, inboxMyIdentityHash, conversationRecipientIdentityHash, inboxNetworkType, secretInboxSealerKey, _, _, err := mySecretInboxes.GetMySecretInboxInfo(inputInbox)
if (err != nil){ return false, [16]byte{}, [32]byte{}, false, 0, [16]byte{}, err }
if (inboxFound == true){
return true, inboxMyIdentityHash, secretInboxSealerKey, true, inboxNetworkType, conversationRecipientIdentityHash, nil
}
return false, [16]byte{}, [32]byte{}, false, 0, [16]byte{}, nil
}