From acd095a71157e7b1f481d99c4beb72517fd1e70e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Luttringer?= Date: Tue, 9 Mar 2010 19:53:02 +0000 Subject: [PATCH] add rss stream (news and videos) fix db latin1 connection in place of utf8 general sql reorganisation new auth system fix html errors (W3C HTML validator help me) merge admin sql code auth system rewrote --- css/default.css | 2 + images/rss.png | Bin 0 -> 45541 bytes include/admin_home.php | 6 +- include/admin_menu.php | 66 ++---- include/auth.php | 52 +++++ include/connection.php | 208 ++++------------- include/db.php.template | 12 + include/db_connect.php.template | 17 -- include/functions_sql.php | 187 --------------- include/home.php | 6 +- include/html.php | 3 +- include/rss.php | 57 +++++ include/script.js | 10 +- include/{functions_sql_admin.php => sql.php} | 230 +++++++++++++------ index.php | 44 ++-- 15 files changed, 372 insertions(+), 528 deletions(-) create mode 100644 images/rss.png create mode 100644 include/auth.php create mode 100644 include/db.php.template delete mode 100644 include/db_connect.php.template delete mode 100644 include/functions_sql.php create mode 100644 include/rss.php rename include/{functions_sql_admin.php => sql.php} (73%) diff --git a/css/default.css b/css/default.css index df50a36..acfb2f2 100644 --- a/css/default.css +++ b/css/default.css @@ -38,6 +38,8 @@ li a { img { margin: 0 auto; padding: 0px; + border: 0px; + text-align: right; } .clr { diff --git a/images/rss.png b/images/rss.png new file mode 100644 index 0000000000000000000000000000000000000000..010edc23c32219d6c0485459adfa78eae6788e16 GIT binary patch literal 45541 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 literal 0 HcmV?d00001 diff --git a/include/admin_home.php b/include/admin_home.php index ae1d12b..c27d234 100644 --- a/include/admin_home.php +++ b/include/admin_home.php @@ -3,7 +3,6 @@ function dispAdminHome() { include_once "include/admin_tables.php"; -include_once "include/functions_sql_admin.php"; include_once "include/admin_menu.php"; include_once "include/admin_videos.php"; include_once "include/admin_news.php"; @@ -352,8 +351,7 @@ $str .= ' } else { -$str = ' - +$str = '
@@ -367,7 +365,7 @@ $str = ' -
+
'; } diff --git a/include/admin_menu.php b/include/admin_menu.php index 73fc727..a0f1a32 100644 --- a/include/admin_menu.php +++ b/include/admin_menu.php @@ -1,54 +1,18 @@ - - '; - if ($_SESSION["user_right"] >= $GLOBALS["PRIV_GUEST"]) { - $str .= ' -
- Videos -
- '; - } - - $str .= ' -
- News -
- '; - - if ($_SESSION["user_right"] >= $GLOBALS["EPTV"]) { - $str .= ' -
- Edito -
-
- Links -
- -
- Users -
- -
- Munin -
- - - '; - } - - -return $str; - + $str = ''; + if ($_SESSION["user_right"] >= $GLOBALS["PRIV_GUEST"]) + $str .= ''; + + if ($_SESSION["user_right"] >= $GLOBALS["EPTV"]) { + $str .= ''; + $str .= ''; + $str .= ''; + $str .= ''; + $str .= ''; + $str .= ''; + $str .= ''; + $str .= ''; + } + return $str; } \ No newline at end of file diff --git a/include/auth.php b/include/auth.php new file mode 100644 index 0000000..98b6018 --- /dev/null +++ b/include/auth.php @@ -0,0 +1,52 @@ + 0) + auth_disconnect(); + + // Process auth if asked + + if ($_POST['connect']) { + if (!auth_connect(stripslashes($_POST['user_login']), + stripslashes($_POST['user_pass']))) + redirect('/?html=Connection&fail='.stripslashes($_POST['user_login'])); + } + //Process disconnect if asked + if ($_POST['disconnect']) + auth_disconnect(); +} + +function auth_connect($login, $pass) { + $md5_pass = md5($pass); + $result = getOneUserByLogin($login); + if (mysql_num_rows($result) > 0) { + $user = mysql_fetch_array($result); + if ($user["user_login"] == $login && $user["user_pass"] == $md5_pass) + if (!auth_blacklisted($login)) { + $_SESSION["user_right"] = $user["user_right"]; + $_SESSION["user_id"] = $user["user_id"]; + return true; + } + } + return false; +} + +function auth_disconnect() { + $_SESSION["user_id"] = 0; + $_SESSION["user_right"] = 0; +} + +function auth_blacklisted($login) { + $result = getOneBlacklistByLogin($login); + + return mysql_num_rows($result) > 0; +} + +?> \ No newline at end of file diff --git a/include/connection.php b/include/connection.php index 8733095..45a40af 100644 --- a/include/connection.php +++ b/include/connection.php @@ -1,178 +1,60 @@ '; + echo '

Pour vous connecter au site, vous devez utiliser une connexion SSL!

'; + echo ''; + return; + } + + if ($_GET["fail"]) + dispConnectionFailure(); + elseif ($_SESSION["user_id"] == 0) + dispConnectionLogin(); else - $str .= dispConnectionDisconnect(); - echo $str; + dispConnectionDisconnect(); } -function dispConnectionLogin() { /////// CONNECTION LOGIN /////// +function dispConnectionLogin() { $str = '
'; - $str .= dispTableBegin("c o n n e x i o n", "30", 1); - if ($_SERVER['HTTPS'] == "on") { - $str .= '
'; - $str .= 'Login'; - $str .= ''; - $str .= 'Pass'; - $str .= ''; - $str .= '
'; - $str .= '
'; - } - else - $str .= "

Pour vous connecter au site, vous devez utiliser une connexion SSL!

"; - - $str .= dispTableEnd(); + $str .= '
'; + $str .= '
    '; + $str .= '

    Connexion

    '; + $str .= '
  • Login :
  • '; + $str .= '
  • Password :
  • '; + $str .= '
  • '; + $str .= '
'; + $str .= '
'; $str .= '
'; - return $str; -} - -function dispConnectionDisconnect() { /////// CONNECTION PROFIL /////// - - $ID = $_SESSION["user_id"]; - - $result = getOneUserById($ID); - - - $user = mysql_fetch_array($result); - - $str = '
'; - $str .= dispTableBegin("d é c o n n e c t e r", "30", 1); - - $str .=' -
- Salut à toi - '.$user["user_pseudo"].' - - - - - '.$user["user_comment"].' - - -
-
- '; - - $str .= dispTableEnd(); - $str .= '
'; - -return ($str); -} - -// Disconnect user -function userDisconnect(){ - $_SESSION["user_right"] = 0; - $_SESSION["user_id"] = 0; -} - -function checkUser($Check_Login, $Check_Pass){ - - $result_login = getOneUserByName($Check_Login); - $result_pseudo = getOneUserByPseudo($Check_Login); - - // MD5 - $md5_Pass = stripslashes($Check_Pass); - $md5_Pass = md5($md5_Pass); - - if (mysql_num_rows($result_login)){ - $user = mysql_fetch_array($result_login); - - if ($user["user_login"] == $Check_Login && $user["user_pass"] == $md5_Pass ) { - - $_SESSION["user_right"] = $user["user_right"]; - $_SESSION["user_id"] = $user["user_id"]; - return; - } - } - else if (mysql_num_rows($result_pseudo)){ - $user = mysql_fetch_array($result_pseudo); - if ($user["user_pseudo"] == $Check_Login && $user["user_pass"] == $md5_Pass ) { - $_SESSION["user_right"] = $user["user_right"]; - $_SESSION["user_id"] = $user["user_id"]; - return; - } - } - - if (yp_check($Check_Login, $Check_Pass)) { - if ($user["user_login"] == $Check_Login){ - $_SESSION["user_right"] = $user["user_right"]; - $_SESSION["user_id"] = $user["user_id"]; - } - else { - if (!check_blacklist($Check_Login)) { - $_SESSION["user_right"] = 3; - $_SESSION["user_id"] = 0; - } - else { - $_SESSION["user_right"] = -1; - } - } - - return; - } + echo $str; } -function check_blacklist($Check_Login) { ////// CHECK IF BLACKLISTED ////// - - $result = getOneBlacklistByLogin($Check_Login); - - if (mysql_num_rows($result)){ - $blacklist = mysql_fetch_array($result); - - $try = $blacklist["blacklist_try"] + 1; - - $query = " UPDATE `blacklist_db` "; - $query .= " SET `blacklist_try` = '$try' "; - $query .= " WHERE `blacklist_login` = '$Check_Login' LIMIT 1"; - mysql_query($query) - or die("Query failed"); - - $result = getAllBlacksite(); - // random un peu porc pour les fake sites. - $cpt = 0; - while ($blacksite = mysql_fetch_array($result)) { - $cpt++; - $tabsite[$cpt] = $blacksite["blacksite_id"]; - } - - $randsite = rand (1, $cpt); - - $result = getOneBlacksiteById($tabsite[$randsite]); - $blacksite = mysql_fetch_array($result); - - echo ' '; // automatique redirection - return (1); - } - - return (0); +function dispConnectionDisconnect() { + $result = getOneUserById($_SESSION["user_id"]); + if (mysql_num_rows($result) > 0) { + $user = mysql_fetch_array($result); + $str = '
'; + $str .= '
'; + $str .= '
    '; + $str .= '

    Déconnexion

    '; + $str .= '
  • Vous allez déconnecté l\'utilisateur '.$user["user_pseudo"].' ('.$user["user_login"].') !
  • '; + $str .= '
  • '; + $str .= '
'; + $str .= '
'; + $str .= '
'; + } + echo $str; } -function go_random_blacksite() { - - $result = getAllBlacksite(); - // random un peu porc pour les fake sites. - $cpt = 0; - while ($blacksite = mysql_fetch_array($result)) { - $cpt++; - $tabsite[$cpt] = $blacksite["blacksite_id"]; - } - - $randsite = rand (1, $cpt); - - $result = getOneBlacksiteById($tabsite[$randsite]); - $blacksite = mysql_fetch_array($result); - - echo ' '; // automatique redirection - +function dispConnectionFailure() { + $str = '
'; + $str .= '

'; + $str .= 'L\'authentification en tant que '.$_GET["fail"].' à échouée'; + $str .= '
Pour vous connecter au site, vous devez utiliser une connexion SSL!'; + $str .= '

'; + $str .= '
'; + echo $str; } ?> diff --git a/include/db.php.template b/include/db.php.template new file mode 100644 index 0000000..21afd21 --- /dev/null +++ b/include/db.php.template @@ -0,0 +1,12 @@ +can't connect"); +mysql_select_db($db_name, $db) +or die("can't find database"); +?> diff --git a/include/db_connect.php.template b/include/db_connect.php.template deleted file mode 100644 index 6029af7..0000000 --- a/include/db_connect.php.template +++ /dev/null @@ -1,17 +0,0 @@ -can't connect"); -mysql_select_db($bdd_name, $db) - or DIE("can't find database"); - - -?> diff --git a/include/functions_sql.php b/include/functions_sql.php deleted file mode 100644 index a7e0654..0000000 --- a/include/functions_sql.php +++ /dev/null @@ -1,187 +0,0 @@ -= 7"; - return mysql_query($query); -} - -function getAnExistingStatut($statut) { - $statut = mysql_real_escape_string($statut); - $query = "select * from $DB.users_db WHERE user_statut = '$statut'"; - return mysql_query($query); -} - -#################################### -########## SQL Blacklist ######## -#################################### - -function getOneBlacklistById($id) { - $id = mysql_real_escape_string($id); - $query = "select * from $DB.blacklist_db WHERE blacklist_id='$id'"; - return mysql_query($query); -} - -function getOneBlacklistByLogin($login) { - $login = mysql_real_escape_string($login); - $query = "select * from $DB.blacklist_db WHERE blacklist_login='$login'"; - return mysql_query($query); -} - -function getAllBlacklist() { - $query = "select * from $DB.blacklist_db"; - return mysql_query($query); -} - -function getAllBlacksite() { - $query = "select * from $DB.blacksites_db"; - return mysql_query($query); -} - -function getOneBlacksiteById($id) { - $id = mysql_real_escape_string($id); - $query = "select * from $DB.blacksites_db WHERE blacksite_id='$id'"; - return mysql_query($query); -} - -?> \ No newline at end of file diff --git a/include/home.php b/include/home.php index f65996d..6cebd98 100644 --- a/include/home.php +++ b/include/home.php @@ -6,7 +6,7 @@ function dispHome() { $str .= ''; $str .= '
-

Dernières actualités

+

 Dernières actualités Flux RSS Actualiés

    '; $str .=dispNewsRows(15); @@ -17,7 +17,7 @@ function dispHome() {
    -

    Edito

    +

     Edito

    '; $str .= dispHomeEdito(); @@ -25,7 +25,7 @@ function dispHome() { $str .= '
    -

    Dernières vidéo

    +

     Dernières vidéo Flux RSS Vidéos

    '; $str .= dispHomeLastVideos(); diff --git a/include/html.php b/include/html.php index bdadd28..28d4859 100644 --- a/include/html.php +++ b/include/html.php @@ -37,6 +37,8 @@ function dispHTMLHeader() { echo ' EPTV'; echo ' '; echo ' '; + echo ' '; + echo ' '; echo ' '; @@ -47,7 +49,6 @@ function dispHTMLHeader() { // display html body function dispHTMLBody() { echo ''; - echo ' '; // echo '
    '; echo '
    '; dispMenu(); diff --git a/include/rss.php b/include/rss.php new file mode 100644 index 0000000..22a5dbe --- /dev/null +++ b/include/rss.php @@ -0,0 +1,57 @@ +'; + echo ''; + $tab_rss[$_GET['rss']](); + echo ''; + } + +function dispRssChannelNews() { + $str = ''; + $str .= 'Actualités EPTV'; + $str .= 'http://www.eptv.fr/?html=News'; + $str .= 'L\'actualités d\'EPTV'; + $str .= 'fr'; + $str .= 'EPTV'; + $result = getLastNews(0); + if (mysql_num_rows($result)) + while ($news = mysql_fetch_array($result)) { + $str .= ''; + $str .= ''.htmlspecialchars(strip_tags($news["news_title"])).''; + $str .= ''.htmlspecialchars(strip_tags($news["news_comment"])).''; + $str .= ''.htmlspecialchars(date("r", strtotime($news["news_date"]))).''; + $str .= ''; + } + $str .= ''; + echo $str; +} + +function dispRssChannelVideos() { + $str = ''; + $str .= 'Vidéos EPTV'; + $str .= 'http://www.eptv.fr/?html=Videos'; + $str .= 'Le flux des vidéos d\'EPTV'; + $str .= 'fr'; + $str .= 'EPTV'; + $result = getLastVideosByTendu(0); + if (mysql_num_rows($result)) + while ($video = mysql_fetch_array($result)) { + $str .= ''; + $str .= ''.htmlspecialchars(strip_tags($video["video_name"])).''; + $str .= ''.htmlspecialchars(strip_tags($video["video_comment"])).''; + $str .= ''.htmlspecialchars(date("r", strtotime($video["video_date"]))).''; + $str .= ''; + } + $str .= ''; + echo $str; +} +?> diff --git a/include/script.js b/include/script.js index 6d72fd1..b546028 100644 --- a/include/script.js +++ b/include/script.js @@ -1,7 +1,5 @@ - diff --git a/include/functions_sql_admin.php b/include/sql.php similarity index 73% rename from include/functions_sql_admin.php rename to include/sql.php index fc5fcf8..a0f9934 100644 --- a/include/functions_sql_admin.php +++ b/include/sql.php @@ -1,102 +1,200 @@ -can't connect"); + mysql_select_db($db_name, $db) or die("can't find database"); + mysql_set_charset("utf8", $db); +} -include "include/db_connect.php"; +################################ +########## SQL NEWS ######## +################################ +function getOneNews($news_id) { + $news_id = mysql_real_escape_string($news_id); + $query = "select * from $DB.news_db WHERE news_id = '$news_id'"; + return mysql_query($query); +} -####################################################### -#################### PHOTOS ###################### -####################################################### +function getLastNews($tendu) { + $tendu = mysql_real_escape_string($tendu); + $query = "SELECT * FROM $DB.news_db INNER JOIN $DB.users_db ON news_db.news_user_id = users_db.user_id WHERE news_tendu<='$tendu' ORDER BY news_date desc, news_time desc"; + return mysql_query($query); +} +################################ +########## SQL EDITO ######## +################################ +function getOneEdito($edito_id) { + $edito_id = mysql_real_escape_string($edito_id); + $query = "select * from $DB.editos_db WHERE edito_id = '$edito_id'"; + return mysql_query($query); +} -function adminAddPhoto(){ +function getLastEdito() { + $query = "select * from $DB.editos_db ORDER BY edito_date DESC"; + return mysql_query($query); +} - $name = $_POST['photo_get_name']; - $path = $_POST['photo_get_path']; - $tar = $_POST['photo_img_path']; - $size = $_POST['photo_get_size']; - $date = $_POST['photo_get_date']; - $time = get_time(); - $type = $_POST['photo_type']; - $comment = $_POST['photo_comment']; - $tendu = $_POST['photo_tendu']; +function getAllEdito() { + $query = "select * from $DB.editos_db ORDER BY edito_date DESC"; + return mysql_query($query); +} - $id_user = $_SESSION["user_id"]; +################################ +########## SQL VIDEOS ######## +################################ - $query = " INSERT INTO `photos_db` "; - $query .= "( `photo_id`, `photo_name`, `photo_path`, `photo_size`, `photo_date`, - `photo_time`, `photo_type`, `photo_comment`, `photo_tendu`, `photo_img_path`, `photo_user_id`) "; +function getOneVideo($vid_id){ + $vid_id = mysql_real_escape_string($vid_id); + $query = "select * from $DB.videos_db WHERE video_id = '$vid_id'"; + return mysql_query($query); +} - $query .= "VALUES ( '', '$name', '$path' , '$size', '$date', - '$time', '$type', '$comment', '$tendu', NULL, '$id_user') "; - mysql_query($query) - or die("Add photo Query failed"); +function getAllVideos() { + $query = "select * from $DB.videos_db ORDER BY video_date desc, video_time desc"; + return mysql_query($query); +} +function getLastVideos() { + $query = "select * from $DB.videos_db ORDER BY video_id desc"; + return mysql_query($query); +} -$auto_news = $_POST['auto_www_news']; +function getVideosByType($type) { + $type = mysql_real_escape_string($type); + $query = "select * from $DB.videos_db WHERE video_type='$type' ORDER BY video_date desc"; + return mysql_query($query); +} -if ($auto_news) -{ - $title = 'Nouvel Album Photo: '.$name; +function getVideosByYearAndTypeAndTendu($year, $type, $tendu) { + $year = mysql_real_escape_string($year); + $type = mysql_real_escape_string($type); + $tendu = mysql_real_escape_string($tendu); + if ($year == 0) + $query = "select * from $DB.videos_db + WHERE video_type='$type' AND video_tendu<='$tendu' AND YEAR(video_date)<='2000' + ORDER BY video_date desc"; + else + $query = "select * from $DB.videos_db + WHERE video_type='$type' AND video_tendu<='$tendu' AND YEAR(video_date)='$year' + ORDER BY video_date desc"; + return mysql_query($query); +} - $query = " INSERT INTO `news_db` "; - $query .= "( `news_id`, `news_title`, `news_date`, `news_time`, `news_comment`, `news_user_id`, `news_tendu`)"; +function getLastVideosByTendu($tendu) { + $tendu = mysql_real_escape_string($tendu); + $query = "select * from $DB.videos_db WHERE video_tendu<='$tendu' ORDER BY video_id desc"; + return mysql_query($query); +} - $query .= "VALUES ( '', '$title', '$date', '$time', '$comment', '$id_user', '$tendu') "; - mysql_query($query) - or die("Query fucked"); +################################## +########## SQL CONTACTS ######## +################################## + +function getAssoInfos() { + $query = "select * from $DB.asso_db"; + return mysql_query($query); } +function getOneLinkById($id) { + $id = mysql_real_escape_string($id); + $query = "select * from $DB.links_db WHERE link_id='$id'"; + return mysql_query($query); +} -echo ' '; // automatique redirection +function getAllLinks() { + $query = "select * from $DB.links_db"; + return mysql_query($query); } +############################### +########## SQL USERS ######## +############################### -function adminModifPhoto(){ +function getOneUserByLogin($login) { + $login = mysql_real_escape_string($login); + $query = "select * from $DB.users_db WHERE user_login='$login'"; + return mysql_query($query); +} - $name = $_POST['photo_get_upname']; - $path = $_POST['photo_get_path']; - $tar = $_POST['photo_img_path']; - $size = $_POST['photo_get_size']; - $date = $_POST['photo_get_date']; - $type = $_POST['photo_get_type']; - $comment = $_POST['photo_get_comment']; - $tendu = $_POST['photo_get_tendu']; +function getOneUserByPseudo($pseudo) { + $pseudo = mysql_real_escape_string($pseudo); + $query = "select * from $DB.users_db WHERE user_pseudo='$pseudo'"; + return mysql_query($query); +} - $vid_id = $_GET['vid_id']; +function getOneUserById($id) { + $id = mysql_real_escape_string($id); + $query = "select * from $DB.users_db WHERE user_id='$id'"; + return mysql_query($query); +} - $query = " UPDATE `photos_db` "; - $query .= " SET `photo_name` = '$name', `photo_path` = '$path', `photo_date` = '$date', `photo_size` = '$size', - `photo_time` = 'get_time()', `photo_type` = '$type', `photo_comment` = '$comment', `photo_tendu` = '$tendu' "; - $query .= " WHERE `photo_id` = '$vid_id' LIMIT 1"; +function getAllUsers() { + $query = "select * from $DB.users_db WHERE user_right < 7 ORDER BY user_right desc"; + return mysql_query($query); +} - mysql_query($query) - or die("Query failed"); +function getUsersByStatut($statut) { + $statut = mysql_real_escape_string($statut); + $query = "SELECT * FROM $DB.users_db WHERE user_statut='$statut' ORDER BY user_right desc"; + return mysql_query($query); +} +################################ +########## SQL MEMBERS ######## +################################ -echo ' '; // automatique redirection +function getAllMembers() { + $query = "select * from $DB.users_db WHERE user_right >= 7"; + return mysql_query($query); +} +function getAnExistingStatut($statut) { + $statut = mysql_real_escape_string($statut); + $query = "select * from $DB.users_db WHERE user_statut = '$statut'"; + return mysql_query($query); } - function adminDeletePhoto(){ +#################################### +########## SQL Blacklist ######## +#################################### - $name = $_POST['photo_get_upname']; - $path = $_POST['file_serveur']; - $date = $_POST['photo_get_date']; - $up_date = get_time(); - $vid_id = $_GET['vid_id']; +function getOneBlacklistById($id) { + $id = mysql_real_escape_string($id); + $query = "select * from $DB.blacklist_db WHERE blacklist_id='$id'"; + return mysql_query($query); +} - $query = " DELETE FROM `photos_db` "; - $query .= " WHERE `photo_id` = '$vid_id' LIMIT 1"; +function getOneBlacklistByLogin($login) { + $login = mysql_real_escape_string($login); + $query = "select * from $DB.blacklist_db WHERE blacklist_login='$login'"; + return mysql_query($query); +} - mysql_query($query) - or die("Query failed"); +function getAllBlacklist() { + $query = "select * from $DB.blacklist_db"; + return mysql_query($query); +} -echo ' '; // automatique redirection +function getAllBlacksite() { + $query = "select * from $DB.blacksites_db"; + return mysql_query($query); } +function getOneBlacksiteById($id) { + $id = mysql_real_escape_string($id); + $query = "select * from $DB.blacksites_db WHERE blacksite_id='$id'"; + return mysql_query($query); +} +/* FIXME: Check strip under here */ ####################################################### @@ -622,7 +720,7 @@ function adminAddBlacklist(){ mysql_query($query) or die("Query failed"); -echo ' '; // automatique redirection + echo ' '; // automatique redirection } @@ -673,7 +771,7 @@ function adminAddBlacksite(){ mysql_query($query) or die("Query failed"); -echo ' '; // automatique redirection + echo ' '; // automatique redirection } @@ -690,7 +788,7 @@ function adminModifBlacksite(){ mysql_query($query) or die("Query failed"); -echo ' '; // automatique redirection + echo ' '; // automatique redirection } @@ -704,9 +802,7 @@ function adminDelBlacksite(){ mysql_query($query) or die("Query failed"); -echo ' '; // automatique redirection + echo ' '; // automatique redirection } - - ?> \ No newline at end of file diff --git a/index.php b/index.php index 1380e74..ca3fc7c 100644 --- a/index.php +++ b/index.php @@ -2,11 +2,12 @@ session_start(); // include all stuff -include_once "include/db_connect.php"; -include_once "include/functions_sql.php"; +include_once "include/global.php"; +include_once "include/sql.php"; +include_once "include/auth.php"; include_once "include/functions_www.php"; include_once "include/functions_display.php"; -include_once "include/global.php"; +include_once "include/rss.php"; include_once "include/html.php"; include_once "include/menu.php"; include_once "include/footer.php"; @@ -19,32 +20,13 @@ include_once "include/contacts.php"; include_once "include/dailymotion.php"; include_once "include/admin_home.php"; -// define user right and id if new session -if (!$_SESSION["user_id"] or !$_SESSION["user_right"]) { - $_SESSION["user_id"] = 0; - $_SESSION["user_right"] = 0; - } - -// if user is blacklisted redirect it -if ($_SESSION["user_right"] == -1) { - go_random_blacksite(); - return; - } - -// No logged user is allowed without https! -if ($_SERVER['HTTPS'] != "on" && $_SESSION["user_id"] > 0) - userDisconnect(); - -// Authentification process -if ($_GET['connect']) { - $connect_tv = $_GET['connect']; - if ($connect_tv == 1) - checkUser($_POST['user_login'], $_POST['user_pass']); - else if ($connect_tv == -1) - userDisconnect(); - } - -// Download video +// initinialize db connections +sql_init(); + +// initialize auth system +auth_init(); + +// Video download if ($_GET['video']) return getVideo(); @@ -52,6 +34,10 @@ if ($_GET['video']) if ($_GET['dailymotion']) return getDailymotion(); +// Get an rss stream +if ($_GET['rss']) + return getRss(); + // Display section getHtml(); ?> -- GitLab