return res, err
}
- login := decodeString(t.GetField(FieldUserLogin).Data)
+ login := string(encodeString(t.GetField(FieldUserLogin).Data))
userName := string(t.GetField(FieldUserName).Data)
newAccessLvl := t.GetField(FieldUserAccess).Data
return res, err
}
- login := decodeString(getField(FieldData, &subFields).Data)
+ login := string(encodeString(getField(FieldData, &subFields).Data))
cc.logger.Infow("DeleteUser", "login", login)
if err := cc.Server.DeleteUser(login); err != nil {
// If FieldData is included, this is a rename operation where FieldData contains the login of the existing
// account and FieldUserLogin contains the new login.
if getField(FieldData, &subFields) != nil {
- loginToRename = decodeString(getField(FieldData, &subFields).Data)
+ loginToRename = string(encodeString(getField(FieldData, &subFields).Data))
}
- userLogin := decodeString(getField(FieldUserLogin, &subFields).Data)
+ userLogin := string(encodeString(getField(FieldUserLogin, &subFields).Data))
if loginToRename != "" {
accountToUpdate = loginToRename
} else {
}
err = cc.Server.UpdateUser(
- decodeString(getField(FieldData, &subFields).Data),
- decodeString(getField(FieldUserLogin, &subFields).Data),
+ string(encodeString(getField(FieldData, &subFields).Data)),
+ string(encodeString(getField(FieldUserLogin, &subFields).Data)),
string(getField(FieldUserName, &subFields).Data),
acc.Password,
acc.Access,
return res, err
}
- login := decodeString(t.GetField(FieldUserLogin).Data)
+ login := string(encodeString(t.GetField(FieldUserLogin).Data))
// If the account already dataFile, reply with an error
if _, ok := cc.Server.Accounts[login]; ok {
return res, nil
}
- login := decodeString(t.GetField(FieldUserLogin).Data)
+ login := string(encodeString(t.GetField(FieldUserLogin).Data))
if err := cc.Server.DeleteUser(login); err != nil {
return res, err
return 8 + namelen, nil
}
-// decodeString decodes an obfuscated user string from a client
-// e.g. 98 8a 9a 8c 8b => "guest"
-func decodeString(obfuText []byte) (clearText string) {
- for _, char := range obfuText {
- clearText += string(rune(255 - uint(char)))
- }
- return clearText
-}
-
// encodeString 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 TestDecodeUserString(t *testing.T) {
- type args struct {
- encodedString []byte
- }
- tests := []struct {
- name string
- args args
- wantDecodedString string
- }{
- {
- name: "decodes bytes to guest",
- args: args{
- encodedString: []byte{
- 0x98, 0x8a, 0x9a, 0x8c, 0x8b,
- },
- },
- wantDecodedString: "guest",
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if gotDecodedString := decodeString(tt.args.encodedString); gotDecodedString != tt.wantDecodedString {
- t.Errorf("decodeString() = %v, want %v", gotDecodedString, tt.wantDecodedString)
- }
- })
- }
-}
-
func TestNegatedUserString(t *testing.T) {
type args struct {
encodedString []byte