Fix preferences sent to client not being sanitized (#27789)

Fucking whoops

In #27742 I made it so sanitization of character profiles was moved to be *after* database load. Except that means I moved it to be after the copy of all character profiles got sent to the client.

Move the sending to *also* be in that second load stage, and rename it. Fixes the issue.
This commit is contained in:
Pieter-Jan Briers
2024-05-08 04:24:54 +02:00
committed by GitHub
parent ab1a2de367
commit 9efe4dc701
3 changed files with 16 additions and 15 deletions

View File

@@ -67,7 +67,7 @@ public sealed class UserDbDataManager : IPostInjectInit
_playTimeTracking.LoadData(session, cancel));
cancel.ThrowIfCancellationRequested();
_prefs.SanitizeData(session);
_prefs.FinishLoad(session);
_sawmill.Verbose($"Load complete for user {session}");
}

View File

@@ -12,7 +12,7 @@ namespace Content.Server.Preferences.Managers
void Init();
Task LoadData(ICommonSession session, CancellationToken cancel);
void SanitizeData(ICommonSession session);
void FinishLoad(ICommonSession session);
void OnClientDisconnected(ICommonSession session);
bool TryGetCachedPreferences(NetUserId userId, [NotNullWhen(true)] out PlayerPreferences? playerPreferences);

View File

@@ -199,28 +199,29 @@ namespace Content.Server.Preferences.Managers
{
var prefs = await GetOrCreatePreferencesAsync(session.UserId, cancel);
prefsData.Prefs = prefs;
}
}
}
public void FinishLoad(ICommonSession session)
{
// This is a separate step from the actual database load.
// Sanitizing preferences requires play time info due to loadouts.
// And play time info is loaded concurrently from the DB with preferences.
var prefsData = _cachedPlayerPrefs[session.UserId];
DebugTools.Assert(prefsData.Prefs != null);
prefsData.Prefs = SanitizePreferences(session, prefsData.Prefs, _dependencies);
prefsData.PrefsLoaded = true;
var msg = new MsgPreferencesAndSettings();
msg.Preferences = prefs;
msg.Preferences = prefsData.Prefs;
msg.Settings = new GameSettings
{
MaxCharacterSlots = MaxCharacterSlots
};
_netManager.ServerSendMessage(msg, session.Channel);
}
}
}
public void SanitizeData(ICommonSession session)
{
// This is a separate step from the actual database load.
// Sanitizing preferences requires play time info due to loadouts.
// And play time info is loaded concurrently from the DB with preferences.
var data = _cachedPlayerPrefs[session.UserId];
DebugTools.Assert(data.Prefs != null);
data.Prefs = SanitizePreferences(session, data.Prefs, _dependencies);
}
public void OnClientDisconnected(ICommonSession session)
{