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 auth(HttpProcessor p, string[] route) { p.HTML.Body.Add("title", "Авторизация"); //Удаляем все пароли которые были созданы больше 5 минут назад и не были активированы connect.insert_update("DELETE FROM `secret_num` WHERE TIMEDIFF(now(), `date`) > TIME(@0);", new string[] { "00:05:00" }); //проверяем человек авторизировался через Социальные сети или нет if (p.InputPOST("token") != "null") { //С помощью токена вырываем данные с сайта для получения всей информации о человеке Hashtable Temp = new Hashtable(); System.Net.WebRequest req = System.Net.WebRequest.Create("https://ulogin.ru/token.php" + "?" + "token=" + p.InputPOST("token") + "&host=localhost"); System.Net.WebResponse resp = req.GetResponse(); System.IO.Stream stream = resp.GetResponseStream(); System.IO.StreamReader sr = new System.IO.StreamReader(stream); string Out = sr.ReadToEnd(); sr.Close(); Out = Out.Trim(new char [] {'{', '}'}); string[] TempStr = Out.Split(','); foreach (string s in TempStr) { string[] TempStr2 = s.Split(new string[] { Convert.ToChar(34) + ":" + Convert.ToChar(34) },StringSplitOptions.None); Temp.Add(TempStr2[0].Trim('"'), System.Text.RegularExpressions.Regex.Unescape(TempStr2[1].Trim('"'))); } //Проверяем существует ли такой логин(идентификатор) в БД if (formvalidation.is_unique(Temp["identity"].ToString(), "users.login")) //добавляем данныем в БД connect.insert_update("INSERT INTO `users` (`login`, `e-mail`, `fio`, `name_s_net`, `rules`) VALUES(@0, @1, @2, @3, '001');", new string[] { Temp["identity"].ToString(), Temp["email"].ToString(), Temp["first_name"].ToString() + Temp["last_name"].ToString(), Temp["network"].ToString() }); } //Если в форме был введен телефон, то... else if (p.InputPOST("Phone") != "null") { //Создаем пароль который будет передан в смс string SecretPass = Simbol(5); //добавляем в проверку номер телефона (не должен быть пустым, должен состоять из цифр, и должен быть в Бд уникальным) formvalidation.add("Phone", "required|num|is_unique[users.phone]"); //Запускаем проверку if (formvalidation.Start(p)) //Вставляем в таблицу нового юзера connect.insert_update("INSERT INTO `users` (`phone`, `rules`) VALUES(@0, '001');", new string[] { p.InputPOST("Phone") }); //Проверяем на существование и сразу ищем ИД пользователя которого добавили if (connect.select("Select `id_users` from `users` Where `phone`='" + p.InputPOST("Phone") + "' LIMIT 1;")) { //читаем перву строку данных полученную из бд connect.MyReader.Read(); //вставляем в таблицу secret_num пароль и ид пользователя //который будет использоваться при вводе для проверки connect.insert_update("INSERT INTO `secret_num` (`id_users`, `num`, `date`) VALUES(@0, @1, now());", new string[] { connect.MyReader.GetValue(0).ToString(), SecretPass }); //отправка смс SendSMS.Send(SecretPass, "+7" + p.InputPOST("Phone"), "COM10"); } else { //выдаем сообщение Пользователю Ошибка p.MSG("Ошибочка"); } } //проверка на ввод пароля для доступа в интернет пользователем else if (p.InputPOST("Password") != "null") { //Проверка пароля, он должен должен быть не пустым и не уникальным(существовать) в БД formvalidation.add("Password", "required|is_not_unique[secret_num.num]"); //Запуск проверки if (formvalidation.Start(p)) { //Если все успешно удаляем пароль connect.insert_update("DELETE FROM `secret_num` WHERE `num` = @0;", new string[] { p.InputPOST("Password") }); //и выдает сообщение пользователю p.MSG("Все круто"); } else { p.MSG("Не верно введен пароль!"); } } }
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 static bool Start(HttpProcessor p) { //передаем управление классом переменной о Type MyClass = typeof(formvalidation); object o = Activator.CreateInstance(MyClass); foreach (DictionaryEntry s in MasValidation) { //Узнаем какие правила будут использоваться string[] MasMethods = s.Value.ToString().Split('|'); foreach (string rule in MasMethods) { string[] ParseRule = rule.TrimEnd(']').Split('['); //запускаем нужный метод который был выбран для проверки MethodInfo info = typeof(formvalidation).GetMethod(ParseRule[0], BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static); bool Out; if (ParseRule.Length >1) Out = (bool)info.Invoke(o ,new object[] {p.InputPOST((string)s.Key), ParseRule[1]}); else Out = (bool)info.Invoke(o ,new object[] {p.InputPOST((string)s.Key)}); if (!Out) { MasValidation.Clear(); return false; } } } MasValidation.Clear(); return true; }