mirror of
https://github.com/LBPUnion/ProjectLighthouse.git
synced 2025-06-22 07:01:27 +00:00
Refactor serialization system (#702)
* Initial work for serialization refactor * Experiment with new naming conventions * Mostly implement user and slot serialization. Still needs to be fine tuned to match original implementation Many things are left in a broken state like website features/api endpoints/lbp3 categories * Fix release building * Migrate scores, reviews, and more to new serialization system. Many things are still broken but progress is steadily being made * Fix Api responses and migrate serialization for most types * Make serialization better and fix bugs Fix recursive PrepareSerialization when recursive item is set during root item's PrepareSerialization, items, should be properly indexed in order but it's only tested to 1 level of recursion * Fix review serialization * Fix user serialization producing malformed SQL query * Remove DefaultIfEmpty query * MariaDB doesn't like double nested queries * Fix LBP1 tag counter * Implement lbp3 categories and add better deserialization handling * Implement expression tree caching to speed up reflection and write new serializer tests * Remove Game column from UserEntity and rename DatabaseContextModelSnapshot.cs back to DatabaseModelSnapshot.cs * Make UserEntity username not required * Fix recursive serialization of lists and add relevant unit tests * Actually commit the migration * Fix LocationTests to use new deserialization class * Fix comments not serializing the right author username * Replace all occurrences of StatusCode with their respective ASP.NET named result instead of StatusCode(403) everything is now in the form of Forbid() * Fix SlotBase.ConvertToEntity and LocationTests * Fix compilation error * Give Location a default value in GameUserSlot and GameUser * Reimplement stubbed website functions * Convert grief reports to new serialization system * Update DatabaseModelSnapshot and bump dotnet tool version * Remove unused directives * Fix broken type reference * Fix rated comments on website * Don't include banned users in website comments * Optimize score submission * Fix slot id calculating in in-game comment posting * Move serialization interfaces to types folder and add more documentation * Allow uploading of versus scores
This commit is contained in:
parent
307b2135a3
commit
329ab66043
248 changed files with 4993 additions and 2896 deletions
|
@ -64,12 +64,12 @@ public class LoginController : ControllerBase
|
|||
if (username == null)
|
||||
{
|
||||
Logger.Warn("Unable to determine username, rejecting login", LogArea.Login);
|
||||
return this.StatusCode(403, "");
|
||||
return this.Forbid();
|
||||
}
|
||||
|
||||
await this.database.RemoveExpiredTokens();
|
||||
|
||||
User? user;
|
||||
UserEntity? user;
|
||||
|
||||
switch (npTicket.Platform)
|
||||
{
|
||||
|
@ -91,7 +91,7 @@ public class LoginController : ControllerBase
|
|||
if (user == null)
|
||||
{
|
||||
// Check if there is an account with that username already
|
||||
User? targetUsername = await this.database.Users.FirstOrDefaultAsync(u => u.Username == npTicket.Username);
|
||||
UserEntity? targetUsername = await this.database.Users.FirstOrDefaultAsync(u => u.Username == npTicket.Username);
|
||||
if (targetUsername != null)
|
||||
{
|
||||
ulong targetPlatform = npTicket.Platform == Platform.RPCS3
|
||||
|
@ -102,7 +102,7 @@ public class LoginController : ControllerBase
|
|||
if (targetPlatform != 0)
|
||||
{
|
||||
Logger.Warn($"New user tried to login but their name is already taken, username={username}", LogArea.Login);
|
||||
return this.StatusCode(403, "");
|
||||
return this.Forbid();
|
||||
}
|
||||
|
||||
// if there is already a pending link request don't create another
|
||||
|
@ -111,9 +111,9 @@ public class LoginController : ControllerBase
|
|||
p.PlatformId == npTicket.UserId &&
|
||||
p.UserId == targetUsername.UserId);
|
||||
|
||||
if (linkAttemptExists) return this.StatusCode(403, "");
|
||||
if (linkAttemptExists) return this.Forbid();
|
||||
|
||||
PlatformLinkAttempt linkAttempt = new()
|
||||
PlatformLinkAttemptEntity linkAttempt = new()
|
||||
{
|
||||
Platform = npTicket.Platform,
|
||||
UserId = targetUsername.UserId,
|
||||
|
@ -124,13 +124,13 @@ public class LoginController : ControllerBase
|
|||
this.database.PlatformLinkAttempts.Add(linkAttempt);
|
||||
await this.database.SaveChangesAsync();
|
||||
Logger.Success($"User '{npTicket.Username}' tried to login but platform isn't linked, platform={npTicket.Platform}", LogArea.Login);
|
||||
return this.StatusCode(403, "");
|
||||
return this.Forbid();
|
||||
}
|
||||
|
||||
if (!ServerConfiguration.Instance.Authentication.AutomaticAccountCreation)
|
||||
{
|
||||
Logger.Warn($"Unknown user tried to connect username={username}", LogArea.Login);
|
||||
return this.StatusCode(403, "");
|
||||
return this.Forbid();
|
||||
}
|
||||
// create account for user if they don't exist
|
||||
user = await this.database.CreateUser(username, "$");
|
||||
|
@ -162,7 +162,7 @@ public class LoginController : ControllerBase
|
|||
{
|
||||
Logger.Warn($"{npTicket.Platform} user changed their name to a name that is already taken," +
|
||||
$" oldName='{user.Username}', newName='{npTicket.Username}'", LogArea.Login);
|
||||
return this.StatusCode(403, "");
|
||||
return this.Forbid();
|
||||
}
|
||||
Logger.Info($"User's username has changed, old='{user.Username}', new='{npTicket.Username}', platform={npTicket.Platform}", LogArea.Login);
|
||||
user.Username = username;
|
||||
|
@ -176,26 +176,26 @@ public class LoginController : ControllerBase
|
|||
await this.database.SaveChangesAsync();
|
||||
}
|
||||
|
||||
GameToken? token = await this.database.GameTokens.Include(t => t.User)
|
||||
GameTokenEntity? token = await this.database.GameTokens.Include(t => t.User)
|
||||
.FirstOrDefaultAsync(t => t.UserLocation == ipAddress && t.User.Username == npTicket.Username && t.TicketHash == npTicket.TicketHash);
|
||||
|
||||
if (token != null)
|
||||
{
|
||||
Logger.Warn($"Rejecting duplicate ticket from {username}", LogArea.Login);
|
||||
return this.StatusCode(403, "");
|
||||
return this.Forbid();
|
||||
}
|
||||
|
||||
token = await this.database.AuthenticateUser(user, npTicket, ipAddress);
|
||||
if (token == null)
|
||||
{
|
||||
Logger.Warn($"Unable to find/generate a token for username {npTicket.Username}", LogArea.Login);
|
||||
return this.StatusCode(403, "");
|
||||
return this.Forbid();
|
||||
}
|
||||
|
||||
if (user.IsBanned)
|
||||
{
|
||||
Logger.Error($"User {npTicket.Username} tried to login but is banned", LogArea.Login);
|
||||
return this.StatusCode(403, "");
|
||||
return this.Forbid();
|
||||
}
|
||||
|
||||
Logger.Success($"Successfully logged in user {user.Username} as {token.GameVersion} client", LogArea.Login);
|
||||
|
@ -214,7 +214,7 @@ public class LoginController : ControllerBase
|
|||
AuthTicket = "MM_AUTH=" + token.UserToken,
|
||||
ServerBrand = VersionHelper.EnvVer,
|
||||
TitleStorageUrl = ServerConfiguration.Instance.GameApiExternalUrl,
|
||||
}.Serialize()
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue