コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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();
                }
            });
        }
コード例 #4
0
 public ApiClient(AccountSessionView accountSessionView)
 {
     AccountSessionView = accountSessionView;
 }