public void registration(HttpProcessor p, string[] route) { //Здесь мы видим как применяеться проверка данных //Способ : p.InputPOST("Password") != "null" & p.InputPOST("Username") != "null" //показывает нам как он много занимет места в коде и какой не практичный //способ formvalidation.add(p.InputPOST("Password"), "num|required"); //показывает нам как можно выполнить любую проверку текста просто указывая их //здесь мы задали чтобы данные не были пустыми и содержали целочисленный тип formvalidation.add("Password", "required|num"); //здесь мы задали чтобы данные не были пустыми и содержали буквы англ и русс //также добавил проверку на уникальность в БД is_unique[users.login] users ->БД login -> поле где проверить, //ответ false если в БД уже такое есть. formvalidation.add("Username", "required|alpha|is_unique[users.login]"); //здесь мы запускаем его и узнаем можно продолжать работать или просто пустить клиента на страницу registration if (formvalidation.Start(p)) { //старый способ проверки кода просто на существование строк if (p.InputPOST("Password") != "null" & p.InputPOST("Username") != "null") if (connect.insert_update("INSERT INTO `users` (`login`, `pass`, `rules`) VALUES(@0, @1, '001');", new string[] { p.InputPOST("Username"), p.InputPOST("Password") })) p.redirect("http://localhost:8080/login"); } }
public void login(HttpProcessor p, string[] route) { if (p.InputPOST("Password") != "null" & p.InputPOST("Username") != "null") if (connect.select("Select `id_users`, `login`, `rules` from `users` Where `login`='" + p.InputPOST("Username") + "' and `pass`='" + p.InputPOST("Password") + "';")) while (connect.MyReader.Read())// Читаем { Sessions.add("id_users", connect.MyReader.GetValue(0).ToString()); Sessions.add("login", connect.MyReader.GetValue(1).ToString()); Sessions.add("rules", connect.MyReader.GetValue(2).ToString()); Sessions.add("auth", "1"); p.redirect("http://localhost:8080/index"); } }
public void admin(HttpProcessor p, string[] route) { p.HTML.Body.Add("title", "Панель управления"); if (Sessions.rules(Session.RulesType.admin) || Sessions.rules(Session.RulesType.moderator)) { string str = "Добро пожаловать" + Sessions.item("login") + " Вы "; //проверка сэссии пользователя и его прав. str += (Sessions.rules(Session.RulesType.user)) ? "Пользователь" : "Нет"; if (Sessions.item("auth") != "null") p.HTML.Body.Add("welcome", str); else p.HTML.Body.Add("welcome", "Авторизируйтесь"); } else p.redirect("http://localhost:8080/index"); }
public void exit(HttpProcessor p, string[] route) { Sessions.exit(); p.redirect("http://localhost:8080/login"); }
// Убираем старую версию распределения запросов и делаем ниже новую машрузитацию public void route(HttpProcessor p) { string ContentType = "text/html"; string Extension = ""; //Переменная для определения запуска процедуры т.е. если клиент ввел http://localhost/index -> вызовет процедуру RouterProcedure::index string RoutePath = p.http_url; //Убираем / в начале if (RoutePath.IndexOf('/') != -1) RoutePath = RoutePath.Substring(RoutePath.IndexOf('/') + 1); //если был GET запрос его тоже убираем if (RoutePath.IndexOf('?') != -1) RoutePath = RoutePath.Remove(RoutePath.IndexOf('?')); //проверяем на скачку файла т.е. если введено http://localhost/css/style.css, то передаем переменной Extension ".css" if (RoutePath.IndexOf('.') != -1) Extension = p.http_url.Substring(p.http_url.LastIndexOf('.')); //Проверяем на скачку,если Extension больше 0, даем скачать файл if (Extension.Length != 0) { switch (Extension) { case ".css": ContentType = "text/css"; break; case ".js": ContentType = "text/javascript"; break; case ".jpg": ContentType = "image/jpeg"; break; case ".jpeg": case ".png": case ".gif": ContentType = "image/" + Extension.Substring(1); break; default: if (Extension.Length > 1) { ContentType = "application/" + Extension.Substring(1); } else { ContentType = "application/unknown"; } break; } FileStream FS; try { FS = new FileStream(@"C:\Project\Access\d2" + p.http_url, FileMode.Open, FileAccess.Read, FileShare.Read); //Отправка Заголовка. string Headers = "HTTP/1.1 200 OK\nContent-Type: " + ContentType + "\nContent-Length: " + FS.Length + "\n\n"; byte[] HeadersBuffer = Encoding.UTF8.GetBytes(Headers); p.socket.GetStream().Write(HeadersBuffer, 0, HeadersBuffer.Length); // Буфер для отправки клиенту данных byte[] Buffer = new byte[1024]; // Переменная для хранения количества байт, переданных клиенту int Count; while (FS.Position < FS.Length) { // Читаем данные из файла Count = FS.Read(Buffer, 0, Buffer.Length); // И передаем их клиенту p.socket.GetStream().Write(Buffer, 0, Count); } FS.Close(); } catch (Exception) { // Если случилась ошибка, посылаем клиенту ошибку 500 p.outputStream.Write("HTTP/1.0 404 File not found\n"); p.outputStream.Write("Connection: close\n\n"); } return; } else { Sessions = new Session(p); //если происходит вызов http://localhost/index -> вызовет процедуру RouterProcedure::index RouterProcedure mc = new RouterProcedure(); //если будет вызов http://localhost/index/login, то будет искать процедуру index, передаст в параметр а login string[] MasRoutePathFormat = RoutePath.Split('/'); MethodInfo m = mc.GetType().GetMethod(MasRoutePathFormat[0], BindingFlags.Instance | BindingFlags.Public); //Запускаем и передаем параметр: //p-сервер, //MasRoutePathFormat-путь по которуму пришел пользователь //connect - mysql соединение try { m.Invoke(mc, new Object[] { p, MasRoutePathFormat }); } catch (Exception) { p.redirect("http://localhost:8080/index"); return; } //Сохраняем данные для сессии Sessions.push(); //отправляем юзеру p.SendToUsers(MasRoutePathFormat[0]); connect.close(); } }