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)); } }
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()); }