using Microsoft.AspNetCore.Mvc; using RecRoomArchive.Models.API.PlatformLogin.Requests; using RecRoomArchive.Models.API.PlatformLogin.Responses; using RecRoomArchive.Services; namespace RecRoomArchive.Controllers.API.PlatformLogin.V2 { /// /// Used to login to accounts on Rec Room /// [Route(template: "api/[controller]/v2")] [ApiController] public class PlatformLoginController(AppVersionService appVersionService, AccountService accountService, AuthorizationService authorizationService) : ControllerBase { /// /// Checks if the appVersion provided is allowed to play (which it most certainly will be unless its a weird build or someone messed with it) /// /// An Ok response if the version is valid, Forbid if it is not. Forbid will yield the client displaying "Rec Room Update Required" soo maybe don't [HttpPost] public async Task Login([FromHeader(Name = "X-Rec-Room-Version")] string appVersion, [FromForm] BaseLoginRequest loginRequest) { var username = loginRequest.Name ?? string.Empty; var buildTimestamp = loginRequest.BuildTimestamp; // We are going to store the appVersion on login now... await appVersionService.StoreAppVersion(appVersion); await appVersionService.StoreBuildTimestamp(buildTimestamp); // See if a profile exists yet... if(!accountService.AccountExists()) { // ...if not, create it! accountService.CreateAccount(username); } var accountId = accountService.GetSelfAccount()!.Id; return Ok(new BaseLoginResponse { Token = authorizationService.GenerateToken(accountId), PlayerId = accountId }); } } }