sql :
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
CREATE DATABASE IF NOT EXISTS `file_sharing` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
USE `file_sharing`;
DROP TABLE IF EXISTS `files`;
CREATE TABLE IF NOT EXISTS `files` (
`id` int NOT NULL AUTO_INCREMENT,
`path` varchar(512) NOT NULL,
`expiration_date` datetime DEFAULT NULL,
`expiration_nb_download` int DEFAULT NULL,
`uuid` char(36) NOT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`size` bigint DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `uuid` (`uuid`),
UNIQUE KEY `path` (`path`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `groups`;
CREATE TABLE IF NOT EXISTS `groups` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`description` text,
`is_public` tinyint(1) NOT NULL DEFAULT '0',
`created_by` int NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_groups_created_by` (`created_by`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `group_files_perm`;
CREATE TABLE IF NOT EXISTS `group_files_perm` (
`id` int NOT NULL AUTO_INCREMENT,
`group_id` int NOT NULL,
`path_file` varchar(512) NOT NULL,
`perms` varchar(9) NOT NULL,
PRIMARY KEY (`id`),
KEY `group_id` (`group_id`),
KEY `group_files_perm_ibfk_2` (`path_file`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `users`;
CREATE TABLE IF NOT EXISTS `users` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`is_admin` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `users_files_perm`;
CREATE TABLE IF NOT EXISTS `users_files_perm` (
`id` int NOT NULL AUTO_INCREMENT,
`id_user` int NOT NULL,
`path_file` varchar(512) NOT NULL,
`perms` varchar(9) NOT NULL,
PRIMARY KEY (`id`),
KEY `id_user` (`id_user`),
KEY `users_files_perm_ibfk_2` (`path_file`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `user_groups`;
CREATE TABLE IF NOT EXISTS `user_groups` (
`id` int NOT NULL AUTO_INCREMENT,
`user_id` int NOT NULL,
`group_id` int NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`,`group_id`),
KEY `group_id` (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
ALTER TABLE `groups`
ADD CONSTRAINT `fk_groups_created_by` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`) ON DELETE CASCADE;
ALTER TABLE `group_files_perm`
ADD CONSTRAINT `group_files_perm_ibfk_1` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `group_files_perm_ibfk_2` FOREIGN KEY (`path_file`) REFERENCES `files` (`path`) ON DELETE CASCADE;
ALTER TABLE `users_files_perm`
ADD CONSTRAINT `users_files_perm_ibfk_1` FOREIGN KEY (`id_user`) REFERENCES `users` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `users_files_perm_ibfk_2` FOREIGN KEY (`path_file`) REFERENCES `files` (`path`) ON DELETE CASCADE;
ALTER TABLE `user_groups`
ADD CONSTRAINT `user_groups_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `user_groups_ibfk_2` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;.htaccess :
RewriteEngine On
RewriteBase /
# Protection des fichiers et dossiers sensibles
RedirectMatch 403 ^/(config|core|models|controllers|views)/
<FilesMatch "^(\.htaccess|config\.php|database\.php)$">
Require all denied
</FilesMatch>
# Réécriture des URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
# Sécurité des en-têtes HTTP
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Frame-Options "SAMEORIGIN"
</IfModule>
# Désactiver l'indexation des répertoires
Options -Indexes
# Compression des fichiers texte
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript application/json
</IfModule>
# Mise en cache des fichiers statiques
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 2 days"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>