Update -> refactor and optimize UI , code ,...

This commit is contained in:
2026-04-10 11:35:25 +03:30
parent 3327207f05
commit 0de951fd91
20 changed files with 1085 additions and 282 deletions

68
README.md Normal file
View File

@@ -0,0 +1,68 @@
# SafePaste
A minimal, encrypted pastebin built with PHP, MySQL, and Redis.
## Features
- **AES-256-CBC encryption** — all pastes are encrypted at rest using a master key
- **Optional password protection** — bcrypt-hashed passwords per paste
- **TTL expiry via Redis** — short-lived pastes live only in Redis; permanent pastes use MySQL
- **Clean dark UI** — responsive, accessible, no external dependencies
## Project Structure
```
safe-paste/
├── app/
│ ├── config/config.php # Loads .env settings
│ ├── core/
│ │ ├── db.php # PDO connection
│ │ ├── redis.php # Redis singleton
│ │ └── security.php # Encrypt/decrypt helpers
│ ├── controllers/
│ │ ├── SaveController.php # POST handler: create paste
│ │ └── ViewController.php # GET/POST handler: view paste
│ └── models/Paste.php # Save/get paste (Redis + MySQL)
└── public/
├── index.php # Home page + save action
├── view.php # View paste page
├── error.php # Error page
├── .htaccess # URL routing
└── assets/
├── css/style.css
└── js/app.js
```
## Setup
1. Copy `.env.example` to `.env` and fill in your values
2. Create the MySQL database and table:
```sql
CREATE DATABASE paste CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE paste;
CREATE TABLE pastes (
id CHAR(32) PRIMARY KEY,
encrypted_text TEXT NOT NULL,
iv VARCHAR(64) NOT NULL,
expire_time INT DEFAULT NULL,
password_hash VARCHAR(255) DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
3. Point your web server document root to `public/`
4. Ensure `mod_rewrite` is enabled (Apache) or configure your nginx equivalent
## .env
```ini
MASTER_KEY=your-random-secret-key
DB_HOST=localhost
DB_NAME=paste
DB_USER=root
DB_PASS=secret
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
APP_URL=https://yourdomain.com
```