Beispiel #1
0
 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");
     }
 }
Beispiel #2
0
 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");
             }
 }
Beispiel #3
0
 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");
 }
Beispiel #4
0
 public void exit(HttpProcessor p, string[] route)
 {
     Sessions.exit();
     p.redirect("http://localhost:8080/login");
 }
Beispiel #5
0
        // Убираем старую версию распределения запросов и делаем ниже новую машрузитацию
        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();
            }
        }