diff --git a/src/Controllers/Common/AchievementController.cs b/src/Controllers/Common/AchievementController.cs index 8ba3222..44dae6d 100644 --- a/src/Controllers/Common/AchievementController.cs +++ b/src/Controllers/Common/AchievementController.cs @@ -90,6 +90,20 @@ public class AchievementController : Controller { return Ok("OK"); } + [HttpPost] + [Produces("application/xml")] + [Route("AchievementWebService.asmx/GetUserAchievementInfo")] + public IActionResult GetUserAchievementInfo([FromForm] string apiToken) { + Viking? viking = ctx.Sessions.FirstOrDefault(x => x.ApiToken == apiToken).Viking; + + if (viking != null) { + return Ok( + achievementService.CreateUserAchievementInfo(viking, AchievementPointTypes.PlayerXP) + ); + } + return null; + } + [HttpPost] [Produces("application/xml")] [Route("AchievementWebService.asmx/GetAchievementsByUserID")] diff --git a/src/Controllers/Common/AuthenticationController.cs b/src/Controllers/Common/AuthenticationController.cs index a4b9518..04a6342 100644 --- a/src/Controllers/Common/AuthenticationController.cs +++ b/src/Controllers/Common/AuthenticationController.cs @@ -33,11 +33,18 @@ public class AuthenticationController : Controller { [Route("v3/AuthenticationWebService.asmx/LoginParent")] [DecryptRequest("parentLoginData")] [EncryptResponse] - public IActionResult LoginParent() { + public IActionResult LoginParent([FromForm] string apiKey) { ParentLoginData data = XmlUtil.DeserializeXml(Request.Form["parentLoginData"]); // Authenticate the user - User? user = ctx.Users.FirstOrDefault(e => e.Username == data.UserName); + User? user = null; + uint gameVersion = ClientVersion.GetVersion(apiKey); + if (gameVersion == ClientVersion.WoJS) { + user = ctx.Users.FirstOrDefault(e => e.Email == data.UserName); + } else { + user = ctx.Users.FirstOrDefault(e => e.Username == data.UserName); + } + if (user is null || new PasswordHasher().VerifyHashedPassword(null, user.Password, data.Password) != PasswordVerificationResult.Success) { return Ok(new ParentLoginInfo { Status = MembershipUserStatus.InvalidPassword }); } @@ -52,6 +59,11 @@ public class AuthenticationController : Controller { ctx.Sessions.Add(session); ctx.SaveChanges(); + var childList = new List(); + foreach (var viking in user.Vikings) { + childList.Add(new sodoff.Schema.UserLoginInfo{UserName = viking.Name, UserID = viking.Uid.ToString()}); + } + var response = new ParentLoginInfo { UserName = user.Username, //Email = user.Email, /* disabled to avoid put email in client debug logs */ @@ -59,7 +71,8 @@ public class AuthenticationController : Controller { UserID = user.Id.ToString(), Status = MembershipUserStatus.Success, SendActivationReminder = false, - UnAuthorized = false + UnAuthorized = false, + ChildList = childList.ToArray() }; return Ok(response); @@ -124,7 +137,9 @@ public class AuthenticationController : Controller { [HttpPost] [Produces("application/xml")] [Route("AuthenticationWebService.asmx/IsValidApiToken_V2")] - public IActionResult IsValidApiToken([FromForm] Guid apiToken) { + public IActionResult IsValidApiToken([FromForm] Guid? apiToken) { + if (apiToken is null) + return Ok(ApiTokenStatus.TokenNotFound); User? user = ctx.Sessions.FirstOrDefault(e => e.ApiToken == apiToken)?.User; Viking? viking = ctx.Sessions.FirstOrDefault(e => e.ApiToken == apiToken)?.Viking; if (user is null && viking is null) diff --git a/src/Controllers/Common/ContentController.cs b/src/Controllers/Common/ContentController.cs index 444c394..0b78256 100644 --- a/src/Controllers/Common/ContentController.cs +++ b/src/Controllers/Common/ContentController.cs @@ -315,8 +315,21 @@ public class ContentController : Controller { return 0; } + [HttpPost] + //[Produces("application/xml")] + [Route("ContentWebService.asmx/GetAvatar")] // used by World Of Jumpstart + public IActionResult GetAvatar([FromForm] string apiToken) { + Viking? viking = ctx.Sessions.FirstOrDefault(e => e.ApiToken == apiToken)?.Viking; + if (viking is null || viking.AvatarSerialized is null) { + // TODO: result for invalid session + return Ok(); + } + return Ok(viking.AvatarSerialized); + } + [HttpPost] [Produces("application/xml")] + [Route("ContentWebService.asmx/SetAvatar")] // used by World Of Jumpstart [Route("V2/ContentWebService.asmx/SetAvatar")] [VikingSession] public IActionResult SetAvatar(Viking viking, [FromForm] string contentXML) { @@ -577,6 +590,8 @@ public class ContentController : Controller { [HttpPost] [Produces("application/xml")] [Route("ContentWebService.asmx/GetSelectedRaisedPet")] + [Route("ContentWebService.asmx/GetCurrentPetByUserID")] // used by World Of Jumpstart + [Route("ContentWebService.asmx/GetActiveRaisedPet")] // used by World Of Jumpstart [VikingSession(UseLock=false)] public RaisedPetData[]? GetSelectedRaisedPet(Viking viking, [FromForm] string userId, [FromForm] bool isActive) { Dragon? dragon = viking.SelectedDragon; @@ -1156,6 +1171,22 @@ public class ContentController : Controller { return Ok(roomService.NextItemState(item, request.OverrideStateCriteria)); } + [HttpPost] + //[Produces("application/xml")] + [Route("ContentWebService.asmx/GetDisplayNames")] // used by World Of Jumpstart + public IActionResult GetDisplayNames() { + // TODO: This is a placeholder + return Ok(" 1 Aaliyah 1 2 Abby 1 3 Adrian 1 261 Alan 1 "); + } + + [HttpPost] + //[Produces("application/xml")] + [Route("ContentWebService.asmx/GetScene")] // used by World Of Jumpstart + public IActionResult GetScene() { + // TODO: This is a placeholder + return Ok(""); + } + [HttpPost] [Produces("application/xml")] [Route("V2/ContentWebService.asmx/GetGameData")] diff --git a/src/Controllers/Common/ItemStoreController.cs b/src/Controllers/Common/ItemStoreController.cs index f5569bf..808f685 100644 --- a/src/Controllers/Common/ItemStoreController.cs +++ b/src/Controllers/Common/ItemStoreController.cs @@ -46,6 +46,13 @@ public class ItemStoreController : Controller { return Ok(itemService.GetItem(itemId)); } + [HttpPost] + [Produces("application/xml")] + [Route("ItemStoreWebService.asmx/GetItemsInStore")] // used by World Of Jumpstart + public IActionResult GetItemsInStore([FromForm] int storeId) { + return Ok(storeService.GetStore(storeId)); + } + [HttpPost] //[Produces("application/xml")] [Route("ItemStoreWebService.asmx/GetRankAttributeData")] diff --git a/src/Controllers/Common/RegistrationController.cs b/src/Controllers/Common/RegistrationController.cs index 97833ab..9be9e86 100644 --- a/src/Controllers/Common/RegistrationController.cs +++ b/src/Controllers/Common/RegistrationController.cs @@ -63,6 +63,12 @@ public class RegistrationController : Controller { }; // Check if user exists + uint gameVersion = ClientVersion.GetVersion(apiKey); + if (gameVersion == ClientVersion.WoJS || gameVersion == ClientVersion.MB) { + if (ctx.Users.Count(e => e.Email == u.Email) > 0) { + return Ok(new RegistrationResult { Status = MembershipUserStatus.DuplicateEmail }); + } + } if (ctx.Users.Count(e => e.Username== u.Username) > 0) { return Ok(new RegistrationResult { Status = MembershipUserStatus.DuplicateUserName }); }