Skip to content
Snippets Groups Projects
Commit 369dcdc9 authored by Sofiane Lasri's avatar Sofiane Lasri
Browse files

10H41 - Annulation du dev du driver sql + Func NS

parent 0964922e
Branches
Tags
No related merge requests found
......@@ -2,7 +2,7 @@
require_once dirname(__FILE__) . '/vbcms-core/vendors/PHPSQLParser/vendor/autoload.php';
$test["database"]["permissions"] = ["SELECT", "INSERT", "UPDATE"];
$test["database"]["tables"] = ["vbcmsWebSys_blogCategories", "vbcmsWebSys_blogCategories"];
$test["database"]["tables"] = ["vbcmsWebSys_blogCategories", "vbcmsWebSys_blogCategories", "vbcmsWebSys_blogPosts"];
// [path, droitLecture, droitEcriture]
......@@ -29,11 +29,42 @@ $string = ('CREATE TABLE IF NOT EXISTS `vbcms-blogPosts` (
`views` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPACT;');
echo "String:<br>".$string."<br><br>";
$explodedString = explode(";", $string);
echo "PrintR explodedString:<br>";
print_r($explodedString);
echo "<br><br><br><br>";
$parser = new PhpMyAdmin\SqlParser\Parser($string, true);
echo PhpMyAdmin\SqlParser\Utils\Formatter::format($string, ['type' => 'html'])."<br><br>";
$parser = new PhpMyAdmin\SqlParser\Parser($string);
var_dump($parser->statements[0]);
echo "<br><br>";
//echo json_encode($parser);
echo "<br><br>";
echo $parser->statements[0]->name->table;
echo "<br><br>";
$string = ("INSERT INTO `moduledeouf` (`id`, `exemple`) VALUES (NULL, 'test')");
echo PhpMyAdmin\SqlParser\Utils\Formatter::format($string, ['type' => 'html'])."<br><br>";
$parser = new PhpMyAdmin\SqlParser\Parser($string);
var_dump($parser->statements[0]);
echo "<br><br>";
//echo json_encode($parser);
echo "<br><br>";
echo $parser->statements[0]->into->dest->table;
echo "<br><br>";
$query = "SELECT * FROM table WHERE id = ? AND type = ?";
$lastPos = 0;
$positions = array();
while (($lastPos = strpos($query, "?", $lastPos))!== false) {
$positions[] = $lastPos;
$lastPos = $lastPos + strlen("?");
}
foreach ($positions as $value) {
echo $value ."<br />";
}
\ No newline at end of file
{
"workshopId" : "",
"requiredModules" : "",
"requiredModules" : [],
"name": "vbcms-websiteSystem",
"showname": "Système de site intnet de base",
"showname": "Système de site internet de base",
"version": "1.0",
"compatible": "2.1",
"author": "1",
......
vbcms-content/extensions/vbcms-websiteSystem/module-logo.jpg

1.81 KiB

<?php
if($type =="admin"){
if($parameters[1]=="test"){
echo "salut";
echo "Inscription de code dans vbcmsWebSys_blogPosts<br>";
}
}
\ No newline at end of file
......@@ -13,7 +13,7 @@ if ((abs($datetime->getTimestamp()-$lastUpdateCheck->getTimestamp())) > 1800){
$json = file_get_contents("https://api.vbcms.net/updater/lastest?serverId=".$serverId."&key=".$key."&version=".$vbcmsVer."&canal=".$curentUpdateCanal);
$jsonData = json_decode($json, true);
if (!$jsonData["upToDate"]) {
if (!empty($jsonData) && !$jsonData["upToDate"]) {
$response = $bdd->query("UPDATE `vbcms-settings` SET `value` = 0 WHERE `vbcms-settings`.`name` = 'upToDate'");
$response = $bdd->query("SELECT COUNT(*) FROM `vbcms-notifications` WHERE origin = '[\"vbcms-updater\", \"notifyUpdate\"]'")->fetchColumn();
......
......@@ -16,23 +16,15 @@ if (!isset($_SESSION["user_id"])) { // Si l'utilisateur n'est pas connecté
header("Location: https://vbcms.net/manager/?error=".urlencode("Tu n'as pas le droit de te connecter à ce site <img height=\"16\" src=\"https://vbcms.net/vbcms-content/uploads/emoji/oiseau-pas-content.png\">"));
}
//
// A CHANGER CAR NON COMPATIBLE AVEC LE NOUVEAU SYSTEM DE SECURITE
//
// On inclu les scripts de fond des modules activés
/*
$response = $bdd->query("SELECT * FROM `vbcms-activatedExtensions` WHERE type='module'");
$response = $response->fetchAll(PDO::FETCH_ASSOC);
if (!empty($response)) {
foreach ($response as $module) {
if(file_exists($GLOBALS['vbcmsRootPath'].'/vbcms-content/modules'.$module["path"]."/back.php"))
include $GLOBALS['vbcmsRootPath'].'/vbcms-content/modules'.$module["path"]."/back.php";
if(file_exists($GLOBALS['vbcmsRootPath'].'/vbcms-content/extensions/'.$module["path"]."/back.php"))
include $GLOBALS['vbcmsRootPath'].'/vbcms-content/extensions/'.$module["path"]."/back.php";
}
}
*/
//
//
//
// On inclue les associations de page admin
require_once 'adminPagesAssoc.php';
......
<?php
class moduleDatabaseConnect {
// UPDATE 01/07/2021 : N'est plus utile après reflexion
// Le but de cette classe est de créer un driver sql sécurisé, ne permettant pas de causer des dégats à la base de donnée du cms
// Le module devra s'identifier en initialisant sa connexion, et le driver se chargera de vérifier qu'il a bien l'autorisation d'utiliser la bdd
......@@ -16,6 +18,11 @@ class moduleDatabaseConnect {
private $selectedTables = array();
private $condition;
// Variables pour la préparation
private $prepareType;
private $preparePositions = array();
private $isPreparedQuery;
// Variables pour l'éxecution de la requête
private $queryResult;
......@@ -28,8 +35,10 @@ class moduleDatabaseConnect {
$response = $bdd->prepare("SELECT * FROM `vbcms-extensionsPermissions` WHERE extensionName = ?");
$response->execute([$moduleName]);
$moduleStoredPermissions = $response->fetch(PDO::FETCH_ASSOC);
$moduleStoredPermissions["databasePerms"] = json_decode($moduleStoredPermissions["databasePerms"], true);
if(!empty($moduleStoredPermissions["databasePerms"])){
// On va renseigner les permissions de l'extension, ainsi que ses tables
foreach ($moduleStoredPermissions["databasePerms"]["permissions"] as $moduleStoredPermission){
array_push($this->permissions, $moduleStoredPermission);
......@@ -49,6 +58,7 @@ class moduleDatabaseConnect {
function select($selectedColumns){
// On vide $query
$this->query = null; $queryResult=null;
$this->isPreparedQuery = false;
if(!is_array($selectedColumns)) {
$temp = $selectedColumns;
......@@ -69,6 +79,7 @@ class moduleDatabaseConnect {
function update($selectedColumn){
$this->query = null; $queryResult=null;
$this->isPreparedQuery = false;
unset($selectedColumns);
$selectedColumns[0] = $selectedColumn;
......@@ -77,6 +88,7 @@ class moduleDatabaseConnect {
function delete(){
$this->query = "DELETE";
$this->isPreparedQuery = false;
}
function from($selectedTables){
......@@ -243,11 +255,40 @@ class moduleDatabaseConnect {
$this->query = null;
}
// Pour les requêtes avec du vrai code sql (car c'est quand même bcp mieux)
function prepare($sql){
unset($this->preparePositions);
$this->isPreparedQuery = true;
if(strpos($sql, "?") !== false){
$this->prepareType = "markers";
// Ici on prépapre avec des ?
$lastPos = 0;
while (($lastPos = strpos($query, "?", $lastPos))!== false) {
$this->preparePositions[] = $lastPos;
$lastPos = $lastPos + strlen("?");
$this->query = $sql;
}
} elseif(strpos($sql, ":") !== false){
// Ici on prépare avec les index
$this->prepareType = "namedParameters";
$this->query = $sql;
}
}
// Partie éxecution et résolution de résultat
function execute(){
if(!$this->isPreparedQuery){
$this->queryResult = $this->bdd->query($this->query);
//echo $this->query;
} else {
if($this->prepareType = "makers"){
}
}
}
function fetch($pdoFetchMethod){
......
......@@ -8,7 +8,7 @@ function loadModule($type, $moduleAlias, $moduleParams){
if ($type=="client") {
// On cherche le module correspondant à l'alias clientAccess dans la liste des modules activés
$response = $bdd->prepare("SELECT * FROM `vbcms-activatedExtensions` WHERE clientAccess=? AND type='module'"); // Je récupère l'id du dossier parent
$response = $bdd->prepare("SELECT * FROM `vbcms-activatedExtensions` WHERE clientAccess=? AND type='module'");
$response->execute([$moduleAlias]);
$response = $response->fetch(PDO::FETCH_ASSOC);
......@@ -21,8 +21,19 @@ function loadModule($type, $moduleAlias, $moduleParams){
// Si aucun module ne s'en charge, on va afficher la page par défaut
include $GLOBALS['vbcmsRootPath'].'/vbcms-core/defaultPages/index.php';
} else {
// Il s'agit peut-être d'une page du module gérant l'index du site Internet
// Nous allons donc vérifier si un module gère l'index, puis on va l'éxecuter
$response = $bdd->query("SELECT * FROM `vbcms-activatedExtensions` WHERE clientAccess='' AND type='module'")->fetch(PDO::FETCH_ASSOC);
if (!empty($response)) {
// On a trouvé un module qui gère l'index, au cas où cet alias n'existe pas, ce sera ce module qui gérera la page 404
include $GLOBALS['vbcmsRootPath'].'/vbcms-content/modules'.$response["path"]."/moduleLoadPage.php"; // Le module appelé va se charger du reste
} else {
// Si on arrive ici c'est qu'il n'y a vraiment aucun module qui gère cet alias
show404($type);
}
}
}
} elseif($type=="admin") {
......
<?php
namespace VBcms{
use \PDO;
// Ce namespace est réservé aux modules
// On ne pourra pas empêcher l'utilisation de fonction natives, mais on peu essayer de sécuriser le plus possible
//include 'ns-VBcms/functions.php';
//include 'ns-VBcms/classes.php';
function print_r($object){
echo "NS-VBcms ".\print_r($object, true);
}
class module {
// Cette classe se chargera de charger les modules
private $name, $path, $adminAccess, $clientAccess, $vbcmsVerId;
private $bdd, $mbdd;
private $permissions = array();
public function __construct($name, $path, $adminAccess, $clientAccess, $vbcmsVerId){
......@@ -24,22 +20,29 @@ namespace VBcms{
$this->vbcmsVerId = $vbcmsVerId;
// On va initialiser le driver sql
$mbdd = new \moduleDatabaseConnect($name);
global $bdd;
$this->bdd = $bdd;
//$this->mbdd = new \moduleDatabaseConnect($name);
// UPDATE 01/07/2021 : N'est plus utile après reflexion
// Maintenant on va vérifier que l'extension dispose bien des permissions demandées
global $bdd;
/*
$response = $bdd->prepare("SELECT * FROM `vbcms-extensionsPermissions` WHERE extensionName = ?");
$response->execute([$name]);
$permissions = $response->fetch(\PDO::FETCH_ASSOC);
$this->permissions = json_decode($permissions['otherPerms'],true);
if(empty($this->permissions)){
// Ici, l'extension n'a aucune permission d'accordée
throw new \Exception('ERREUR: Vous ne disposez d\'aucune autorisation.');
throw new Exception('ERREUR: Vous ne disposez d\'aucune autorisation.');
}
*/
}
function call(array $parameters, $type){
include $GLOBALS['vbcmsRootPath'].'/vbcms-content/modules/'.$this->path."/moduleLoadPage.php"; // Le module appelé va se charger du reste
//$mbdd=$this->mbdd;
$bdd=$this->bdd;
include $GLOBALS['vbcmsRootPath'].'/vbcms-content/extensions/'.$this->path."/moduleLoadPage.php"; // Le module appelé va se charger du reste
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment