118 lines
5.1 KiB
Go
118 lines
5.1 KiB
Go
|
|
||
|
// backgroundDownloads provides functions to check what content the app is downloading in the background
|
||
|
// One example is checking if the app can determine a message/identity's verdict
|
||
|
// To determine an identity's verdict, the app must be downloading all moderator profiles, all moderator ban reviews, and all reviews for the identity
|
||
|
|
||
|
package backgroundDownloads
|
||
|
|
||
|
import "seekia/internal/helpers"
|
||
|
import "seekia/internal/myRanges"
|
||
|
import "seekia/internal/network/appNetworkType/getAppNetworkType"
|
||
|
import "seekia/internal/network/temporaryDownloads"
|
||
|
|
||
|
import "errors"
|
||
|
|
||
|
// This function will tell us if we are downloading the required reviews to determine this identity's moderation verdict
|
||
|
// This includes the verdict for all profiles created by this identity
|
||
|
// To do this, we must download all moderator profiles, all moderator-banning-moderator reviews, and all reviews of the identity
|
||
|
func CheckIfAppCanDetermineIdentityVerdicts(identityHash [16]byte)(bool, error){
|
||
|
|
||
|
// We first check if the provided identity hash is in our host/moderator range
|
||
|
// If it is, we will download all reviews/reports for the identity and its profiles
|
||
|
// In host/moderator mode, we download all moderator profiles and and all moderator-banning-moderator reviews
|
||
|
// In both modes, if the identity is within our range, we will download all of this identity's profiles
|
||
|
// If we are in moderator mode, we will delete their profiles after we have reviewed them, and retain each profile's metadata
|
||
|
|
||
|
hostModeEnabled, isWithinRange, err := myRanges.CheckIfIdentityHashIsWithinMyHostedRange(identityHash)
|
||
|
if (err != nil) { return false, err }
|
||
|
if (hostModeEnabled == true && isWithinRange == true){
|
||
|
return true, nil
|
||
|
}
|
||
|
|
||
|
moderatorModeEnabled, isWithinRange, err := myRanges.CheckIfIdentityHashIsWithinMyModerationRange(identityHash)
|
||
|
if (err != nil) { return false, err }
|
||
|
if (moderatorModeEnabled == true && isWithinRange == true){
|
||
|
return true, nil
|
||
|
}
|
||
|
|
||
|
if (hostModeEnabled == false && moderatorModeEnabled == false){
|
||
|
// We cannot determine the identity's verdict
|
||
|
// This is because we are not downloading all moderator profiles and all moderator-banning-moderator reviews
|
||
|
return false, nil
|
||
|
}
|
||
|
|
||
|
// Now we check our temporary downloads
|
||
|
|
||
|
isWithinTemporaryDownloads, err := temporaryDownloads.CheckIfIdentityReviewsAreWithinMyTemporaryDownloads(identityHash)
|
||
|
if (err != nil) { return false, err }
|
||
|
if (isWithinTemporaryDownloads == true){
|
||
|
return true, nil
|
||
|
}
|
||
|
|
||
|
return false, nil
|
||
|
}
|
||
|
|
||
|
// This function will tell us if we are downloading the required reviews to determine this message's moderation verdict
|
||
|
// To do this, we must download all moderator profiles, all moderator-banning-moderator reviews, and all reviews of the message
|
||
|
func CheckIfAppCanDetermineMessageVerdict(messageNetworkType byte, messageInbox [10]byte, messageHashProvided bool, messageHash [26]byte)(bool, error){
|
||
|
|
||
|
isValid := helpers.VerifyNetworkType(messageNetworkType)
|
||
|
if (isValid == false){
|
||
|
messageNetworkTypeString := helpers.ConvertByteToString(messageNetworkType)
|
||
|
return false, errors.New("CheckIfAppCanDetermineMessageVerdict called with invalid messageNetworkType: " + messageNetworkTypeString)
|
||
|
}
|
||
|
|
||
|
// We first check to see if our client is connected to the same network type the message was broadcasted on
|
||
|
|
||
|
appNetworkType, err := getAppNetworkType.GetAppNetworkType()
|
||
|
if (err != nil) { return false, err }
|
||
|
if (appNetworkType != messageNetworkType){
|
||
|
return false, nil
|
||
|
}
|
||
|
|
||
|
// We then check if the provided inbox is in our host/moderator range
|
||
|
// If it is, we will download all reviews/reports for any messages sent to the inbox
|
||
|
// In host/moderator mode, we download all moderator profiles and and all moderator-banning-moderator reviews
|
||
|
// If we are in Host mode, we will also download all messages sent to the inbox, regardless of if they are reviewed/reported.
|
||
|
// If we are in moderator mode, we will download only reviewed/reported messages,
|
||
|
// delete the messages after we have reviewed them, and retain each message's metadata
|
||
|
|
||
|
hostModeEnabled, isWithinRange, err := myRanges.CheckIfMessageInboxIsWithinMyHostedRange(messageInbox)
|
||
|
if (err != nil) { return false, err }
|
||
|
if (hostModeEnabled == true && isWithinRange == true){
|
||
|
return true, nil
|
||
|
}
|
||
|
|
||
|
moderatorModeEnabled, isWithinRange, err := myRanges.CheckIfMessageInboxIsWithinMyModerationRange(messageInbox)
|
||
|
if (err != nil) { return false, err }
|
||
|
if (moderatorModeEnabled == true && isWithinRange == true){
|
||
|
return true, nil
|
||
|
}
|
||
|
|
||
|
if (hostModeEnabled == false && moderatorModeEnabled == false){
|
||
|
// We cannot determine the message/inbox verdict
|
||
|
// This is because we are not downloading all moderator profiles and all moderator-banning-moderator reviews
|
||
|
return false, nil
|
||
|
}
|
||
|
|
||
|
// Now we check our temporary downloads
|
||
|
|
||
|
if (messageHashProvided == false){
|
||
|
// Temporary downloads do not exist for message inboxes
|
||
|
// Thus, we are not download the required reviews for this inbox
|
||
|
return false, nil
|
||
|
}
|
||
|
|
||
|
isWithinMyTemporaryDownloads, err := temporaryDownloads.CheckIfMessageReviewsAreWithinMyTemporaryDownloads(messageHash)
|
||
|
if (err != nil) { return false, err }
|
||
|
if (isWithinMyTemporaryDownloads == true){
|
||
|
return true, nil
|
||
|
}
|
||
|
|
||
|
return false, nil
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|