From 98108a1c56b26069b880f2a5483a56978558d6c9 Mon Sep 17 00:00:00 2001 From: SofianeLasri <alasri250@gmail.com> Date: Fri, 13 Aug 2021 13:10:32 +0200 Subject: [PATCH] 13H10 - Nv comptes --- vbcms-admin/backTasks.php | 4 +- vbcms-admin/debug.php | 150 ++++++++++++++++++++++++ vbcms-admin/includes/settings/users.php | 90 +++++++------- vbcms-admin/index.php | 10 +- vbcms-content/translations/FR.php | 4 +- vbcms-core/functions.php | 2 +- vbcms-core/sessionHandler.php | 34 ++++-- 7 files changed, 227 insertions(+), 67 deletions(-) create mode 100644 vbcms-admin/debug.php diff --git a/vbcms-admin/backTasks.php b/vbcms-admin/backTasks.php index 047d598..4086b01 100644 --- a/vbcms-admin/backTasks.php +++ b/vbcms-admin/backTasks.php @@ -184,8 +184,8 @@ if (isset($_GET["getNotifications"])) { } elseif (isset($_GET["changeUserGroup"])&&!empty($_GET["changeUserGroup"]) && verifyUserPermission($_SESSION['user_id'], "vbcms", 'manageUsersSettings')){ $modificationDetail = json_decode($_GET["changeUserGroup"], true); - $query = $bdd->prepare("UPDATE `vbcms-users` SET `groupId` = ? WHERE `vbcms-users`.`netId` = ?"); - $query->execute([$modificationDetail['groupId'], $modificationDetail['netId']]); + $query = $bdd->prepare("UPDATE `vbcms-users` SET `groupId` = ? WHERE `vbcms-users`.`id` = ?"); + $query->execute([$modificationDetail['groupId'], $modificationDetail['id']]); } elseif (isset($_GET["getPermissions"]) && verifyUserPermission($_SESSION['user_id'], "vbcms", 'viewPermissions')){ if(!empty($_GET["getPermissions"])){ diff --git a/vbcms-admin/debug.php b/vbcms-admin/debug.php new file mode 100644 index 0000000..0a16d64 --- /dev/null +++ b/vbcms-admin/debug.php @@ -0,0 +1,150 @@ +<?php +$url = "$http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; +if(isset($_GET["orderBy"])) $orderBy = $_GET["orderBy"]; +else $orderBy = "id"; + +if(isset($_GET["order"])) $order = $_GET["order"]; +else $order = "ASC"; + +if($order=="ASC") $orderInverse = "DESC"; +else $orderInverse = "ASC"; + +if(isset($_GET["page"])) $page = $_GET["page"]; +else{ + $query = parse_url($url, PHP_URL_QUERY); + if ($query) { + $url .= '&page=1'; + } else { + $url .= '?page=1'; + } + header("Location: $url"); +} + +if(isset($_GET["limit"])){ + $limitInt = $_GET["limit"]; + $limit = "LIMIT ". $_GET["limit"]; + $offset = "OFFSET ".$_GET["limit"] * ($page-1); +}else{ + $limitInt = 25; + $limit = "LIMIT ". 25; + $offset = "OFFSET ". 25 * ($page-1); +} + +if (isset($_POST['viewAll'])) { + $offset = ""; + $limit = ""; + + $query = parse_url($url, PHP_URL_QUERY); + if ($query) { + $url .= '&viewAll'; + } else { + $url .= '?viewAll'; + } + header("Location: $url"); +} elseif(isset($_POST['showItemsNumber'])){ + $limit = "LIMIT ".$_POST['showItemsNumber']; + $offset = "OFFSET ".$_POST['showItemsNumber'] * ($page-1); + + $query = parse_url($url, PHP_URL_QUERY); + if ($query) { + $url .= '&limit='.$_POST['showItemsNumber']; + } else { + $url .= '?limit='.$_POST['showItemsNumber']; + } + header("Location: $url"); +} + +$events = $bdd->query("SELECT * FROM `vbcms-events` ORDER BY $orderBy $order $limit $offset")->fetchAll(PDO::FETCH_ASSOC); +?> +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title><?=VBcmsGetSetting("websiteName")?> | Debug Mode</title> + <?php include 'includes/depedencies.php';?> +</head> +<body> + <?php + include ('includes/navbar.php'); + ?> + + <!-- Contenu --> + <div class="page-content" leftSidebar="240" rightSidebar="0"> + <h3>Debug Mode</h3> + <p>Si un problème intervient, il sera peut-être répertorié ici. <strong>Les évènements de plus de 30 jours sont supprimés.</strong></p> + + <div class="mt-5"> + <h5>Évènements</h5> + <form class="form-inline mb-2" method="POST"> + <div class="form-check"> + <input class="form-check-input" type="checkbox" value="" name="viewAll"> + <label class="form-check-label">Tout voir</label> + </div> + <div class="form-group mx-sm-3"> + <label>Nombre d'éléments à afficher</label> + <select class="form-control form-control-sm" name="showItemsNumber"> + <option>25</option> + <option>50</option> + <option>100</option> + <option>250</option> + <option>500</option> + </select> + </div> + <button type="submit" class="btn btn-brown btn-sm">Appliquer</button> + </form> + <table class="table"> + <thead class="thead-brown"> + <tr> + <th scope="col"><a id="id" href="?orderBy=id&order=<?=$orderInverse?>" class="text-white">ID</a></th> + <th scope="col"><a id="date" href="?orderBy=date&order=<?=$orderInverse?>" class="text-white">Date</a></th> + <th scope="col"><a id="module" href="?orderBy=module&order=<?=$orderInverse?>" class="text-white">Module</a></th> + <th scope="col"><a id="content" href="?orderBy=content&order=<?=$orderInverse?>" class="text-white">Content</a></th> + <th scope="col"><a id="url" href="?orderBy=url&order=<?=$orderInverse?>" class="text-white">Url</a></th> + <th scope="col"><a id="ip" href="?orderBy=ip&order=<?=$orderInverse?>" class="text-white">IP</a></th> + </tr> + </thead> + <tbody> + <!-- + <tr> + <th scope="row">1</th> + <td>11/12/2001</td> + <td>vbcms-website</td> + <td>Load page /index.php</td> + <td>https://vbcms.net/</td> + <td>Un ip</td> + </tr> + --> + <?php + foreach ($events as $event) { + echo '<tr> + <th scope="row">'.$event['id'].'</th> + <td>'.$event['date'].'</td> + <td>'.$event['module'].'</td> + <td>'.$event['content'].'</td> + <td>'.$event['url'].'</td> + <td>'.$event['ip'].'</td> + </tr>'; + } + ?> + </tbody> + </table> + + <span> + <?php + $query = $_GET; + + + if($page != 1){ + $query['page'] = $page-1; + echo'<a href="?'.http_build_query($query).'" class="btn btn-outline-brown">Précédent</a>'; + } + $count = $bdd->query("SELECT COUNT(*) FROM `vbcms-events`")->fetchColumn(); + if (($count - $limitInt * ($page)) > 0){ + $query['page'] = $page+1; + echo '<a class="btn btn-outline-brown mx-2" href="?'.http_build_query($query).'">Suivant</a>'; + } + ?></span> + </div> + </div> +</body> +</html> \ No newline at end of file diff --git a/vbcms-admin/includes/settings/users.php b/vbcms-admin/includes/settings/users.php index 04d48a0..90e6d76 100644 --- a/vbcms-admin/includes/settings/users.php +++ b/vbcms-admin/includes/settings/users.php @@ -27,26 +27,20 @@ $users=$users->fetchAll(PDO::FETCH_ASSOC); foreach($users as $user){ - $userProfilPic = file_get_contents("https://api.vbcms.net/profiles/v1/get/".$user['netId']); - if(isJson($userProfilPic)){ - $userProfilPic = json_decode($userProfilPic, true); - $userProfilPic = $userProfilPic['profilePic']; - } else { - // Ici on a soit pas trouvé l'utilisateur, soit les serveurs sont down - // Du coup on va check dans localAccounts - $userProfilPic = $bdd->prepare("SELECT * FROM `vbcms-localAccounts` WHERE netIdAssoc = ?"); - $userProfilPic->execute([$user['netId']]); - $userProfilPic=$userProfilPic->fetch(PDO::FETCH_ASSOC); - if(!empty($userProfilPic)){ - $userProfilPic = $userProfilPic['profilePic']; - }else{ - // Ici l'utilisateur n'existe pas dans la liste des comptes locaux - // Donc on va lui mettre une image placeholder - $userProfilPic = VBcmsGetSetting("websiteUrl")."vbcms-admin/images/misc/programmer.png"; - } + $userProfilPic = $bdd->prepare("SELECT value FROM `vbcms-usersSettings` WHERE userId = ? AND name = 'profilPic'"); + $userProfilPic->execute([$user['id']]); + $userProfilPic=$userProfilPic->fetchColumn(); + if(empty($userProfilPic)){ + $userProfilPic = VBcmsGetSetting("websiteUrl")."vbcms-admin/images/misc/programmer.png"; } - - $joinedDate = new DateTime($user['localJoinedDate']); + + $joinedDate = $bdd->prepare("SELECT value FROM `vbcms-usersSettings` WHERE userId = ? AND name = 'joinedDate'"); + $joinedDate->execute([$user['id']]); + $joinedDate = $joinedDate->fetchColumn(); + if(!empty($joinedDate)) { + $joinedDate = new DateTime($joinedDate); + $joinedDate = $joinedDate->format('l jS F Y'); + } else $joinedDate = translate('unknownF'); $groupsOptions = null; foreach($userGroups as $userGroup){ @@ -54,40 +48,36 @@ else $groupsOptions = $groupsOptions."<option value='".$userGroup['groupId']."'>".translate($userGroup['groupName'])."</option>"; } - - if($user['username'] != $_SESSION['user_username']){ - echo ('<div class="userCard d-flex flex-column"> + echo ('<div class="userCard d-flex flex-column"> <div class="d-flex"> <div class="userProfilPic" style="background-image:url(\''.$userProfilPic.'\')"></div> <div class="ml-2"> <h6 class="mb-n1">'.$user['username'].'</h6> - <small class="text-muted">'.translate('joinedOn').': '. $joinedDate->format('l jS F Y').'</small><br> - <small><a href="#" onclick="toogle(\'edit-'.$user['username'].'\')" class="text-brown">'.translate("modifyUser").'</a> <a href="#" onclick="editLocalAccount(\''.$user['netId'].'\')" class="text-brown">'.translate("modifyLocalAccount").'</a></small> - </div> + <small class="text-muted"><strong>Auth:</strong>'.$user['auth'].' <strong>'.translate('joinedOn').'</strong>: '. $joinedDate.'</small><br> + <small>'); + if($user['id']!=$_SESSION['user_id']){ + echo ('<a href="#" onclick="toogle(\'edit-'.$user['username'].'\')" class="text-brown">'.translate("modifyUser").'</a>'); + } + if($user['auth']=='vbcms.net'){ + echo('<a href="#" onclick="editLocalAccount(\''.$user['authId'].'\')" class="text-brown">'.translate("modifyLocalAccount").'</a>'); + } + echo('</small></div> </div>'); echo ('<div id="edit-'.$user['username'].'" style="display: none;"><div class="d-flex flex-column mt-2""> - <div class="form-inline"> - <label>Changer de groupe</label> - <select class="form-control form-control-sm flex-grow-1 ml-2" id="groupUser'.$user['netId'].'" onchange="changeUserGroup('.$user['netId'].')"> - '.$groupsOptions.' - </select> - </div> - <div class="d-flex mt-2"> - <button class="btn btn-sm btn-brown">Modifier ses permissions</button> - <button class="btn btn-sm btn-danger ml-2">Expulser</button> - </div> - </div></div>'); - }else{ - echo ('<div class="userCard d-flex flex-column"> - <div class="d-flex"> - <div class="userProfilPic" style="background-image:url(\''.$userProfilPic.'\')"></div> - <div class="ml-2"> - <h6 class="mb-n1">'.$user['username'].'</h6> - <small class="text-muted">'.translate('joinedOn').': '. $joinedDate->format('l jS F Y').'</small><br> - <small class="text-brown"><a href="#" onclick="editLocalAccount(\''.$user['netId'].'\')" class="text-brown">'.translate("modifyLocalAccount").'</a></small> - </div> - </div>'); - } + <div class="form-inline"> + <label>Changer de groupe</label> + <select class="form-control form-control-sm flex-grow-1 ml-2" id="groupUser'.$user['id'].'" onchange="changeUserGroup('.$user['id'].')"> + '.$groupsOptions.' + </select> + </div> + <div class="d-flex mt-2"> + <button class="btn btn-sm btn-brown">Modifier ses permissions</button>'); + if($user['id']!=$_SESSION['user_id']){ + echo('<button class="btn btn-sm btn-danger ml-2">Expulser</button>'); + } + echo('</div> + </div>'); + echo('</div>'); echo ('</div>'); } echo "</div></div>"; @@ -259,10 +249,10 @@ function sendLocalAccountInfos(netId){ }); } -function changeUserGroup(netId){ +function changeUserGroup(id){ var array = { - netId: netId, - groupId: $("#groupUser"+netId).val() + id: id, + groupId: $("#groupUser"+id).val() }; $.get("<?=VBcmsGetSetting("websiteUrl")?>vbcms-admin/backTasks/?changeUserGroup="+JSON.stringify(array), function(data) { if(data!=""){ diff --git a/vbcms-admin/index.php b/vbcms-admin/index.php index 9f932d4..3cf2203 100644 --- a/vbcms-admin/index.php +++ b/vbcms-admin/index.php @@ -7,18 +7,18 @@ if ($isUpToDate == 1) { } else { $updateMessage = translate("isNotUpToDate"); } -if($_SESSION['loginType']=='vbcms-account'){ +if($_SESSION['auth']=='vbcms.net'){ $userHasLocalAccount = $bdd->prepare("SELECT * FROM `vbcms-localAccounts` WHERE netIdAssoc = ?"); - $userHasLocalAccount->execute([$_SESSION['user_id']]); + $userHasLocalAccount->execute([$_SESSION['netId']]); $userHasLocalAccount = $userHasLocalAccount->fetch(PDO::FETCH_ASSOC); if(empty($userHasLocalAccount)){ if(isset($_POST['localUserUsername']) && !empty($_POST['localUserUsername'])){ - $query = $bdd->prepare('INSERT INTO `vbcms-localAccounts` (`id`, `netIdAssoc`, `username`, `password`, `profilePic`) VALUES (NULL, ?,?,?,?)'); - $query->execute([$_SESSION['user_id'], $_POST['localUserUsername'], password_hash($_POST['localUserPassword1'], PASSWORD_DEFAULT), $_SESSION['user_profilePic']]); + $query = $bdd->prepare('INSERT INTO `vbcms-localAccounts` (`id`, `netIdAssoc`, `username`, `password`) VALUES (NULL, ?,?,?)'); + $query->execute([$_SESSION['netId'], $_POST['localUserUsername'], password_hash($_POST['localUserPassword1'], PASSWORD_DEFAULT)]); $userHasLocalAccount = $bdd->prepare("SELECT * FROM `vbcms-localAccounts` WHERE netIdAssoc = ?"); - $userHasLocalAccount->execute([$_SESSION['user_id']]); + $userHasLocalAccount->execute([$_SESSION['netId']]); $userHasLocalAccount = $userHasLocalAccount->fetch(PDO::FETCH_ASSOC); if(empty($userHasLocalAccount)){ $localAccountCreationSuccess=false; diff --git a/vbcms-content/translations/FR.php b/vbcms-content/translations/FR.php index 7b2076b..eefc117 100644 --- a/vbcms-content/translations/FR.php +++ b/vbcms-content/translations/FR.php @@ -110,8 +110,8 @@ $translation["noPostData"] = "Pas de donnée POST :("; $translation["modifyLocalAccount"] = "Modifier le compte local"; $translation["createGroup"] = "Créer un groupe"; $translation["deleteGroup"] = "Supprimer le groupe"; -$translation["sample"] = "sample"; -$translation["sample"] = "sample"; +$translation["unknown"] = "Inconnu"; +$translation["unknownF"] = "Inconnue"; $translation["sample"] = "sample"; $translation["sample"] = "sample"; $translation["sample"] = "sample"; diff --git a/vbcms-core/functions.php b/vbcms-core/functions.php index 4f1d91e..5087700 100644 --- a/vbcms-core/functions.php +++ b/vbcms-core/functions.php @@ -181,7 +181,7 @@ function adminNavbarAddItem($moduleName, $icon, $name, $link){ function verifyUserPermission($userId, $extensionName, $permission){ global $bdd; // On va récupérer les infos de l'utilisateur - $userInfos = $bdd->prepare("SELECT * FROM `vbcms-users` WHERE netId=?"); + $userInfos = $bdd->prepare("SELECT * FROM `vbcms-users` WHERE id=?"); $userInfos->execute([$userId]); $userInfos = $userInfos->fetch(PDO::FETCH_ASSOC); diff --git a/vbcms-core/sessionHandler.php b/vbcms-core/sessionHandler.php index 504ce34..dca843f 100644 --- a/vbcms-core/sessionHandler.php +++ b/vbcms-core/sessionHandler.php @@ -11,12 +11,17 @@ if (isset($_GET["session"]) && !empty($_GET["session"])){ $sessionData = json_decode($sessionJson, true); if (isset($sessionData) && !isset($sessionData['error'])) { + // VBcms.net renvoie user_id, mais nous ici on va le renommer en netId car c'est propre à l'authentification du drm + $sessionData['auth'] = 'vbcms.net'; + $sessionData["netId"] = $sessionData["user_id"]; + unset($sessionData["user_id"]); + // On va rechercher dans la liste des utilisateurs si cet user est présent ou non - $userExistInDB = $bdd->prepare("SELECT * FROM `vbcms-users` WHERE netId=?"); - $userExistInDB->execute([$sessionData["user_id"]]); + $userExistInDB = $bdd->prepare("SELECT * FROM `vbcms-users` WHERE authId=? AND auth='vbcms.net'"); + $userExistInDB->execute([$sessionData["netId"]]); $userExistInDB = $userExistInDB->fetch(PDO::FETCH_ASSOC); if(empty($userExistInDB)){ - // On va l'insérer + // A CHANGER if($sessionData["user_role"]=="owner") $userGroupID = $bdd->query("SELECT groupId FROM `vbcms-userGroups` WHERE groupName = 'superadmins'")->fetchColumn(); elseif($sessionData["user_role"]=="admin") @@ -24,15 +29,30 @@ if (isset($_GET["session"]) && !empty($_GET["session"])){ else $userGroupID = $bdd->query("SELECT groupId FROM `vbcms-userGroups` WHERE groupName = 'users'")->fetchColumn(); - $userExistInDB = $bdd->prepare("INSERT INTO `vbcms-users` (`netId`, `username`, `localLanguage`, `localJoinedDate`, `groupId`) VALUES (?,?,?,?,?)"); - $userExistInDB->execute([$sessionData["user_id"], $sessionData["user_username"], $sessionData["language"], date("Y-m-d H:i:s"), $userGroupID]); + /////// + + + $userExistInDB = $bdd->prepare("INSERT INTO `vbcms-users` (`id`,`auth`,`authId`, `username`, `groupId`) VALUES (NULL,'vbcms.net',?,?,?)"); + $userExistInDB->execute([$sessionData["netId"], $sessionData["user_username"], $userGroupID]); // Maintenant on va revérifier - $userExistInDB = $bdd->prepare("SELECT * FROM `vbcms-users` WHERE netId=?"); - $userExistInDB->execute([$sessionData["user_id"]]); + $userExistInDB = $bdd->prepare("SELECT * FROM `vbcms-users` WHERE authId=? AND auth='vbcms.net'"); + $userExistInDB->execute([$sessionData["netId"]]); $userExistInDB = $userExistInDB->fetch(PDO::FETCH_ASSOC); + + $insertSettings = $bdd->prepare("INSERT INTO `vbcms-usersSettings` (`userId`, `name`, `value`) VALUES (?,?,?)"); + $insertSettings->execute([$userExistInDB['id'], 'profilPic', $sessionData["user_profilePic"]]); + $insertSettings = $bdd->prepare("INSERT INTO `vbcms-usersSettings` (`userId`, `name`, `value`) VALUES (?,?,?)"); + $insertSettings->execute([$userExistInDB['id'], 'joinedDate', date("Y-m-d H:i:s")]); } + // On va pouvoir associer l'id local + $sessionData['user_id'] = $userExistInDB['id']; + + // On va mettre à jour son image de profil + $insertSettings = $bdd->prepare("UPDATE `vbcms-usersSettings` SET `value` = ? WHERE `vbcms-usersSettings`.`userId` = ? AND `vbcms-usersSettings`.`name` = 'profilPic'"); + $insertSettings->execute([$sessionData["user_profilePic"], $sessionData['user_id']]); + // On va chercher le groupe auquel il appartient $userGroup = $bdd->prepare("SELECT * FROM `vbcms-userGroups` WHERE groupId=?"); $userGroup->execute([$userExistInDB["groupId"]]); -- GitLab