func (a *Account) Read(p []byte) (n int, err error) {
fields := []Field{
NewField(FieldUserName, []byte(a.Name)),
- NewField(FieldUserLogin, negateString([]byte(a.Login))),
+ NewField(FieldUserLogin, encodeString([]byte(a.Login))),
NewField(FieldUserAccess, a.Access[:]),
}
TranLogin, nil,
NewField(FieldUserName, []byte(c.Pref.Username)),
NewField(FieldUserIconID, c.Pref.IconBytes()),
- NewField(FieldUserLogin, negateString([]byte(login))),
- NewField(FieldUserPassword, negateString([]byte(password))),
+ NewField(FieldUserLogin, encodeString([]byte(login))),
+ NewField(FieldUserPassword, encodeString([]byte(password))),
),
)
}
return res, err
}
- login := DecodeUserString(t.GetField(FieldUserLogin).Data)
+ login := decodeString(t.GetField(FieldUserLogin).Data)
userName := string(t.GetField(FieldUserName).Data)
newAccessLvl := t.GetField(FieldUserAccess).Data
res = append(res, cc.NewReply(t,
NewField(FieldUserName, []byte(account.Name)),
- NewField(FieldUserLogin, negateString(t.GetField(FieldUserLogin).Data)),
+ NewField(FieldUserLogin, encodeString(t.GetField(FieldUserLogin).Data)),
NewField(FieldUserPassword, []byte(account.Password)),
NewField(FieldUserAccess, account.Access[:]),
))
}
if len(subFields) == 1 {
- login := DecodeUserString(getField(FieldData, &subFields).Data)
+ login := decodeString(getField(FieldData, &subFields).Data)
cc.logger.Infow("DeleteUser", "login", login)
if !cc.Authorize(accessDeleteUser) {
continue
}
- login := DecodeUserString(getField(FieldUserLogin, &subFields).Data)
+ login := decodeString(getField(FieldUserLogin, &subFields).Data)
// check if the login dataFile; if so, we know we are updating an existing user
if acc, ok := cc.Server.Accounts[login]; ok {
}
err = cc.Server.UpdateUser(
- DecodeUserString(getField(FieldData, &subFields).Data),
- DecodeUserString(getField(FieldUserLogin, &subFields).Data),
+ decodeString(getField(FieldData, &subFields).Data),
+ decodeString(getField(FieldUserLogin, &subFields).Data),
string(getField(FieldUserName, &subFields).Data),
acc.Password,
acc.Access,
return res, err
}
- login := DecodeUserString(t.GetField(FieldUserLogin).Data)
+ login := decodeString(t.GetField(FieldUserLogin).Data)
// If the account already dataFile, reply with an error
if _, ok := cc.Server.Accounts[login]; ok {
}
// TODO: Handle case where account doesn't exist; e.g. delete race condition
- login := DecodeUserString(t.GetField(FieldUserLogin).Data)
+ login := decodeString(t.GetField(FieldUserLogin).Data)
if err := cc.Server.DeleteUser(login); err != nil {
return res, err
ErrorCode: []byte{0, 0, 0, 0},
Fields: []Field{
NewField(FieldUserName, []byte("Guest")),
- NewField(FieldUserLogin, negateString([]byte("guest"))),
+ NewField(FieldUserLogin, encodeString([]byte("guest"))),
NewField(FieldUserPassword, []byte("password")),
NewField(FieldUserAccess, []byte{0, 0, 0, 0, 0, 0, 0, 0}),
},
},
t: NewTransaction(
TranDeleteUser, &[]byte{0, 1},
- NewField(FieldUserLogin, negateString([]byte("testuser"))),
+ NewField(FieldUserLogin, encodeString([]byte("testuser"))),
),
},
wantRes: []Transaction{
},
t: NewTransaction(
TranDeleteUser, &[]byte{0, 1},
- NewField(FieldUserLogin, negateString([]byte("testuser"))),
+ NewField(FieldUserLogin, encodeString([]byte("testuser"))),
),
},
wantRes: []Transaction{
return u, nil
}
-// DecodeUserString decodes an obfuscated user string from a client
+// decodeString decodes an obfuscated user string from a client
// e.g. 98 8a 9a 8c 8b => "guest"
-func DecodeUserString(obfuText []byte) (clearText string) {
+func decodeString(obfuText []byte) (clearText string) {
for _, char := range obfuText {
clearText += string(rune(255 - uint(char)))
}
return clearText
}
-// negateString takes []byte s containing cleartext and rotates by 255 into obfuscated 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 negateString(clearText []byte) []byte {
+func encodeString(clearText []byte) []byte {
obfuText := make([]byte, len(clearText))
for i := 0; i < len(clearText); i++ {
obfuText[i] = 255 - clearText[i]
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- if gotDecodedString := DecodeUserString(tt.args.encodedString); gotDecodedString != tt.wantDecodedString {
- t.Errorf("DecodeUserString() = %v, want %v", gotDecodedString, tt.wantDecodedString)
+ if gotDecodedString := decodeString(tt.args.encodedString); gotDecodedString != tt.wantDecodedString {
+ t.Errorf("decodeString() = %v, want %v", gotDecodedString, tt.wantDecodedString)
}
})
}
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- if got := negateString(tt.args.encodedString); !bytes.Equal(got, tt.want) {
+ if got := encodeString(tt.args.encodedString); !bytes.Equal(got, tt.want) {
t.Errorf("NegatedUserString() = %x, want %x", got, tt.want)
}
})