scar-chat7/README.md

243 lines
6.2 KiB
Markdown
Raw Normal View History

2025-12-07 12:00:44 -07:00
# SCAR Chat
## Written by Claude Sonnet, with assistancer from Ganome.
2025-12-07 12:00:44 -07:00
A cross-platform C++20 chat application with text messaging, live video streaming, and screen sharing capabilities.
## Features
- 🔐 **Secure Authentication** - User/password with Argon2 hashing and JWT session management
- 💬 **Real-time Text Chat** - Instant messaging with online user list
- 🎥 **Live Video Streaming** - Camera feed sharing via Pipewire (Linux)
- 🖥️ **Screen Sharing** - Multi-platform screen capture (X11/Wayland/Hyprland/Windows)
- 🎨 **Modern UI** - Dark Discord-inspired Qt6 interface with grid video layout
- 🔒 **SSL/TLS** - End-to-end encrypted connections via Boost.ASIO
- 📱 **Cross-Platform** - Desktop (Linux/Windows) and Android support
## Architecture
- **Language:** C++20
- **GUI Framework:** Qt6
- **Networking:** Boost.ASIO with SSL
- **Database:** SQLite3
- **Hashing:** Argon2
- **Auth:** JWT tokens
- **Media:** FFmpeg, Pipewire, DBus portals
- **Build:** CMake 3.20+
## Project Structure
```
scar-chat7/
├── client/ # Qt6 GUI client (scarchat)
├── server/ # Boost.ASIO server (scarchat-server)
├── shared/ # Common protocol and utilities
├── dbmanager/ # Database management CLI tool
├── third_party/ # External dependencies (Argon2, JWT-CPP)
├── tests/ # Unit and integration tests
├── installer/ # WiX installer scripts
└── CMakeLists.txt # Root build configuration
```
## Prerequisites
### Linux
```bash
# Ubuntu/Debian
sudo apt install build-essential cmake qt6-base-dev libboost-all-dev \
libssl-dev libsqlite3-dev libpipewire-0.3-dev \
libavcodec-dev libavformat-dev libavutil-dev
# Fedora
sudo dnf install gcc-c++ cmake qt6-qtbase-devel boost-devel \
openssl-devel sqlite-devel pipewire-devel \
ffmpeg-devel
```
### Windows
- Visual Studio 2022 (with C++20 support)
- CMake 3.20+
- Qt6 (install via official installer)
- Boost (via vcpkg or pre-built binaries)
- OpenSSL (via vcpkg)
- SQLite3 (via vcpkg)
- FFmpeg development libraries
### Android
- Android NDK r25+
- Qt for Android
- Android SDK with minimum API level 24
## Building
### Linux/Windows Desktop
```bash
# Configure
cmake -B build -DCMAKE_BUILD_TYPE=Release
# Build
cmake --build build --config Release
# Optional: Build only server or client
cmake -B build -DBUILD_CLIENT=OFF # Server only
cmake -B build -DBUILD_SERVER=OFF # Client only
```
Binaries will be in:
- `build/server/scarchat-server` - Server executable
- `build/client/scarchat` - Client executable
- `build/dbmanager/dbmanager` - Database management tool
### Android
```bash
# Requires Qt for Android and Android NDK
cmake -B build-android \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a \
-DANDROID_PLATFORM=android-24 \
-DQt6_DIR=/path/to/Qt/6.x.x/android_arm64_v8a/lib/cmake/Qt6
cmake --build build-android
```
## Usage
### Server
```bash
# Start with default settings (looks for scarchat.db, server.pem, server.key in current directory)
./scarchat-server
# Specify custom paths
./scarchat-server --db /path/to/custom.db \
--cert /path/to/cert.pem \
--key /path/to/key.pem
```
**Server Configuration:**
- Database: `scarchat.db` (auto-created on first run)
- SSL Certificate: `server.pem` or via `--cert`
- SSL Key: `server.key` or via `--key`
- Config: `server.json` with hardcoded defaults as fallback
### Client
```bash
./scarchat
```
**Client Configuration:**
- Settings stored in `$XDG_CONFIG_HOME/scarchat/client.json` (Linux) or `%APPDATA%/scarchat/client.json` (Windows)
- Remembers last username, server IP/hostname, port, and JWT token
### Database Management
Use the `dbmanager` tool for user administration:
```bash
# Create a user
./dbmanager adduser alice password123
# Create admin with avatar
./dbmanager adduser admin adminpass /path/to/avatar.jpg
./dbmanager modifyrole admin admin
# List all users
./dbmanager list
# Search users
./dbmanager search role admin
# Fetch user details
./dbmanager fetch alice
# Modify user
./dbmanager modifypass alice newpassword
./dbmanager modifyemail alice alice@example.com
```
See `dbmanager/README.md` for complete documentation.
## Database Schema
The `scarchat.db` SQLite database contains:
```sql
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL, -- Argon2 hash
salt TEXT NOT NULL,
token TEXT, -- JWT session token
status TEXT DEFAULT 'offline',
role TEXT, -- Optional
email TEXT, -- Optional
last_login INTEGER, -- Unix timestamp
avatar_pic BLOB -- Optional
);
```
## Security Model
1. **Client → Server Login:**
- Client sends username + plaintext password over SSL
- Server fetches user's SALT from database
- Server computes Argon2 hash and verifies
- Server generates JWT token on success
2. **Session Management:**
- JWT stored in database TOKEN field and client config
- All subsequent requests authenticated via JWT
3. **Transport Security:**
- All connections enforce SSL/TLS
- No plaintext transmission outside SSL layer
## Windows Installer
Build the MSI installer using WiX Toolset:
```bash
# After building the Release binaries
cd installer
candle -ext WixUIExtension installer.wxs
light -ext WixUIExtension -out "Scar Chat.msi" installer.wixobj
```
## Development Progress
See [PROGRESS.md](PROGRESS.md) for detailed feature implementation status and dependencies.
## License
[Specify your license here]
## Contributing
[Contribution guidelines if applicable]
## Troubleshooting
### Linux: Missing Pipewire/Portal
Ensure `pipewire` and `xdg-desktop-portal-hyprland` (or appropriate portal) are installed and running:
```bash
systemctl --user status pipewire
```
### Windows: FFmpeg not found
Add FFmpeg library paths to CMake:
```bash
cmake -DFFMPEG_ROOT=/path/to/ffmpeg ..
```
### SSL Certificate Errors
Generate self-signed certificates for testing:
```bash
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.pem -days 365 -nodes
```
---
**Project Status:** In Development - See PROGRESS.md for current milestone