136 lines
6.1 KiB
Go
136 lines
6.1 KiB
Go
|
|
||
|
// hostRanges provides functions to retrieve a host's hosted ranges from their profile map
|
||
|
|
||
|
package hostRanges
|
||
|
|
||
|
import "seekia/internal/byteRange"
|
||
|
import "seekia/internal/encoding"
|
||
|
import "seekia/internal/messaging/inbox"
|
||
|
import "seekia/internal/profiles/readProfiles"
|
||
|
|
||
|
import messagepack "github.com/vmihailenco/msgpack/v5"
|
||
|
|
||
|
import "errors"
|
||
|
|
||
|
//Outputs:
|
||
|
// -bool: Host is hosting any provided identityType content
|
||
|
// -[16]byte: Hosted Identity hash range start
|
||
|
// -[16]byte: Hosted Identity hash range end
|
||
|
// -error
|
||
|
func GetHostedIdentityHashRangeFromHostRawProfileMap(hostRawProfileMap map[int]messagepack.RawMessage, identityType string)(bool, [16]byte, [16]byte, error){
|
||
|
|
||
|
if (identityType != "Mate" && identityType != "Host" && identityType != "Moderator"){
|
||
|
return false, [16]byte{}, [16]byte{}, errors.New("GetHostedIdentityHashRangeFromHostRawProfileMap called with invalid identityType: " + identityType)
|
||
|
}
|
||
|
|
||
|
hostIsDisabled, _, err := readProfiles.GetFormattedProfileAttributeFromRawProfileMap(hostRawProfileMap, "Disabled")
|
||
|
if (err != nil) { return false, [16]byte{}, [16]byte{}, err }
|
||
|
if (hostIsDisabled == true){
|
||
|
return false, [16]byte{}, [16]byte{}, nil
|
||
|
}
|
||
|
|
||
|
exists, hostingIdentityTypeContent, err := readProfiles.GetFormattedProfileAttributeFromRawProfileMap(hostRawProfileMap, "Hosting" + identityType + "Content")
|
||
|
if (err != nil) { return false, [16]byte{}, [16]byte{}, err }
|
||
|
if (exists == false){
|
||
|
return false, [16]byte{}, [16]byte{}, errors.New("Database corrupt: Contains Host profile map missing Hosting" + identityType + "Content")
|
||
|
}
|
||
|
|
||
|
if (hostingIdentityTypeContent != "Yes"){
|
||
|
return false, [16]byte{}, [16]byte{}, nil
|
||
|
}
|
||
|
if (identityType != "Mate"){
|
||
|
// Hosts must host either all or none of Host/Moderator content
|
||
|
|
||
|
minimumIdentityBound, maximumIdentityBound := byteRange.GetMinimumMaximumIdentityHashBounds()
|
||
|
|
||
|
return true, minimumIdentityBound, maximumIdentityBound, nil
|
||
|
}
|
||
|
|
||
|
exists, theirMateHostRangeStartString, err := readProfiles.GetFormattedProfileAttributeFromRawProfileMap(hostRawProfileMap, "MateIdentitiesRangeStart")
|
||
|
if (err != nil) { return false, [16]byte{}, [16]byte{}, err }
|
||
|
if (exists == false){
|
||
|
return false, [16]byte{}, [16]byte{}, errors.New("Database corrupt: Contains host profile missing MateIdentitiesRangeStart")
|
||
|
}
|
||
|
|
||
|
exists, theirMateHostRangeEndString, err := readProfiles.GetFormattedProfileAttributeFromRawProfileMap(hostRawProfileMap, "MateIdentitiesRangeEnd")
|
||
|
if (err != nil) { return false, [16]byte{}, [16]byte{}, err }
|
||
|
if (exists == false){
|
||
|
return false, [16]byte{}, [16]byte{}, errors.New("Database corrupt: Contains host profile missing MateIdentitiesRangeEnd")
|
||
|
}
|
||
|
|
||
|
theirMateHostRangeStartBytes, err := encoding.DecodeHexStringToBytes(theirMateHostRangeStartString)
|
||
|
if (err != nil){
|
||
|
return false, [16]byte{}, [16]byte{}, errors.New("Database corrupt: Contains host profile containing invalid MateIdentitiesRangeStart: Not Hex: " + theirMateHostRangeStartString)
|
||
|
}
|
||
|
|
||
|
if (len(theirMateHostRangeStartBytes) != 16){
|
||
|
return false, [16]byte{}, [16]byte{}, errors.New("Database corrupt: Contains host profile containing invalid MateIdentitiesRangeStart: Invalid length: " + theirMateHostRangeStartString)
|
||
|
}
|
||
|
|
||
|
theirMateHostRangeStart := [16]byte(theirMateHostRangeStartBytes)
|
||
|
|
||
|
theirMateHostRangeEndBytes, err := encoding.DecodeHexStringToBytes(theirMateHostRangeEndString)
|
||
|
if (err != nil){
|
||
|
return false, [16]byte{}, [16]byte{}, errors.New("Database corrupt: Contains host profile containing invalid MateIdentitiesRangeEnd: Not Hex: " + theirMateHostRangeEndString)
|
||
|
}
|
||
|
|
||
|
if (len(theirMateHostRangeEndBytes) != 16){
|
||
|
return false, [16]byte{}, [16]byte{}, errors.New("Database corrupt: Contains host profile containing invalid MateIdentitiesRangeEnd: Invalid length: " + theirMateHostRangeEndString)
|
||
|
}
|
||
|
|
||
|
theirMateHostRangeEnd := [16]byte(theirMateHostRangeEndBytes)
|
||
|
|
||
|
return true, theirMateHostRangeStart, theirMateHostRangeEnd, nil
|
||
|
}
|
||
|
|
||
|
|
||
|
//Outputs:
|
||
|
// -bool: Host is hosting any messages
|
||
|
// -[10]byte: Hosted message Inbox range start
|
||
|
// -[10]byte: Hosted message inbox range end
|
||
|
// -error
|
||
|
func GetHostedMessageInboxesRangeFromHostRawProfileMap(hostRawProfileMap map[int]messagepack.RawMessage)(bool, [10]byte, [10]byte, error){
|
||
|
|
||
|
hostIsDisabled, _, err := readProfiles.GetFormattedProfileAttributeFromRawProfileMap(hostRawProfileMap, "Disabled")
|
||
|
if (err != nil) { return false, [10]byte{}, [10]byte{}, err }
|
||
|
if (hostIsDisabled == true){
|
||
|
return false, [10]byte{}, [10]byte{}, nil
|
||
|
}
|
||
|
|
||
|
exists, hostingMessages, err := readProfiles.GetFormattedProfileAttributeFromRawProfileMap(hostRawProfileMap, "HostingMessages")
|
||
|
if (err != nil) { return false, [10]byte{}, [10]byte{}, err }
|
||
|
if (exists == false) {
|
||
|
return false, [10]byte{}, [10]byte{}, errors.New("Database corrupt: Contains host profile missing HostingMessages")
|
||
|
}
|
||
|
if (hostingMessages != "Yes"){
|
||
|
return false, [10]byte{}, [10]byte{}, nil
|
||
|
}
|
||
|
|
||
|
exists, theirInboxHostRangeStartString, err := readProfiles.GetFormattedProfileAttributeFromRawProfileMap(hostRawProfileMap, "MessageInboxesRangeStart")
|
||
|
if (err != nil) { return false, [10]byte{}, [10]byte{}, err }
|
||
|
if (exists == false){
|
||
|
return false, [10]byte{}, [10]byte{}, errors.New("Database corrupt: Contains host profile missing MessageInboxesRangeStart")
|
||
|
}
|
||
|
|
||
|
exists, theirInboxHostRangeEndString, err := readProfiles.GetFormattedProfileAttributeFromRawProfileMap(hostRawProfileMap, "MessageInboxesRangeEnd")
|
||
|
if (err != nil) { return false, [10]byte{}, [10]byte{}, err }
|
||
|
if (exists == false){
|
||
|
return false, [10]byte{}, [10]byte{}, errors.New("Database corrupt: Contains host profile missing MessageInboxesRangeEnd")
|
||
|
}
|
||
|
|
||
|
theirInboxHostRangeStart, err := inbox.ReadInboxString(theirInboxHostRangeStartString)
|
||
|
if (err != nil){
|
||
|
return false, [10]byte{}, [10]byte{}, errors.New("Database corrupt: Contains host profile with invalid MessageInboxesRangeStart: " + theirInboxHostRangeStartString)
|
||
|
}
|
||
|
|
||
|
theirInboxHostRangeEnd, err := inbox.ReadInboxString(theirInboxHostRangeEndString)
|
||
|
if (err != nil){
|
||
|
return false, [10]byte{}, [10]byte{}, errors.New("Database corrupt: Contains host profile with invalid MessageInboxesRangeEnd: " + theirInboxHostRangeEndString)
|
||
|
}
|
||
|
|
||
|
return true, theirInboxHostRangeStart, theirInboxHostRangeEnd, nil
|
||
|
}
|
||
|
|
||
|
|
||
|
|