X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/22c599abc18895f73e96095f35b71cf3357d41b4..c2f62e9d34248432ee31144378ba9c6900ac974a:/hotline/user.go diff --git a/hotline/user.go b/hotline/user.go index f80fd72..34fe1ab 100644 --- a/hotline/user.go +++ b/hotline/user.go @@ -4,12 +4,19 @@ import ( "encoding/binary" ) -// User flags are stored as a 2 byte bitmap with the following values: +// User flags are stored as a 2 byte bitmap and represent various user states const ( - userFlagAway = 0 // User is away - userFlagAdmin = 1 // User is admin - userFlagRefusePM = 2 // User refuses private messages - userFLagRefusePChat = 3 // User refuses private chat + UserFlagAway = 0 // User is away + UserFlagAdmin = 1 // User is admin + UserFlagRefusePM = 2 // User refuses private messages + UserFlagRefusePChat = 3 // User refuses private chat +) + +// FieldOptions flags are sent from v1.5+ clients as part of TranAgreed +const ( + refusePM = 0 // User has "Refuse private messages" pref set + refuseChat = 1 // User has "Refuse private chat" pref set + autoResponse = 2 // User has "Automatic response" pref set ) type User struct { @@ -51,19 +58,20 @@ func ReadUser(b []byte) (*User, error) { // DecodeUserString decodes an obfuscated user string from a client // e.g. 98 8a 9a 8c 8b => "guest" -func DecodeUserString(encodedString []byte) (decodedString string) { - for _, char := range encodedString { - decodedString += string(rune(255 - uint(char))) +func DecodeUserString(obfuText []byte) (clearText string) { + for _, char := range obfuText { + clearText += string(rune(255 - uint(char))) } - return decodedString + return clearText } -// Take a []byte of uncoded ascii as input and encode it -// TODO: change the method signature to take a string and return []byte -func NegatedUserString(encodedString []byte) string { - var decodedString string - for _, char := range encodedString { - decodedString += string(255 - uint8(char))[1:] +// negateString takes []byte s containing cleartext and rotates by 255 into obfuscated cleartext. +// The Hotline protocol uses this format for sending passwords over network. +// Not secure, but hey, it was the 90s! +func negateString(clearText []byte) []byte { + obfuText := make([]byte, len(clearText)) + for i := 0; i < len(clearText); i++ { + obfuText[i] = 255 - clearText[i] } - return decodedString + return obfuText }