Fix tests

This commit is contained in:
jvyden 2021-10-28 20:34:49 -04:00
parent 474556b8a6
commit 4208513978
No known key found for this signature in database
GPG key ID: 18BCF2BE0262B278
4 changed files with 14 additions and 15 deletions

View file

@ -22,13 +22,9 @@ namespace LBPUnion.ProjectLighthouse.Tests {
} }
public async Task<HttpResponseMessage> AuthenticateResponse(int number = 0) { public async Task<HttpResponseMessage> AuthenticateResponse(int number = 0) {
const char nullChar = (char)0x00;
const string username = "unitTestUser"; const string username = "unitTestUser";
string nullString = ""; string stringContent = $"{LoginData.UsernamePrefix}{username}{number}{(char)0x00}";
for(int i = 0; i < 80; i++) nullString += nullChar;
string stringContent = $"{nullString}{username}{number}{nullChar}";
HttpResponseMessage response = await this.Client.PostAsync("/LITTLEBIGPLANETPS3_XML/login", new StringContent(stringContent)); HttpResponseMessage response = await this.Client.PostAsync("/LITTLEBIGPLANETPS3_XML/login", new StringContent(stringContent));
return response; return response;

View file

@ -16,9 +16,9 @@ namespace LBPUnion.ProjectLighthouse.Tests {
await semaphore.WaitAsync(); await semaphore.WaitAsync();
HttpResponseMessage result = await this.AuthenticatedUploadDataRequest("LITTLEBIGPLANETPS3_XML/match", Array.Empty<byte>(), loginResult.AuthTicket); HttpResponseMessage result = await this.AuthenticatedUploadDataRequest("LITTLEBIGPLANETPS3_XML/match", Array.Empty<byte>(), loginResult.AuthTicket);
Assert.False(result.IsSuccessStatusCode);
semaphore.Release(); semaphore.Release();
Assert.False(result.IsSuccessStatusCode);
} }
[DatabaseFact] [DatabaseFact]
@ -32,9 +32,9 @@ namespace LBPUnion.ProjectLighthouse.Tests {
loginResult.AuthTicket loginResult.AuthTicket
); );
Assert.True(result.IsSuccessStatusCode);
semaphore.Release(); semaphore.Release();
Assert.True(result.IsSuccessStatusCode);
} }
public async Task<int> GetPlayerCount() => Convert.ToInt32(await this.Client.GetStringAsync("LITTLEBIGPLANETPS3_XML/totalPlayerCount")); public async Task<int> GetPlayerCount() => Convert.ToInt32(await this.Client.GetStringAsync("LITTLEBIGPLANETPS3_XML/totalPlayerCount"));

View file

@ -20,14 +20,16 @@ namespace LBPUnion.ProjectLighthouse.Controllers {
public async Task<IActionResult> Login() { public async Task<IActionResult> Login() {
string body = await new StreamReader(this.Request.Body).ReadToEndAsync(); string body = await new StreamReader(this.Request.Body).ReadToEndAsync();
LoginData loginData; LoginData? loginData;
try { try {
loginData = LoginData.CreateFromString(body); loginData = LoginData.CreateFromString(body);
} }
catch { catch {
return this.BadRequest(); loginData = null;
} }
if(loginData == null) return this.BadRequest();
Token? token = await this.database.AuthenticateUser(loginData); Token? token = await this.database.AuthenticateUser(loginData);
if(token == null) return this.StatusCode(403, ""); if(token == null) return this.StatusCode(403, "");

View file

@ -1,3 +1,4 @@
#nullable enable
using System; using System;
using System.IO; using System.IO;
using System.Text; using System.Text;
@ -8,25 +9,25 @@ namespace LBPUnion.ProjectLighthouse.Types {
/// The data sent from POST /LOGIN. /// The data sent from POST /LOGIN.
/// </summary> /// </summary>
public class LoginData { public class LoginData {
public string Username { get; set; } public string Username { get; set; } = null!;
// public string GameVersion { get; set; }
// public int UnknownNumber { get; set; } // Seems to increment by 1000 every login attempt public static readonly string UsernamePrefix = Encoding.ASCII.GetString(new byte[] { 0x04, 0x00, 0x20 });
/// <summary> /// <summary>
/// Converts a X-I-5 Ticket into `LoginData`. /// Converts a X-I-5 Ticket into `LoginData`.
/// https://www.psdevwiki.com/ps3/X-I-5-Ticket /// https://www.psdevwiki.com/ps3/X-I-5-Ticket
/// </summary> /// </summary>
public static LoginData CreateFromString(string str) { public static LoginData? CreateFromString(string str) {
str = str.Replace("\b", ""); // Remove backspace characters str = str.Replace("\b", ""); // Remove backspace characters
using MemoryStream ms = new(Encoding.ASCII.GetBytes(str)); using MemoryStream ms = new(Encoding.ASCII.GetBytes(str));
using BinaryReader reader = new(ms); using BinaryReader reader = new(ms);
string usernamePrefix = Encoding.ASCII.GetString(new byte[] { 0x04, 0x00, 0x20 }); if(!str.Contains(UsernamePrefix)) return null;
LoginData loginData = new(); LoginData loginData = new();
reader.BaseStream.Position = str.IndexOf(usernamePrefix, StringComparison.Ordinal) + usernamePrefix.Length; reader.BaseStream.Position = str.IndexOf(UsernamePrefix, StringComparison.Ordinal) + UsernamePrefix.Length;
loginData.Username = BinaryHelper.ReadString(reader).Replace("\0", string.Empty); loginData.Username = BinaryHelper.ReadString(reader).Replace("\0", string.Empty);
return loginData; return loginData;