public static async Task <ValidatedView <GlobalRole> > Authenticate(AccountSessionView accountSessionView) { if (!accountSessionView.IsValid(out string message)) { return(ValidatedView <GlobalRole> .Invalid(message)); } try { if (!await Model <AccountSessionModel> .AsQueryable() .Any(x => x.AccountID == accountSessionView.AccountID && x.Token == accountSessionView.Token)) { return(ValidatedView <GlobalRole> .Invalid(ErrorCode.INVALID_SESSION)); } GlobalRole?role = await Model <AccountModel> .AsQueryable() .Where(x => x.ID == accountSessionView.AccountID) .Select(x => (GlobalRole?)x.Role).FirstOrDefault(); if (role.HasValue) { return(ValidatedView <GlobalRole> .Valid(role.Value)); } } catch (Exception e) { GameContext.Logger.LogError(e); } return(ValidatedView <GlobalRole> .Invalid(ErrorCode.OPERATION_FAILED)); }
public static bool TryGetCurrentSession(this HttpContext context, out AccountSessionView accountSession) { accountSession = null; if (context.Request.Headers.ContainsKey("x-api-id") && context.Request.Headers.ContainsKey("x-api-token") && int.TryParse(context.Request.Headers["x-api-id"], out int id)) { accountSession = new AccountSessionView(id, context.Request.Headers["x-api-token"]); } return(accountSession != null); }
public void Execute(IClient initiator, LoginRequest command) { // dummes spiel amk command.sessionID = command.sessionID.Replace("\0", "").Trim(); Task.Run(async() => { try { AccountSessionView session = new AccountSessionView(command.userID, command.sessionID); ValidatedView <GlobalRole> result = await AccountService.Authenticate(session); if (result.IsValid) { if (GameManager.Get(command.userID, out _)) { GameManager.Attach(command.userID, initiator as GameConnectionHandler, null, command.version.Replace("\0", "").Trim().Length != 0); return; } ValidatedView <AccountView> validatedAccountView = await AccountService.RetrieveAccount(session.AccountID); if (validatedAccountView.IsValid) { validatedAccountView.Object.CurrentHangar.Check(initiator.Logger, validatedAccountView.Object.ID, validatedAccountView.Object.Vault); validatedAccountView.Object.CurrentHangar.Calculate(); GameManager.Attach(validatedAccountView.Object.ID, initiator as GameConnectionHandler, validatedAccountView.Object, command.version.Replace("\0", "").Trim().Length != 0); } else { initiator.Logger.LogError(new Exception($"Player: '{session.AccountID}': {validatedAccountView.Message}")); initiator.Dispose(); } } else { initiator.Send(PacketBuilder.InvalidSession()); initiator.Dispose(); } } catch (Exception e) { initiator.Logger.LogError(e); initiator.Dispose(); } }); }
public ApiClient(AccountSessionView accountSessionView) { AccountSessionView = accountSessionView; }