Exemplo n.º 1
0
        private static IHttpResponse SignIn(IHttpHeaders query)
        {
            if (query.TryGetByName("UserName", out string userName) &&
                query.TryGetByName("Password", out string password))
            {
                var rows = DBHolderSQL.GetRange("Account", null, 0, 1, true, false, false, false,
                                                ("UserName", userName),
                                                ("Password", password)).Rows;

                if (rows.Count == 1)
                {
                    return(new HttpResponse(HttpResponseCode.Ok, CreateToken(int.Parse(rows[0]["ID"].ToString()), userName, password), true));
                }
                else if (rows.Count > 1)
                {
                    DBHolderSQL.Log($"[КОНФЛИКТ] Конфликт аккаунтов {userName}.",
                                    $"Попытка входа при наличии более одного аккаунта с одинаковым именем пользователя ({userName}).\n" +
                                    $"Измените имя пользователя для одного из аккаунтов.");
                    return(new HttpResponse(HttpResponseCode.InternalServerError, "Ошибка! Найдено более 1 аккаунта. Обратитесь к администратору.", false));
                }
                else
                {
                    DBHolderSQL.Log($"[НЕВЕРНЫЙ ВВОД] Ошибка авторизации пользователя {userName}.",
                                    $"Пользователь ввел неверные данные. Осторожно! Это может означать попытку взлома \"Грубой силой\"(BruteForce)");
                    return(new HttpResponse(HttpResponseCode.Forbidden, "Ошибка! Пользователь с таким именем пользователя и паролем не найден.", false));
                }
            }
            else
            {
                return(new HttpResponse(HttpResponseCode.Forbidden, "Укажите 'UserName' и 'Password'!", false));
            }
        }
Exemplo n.º 2
0
        public Task Handle(IHttpContext context, Func <Task> next)
        {
            var request = context.Request;

            if (request.Method == HttpMethods.Post)
            {
                if (request.Post.Parsed.TryGetByName("token", out string tokenString))
                {
                    var validationResult = AuthorizationHandler.VerifyToken(tokenString, false);
                    if (validationResult.valid)
                    {
                        if ((DateTime.Now.Subtract(validationResult.account.LastAction ?? new DateTime()).TotalSeconds) > Account.OnlineTimeoutSeconds - 1)
                        {
                            validationResult.account.LastAction = DateTime.Now;
                            DBHolderSQL.Save(nameof(Account), (nameof(Account.ID), validationResult.account.ID), (nameof(Account.LastAction), validationResult.account.LastAction));
                        }
                        if (request.Post.Parsed.TryGetByName("action", out string action))
                        {
                            context.Response = Actions[action]?.Invoke(request.Post.Parsed, validationResult.account);
                        }
                        else
                        {
                            context.Response = new HttpResponse(HttpResponseCode.MethodNotAllowed, "Эм.. что от меня требуется???", false);
                        }
                    }
                    else
                    {
                        DBHolderSQL.Log($"[ОШИБКА ДОСТУПА] Пользователь с поврежденным или подделанным токеном пытался войти в систему. Экземпляр токена предоставлен в описании.",
                                        $"{tokenString}");
                        context.Response = new HttpResponse(HttpResponseCode.Forbidden, "Доступ запрещен! Ошибка разбора токена!", false);
                    }
                }
                else
                {
                    context.Response = new HttpResponse(HttpResponseCode.Forbidden, "Доступ запрещен! Нужен токен!", false);
                }
            }
            else
            {
                context.Response = new HttpResponse(HttpResponseCode.MethodNotAllowed, "Метод недоступен!", false);
            }

            return(Task.Factory.GetCompleted());
        }