230 lines
5.1 KiB
Markdown
230 lines
5.1 KiB
Markdown
# SCAR Chat Application
|
|
|
|
A cross-platform GUI chat client and server with SSL/TLS encryption, built in C++.
|
|
|
|
## Features
|
|
|
|
### Server (`chat_server`)
|
|
- Listens on TCP port **42317** with TLS/SSL encryption
|
|
- Multi-client support with broadcast messaging
|
|
- Uses OpenSSL for secure communication
|
|
- Linux/cross-platform compatible
|
|
|
|
### Qt Client (`chat_client_qt`)
|
|
- Cross-platform GUI using Qt5/6 Widgets
|
|
- TLS/SSL encrypted connection to server
|
|
- **Customizable UI:**
|
|
- Background color selector for all windows
|
|
- Chat text color customization
|
|
- Transparency/opacity slider (0-100%)
|
|
- Message history display
|
|
- Real-time message sending and receiving
|
|
- Linux/cross-platform compatible
|
|
|
|
### Windows Client (`chat_client_win`)
|
|
- Native Win32 GUI client
|
|
- Same UI features as Qt client
|
|
- Windows-only build
|
|
|
|
## Prerequisites
|
|
|
|
### Linux / macOS
|
|
```bash
|
|
# Ubuntu/Debian
|
|
sudo apt-get install cmake qtbase5-dev libssl-dev build-essential
|
|
|
|
# macOS (Homebrew)
|
|
brew install cmake qt5 openssl
|
|
```
|
|
|
|
### Windows
|
|
- Visual Studio 2019+ or MinGW
|
|
- CMake 3.16+
|
|
- Qt5/6 SDK
|
|
- OpenSSL for Windows (vcpkg or prebuilt binaries)
|
|
|
|
## Building
|
|
|
|
### Linux / macOS
|
|
|
|
1. **Create and generate certificates:**
|
|
```bash
|
|
cd certs
|
|
./generate_certs.sh
|
|
cd ..
|
|
```
|
|
|
|
2. **Build the project:**
|
|
```bash
|
|
mkdir build
|
|
cd build
|
|
cmake ..
|
|
make
|
|
```
|
|
|
|
3. **Install (optional):**
|
|
```bash
|
|
make install
|
|
```
|
|
|
|
### Windows
|
|
|
|
1. **Generate certificates** (use OpenSSL for Windows or WSL):
|
|
```bash
|
|
cd certs
|
|
# On Windows, use Git Bash or WSL to run generate_certs.sh
|
|
# Or generate manually using OpenSSL
|
|
cd ..
|
|
```
|
|
|
|
2. **Build:**
|
|
```bash
|
|
mkdir build
|
|
cd build
|
|
cmake -G "Visual Studio 16 2019" ..
|
|
cmake --build . --config Release
|
|
```
|
|
|
|
## Running
|
|
|
|
### Server
|
|
|
|
```bash
|
|
# Linux / macOS
|
|
./build/chat_server certs/server.crt certs/server.key
|
|
|
|
# Windows
|
|
.\build\Release\chat_server.exe certs\server.crt certs\server.key
|
|
```
|
|
|
|
The server will listen on `localhost:42317`.
|
|
|
|
### Qt Client
|
|
|
|
```bash
|
|
# Linux / macOS
|
|
./build/chat_client_qt
|
|
|
|
# Windows (if built on Windows)
|
|
.\build\Release\chat_client_qt.exe
|
|
```
|
|
|
|
Connect to server by entering host/port and clicking "Connect".
|
|
|
|
### Windows Client
|
|
|
|
```bash
|
|
# Windows only
|
|
.\build\Release\chat_client_win.exe
|
|
```
|
|
|
|
## Customization Features
|
|
|
|
### Background Color
|
|
- Click "BG Color" button to select background color for all windows
|
|
- Color choice is applied immediately
|
|
|
|
### Text Color
|
|
- Click "Text Color" button to select chat text color
|
|
- Updates chat display in real-time
|
|
|
|
### Transparency
|
|
- Use the transparency slider (0-100%) to adjust window opacity
|
|
- 0% = fully transparent, 100% = fully opaque
|
|
|
|
## SSL/TLS Certificates
|
|
|
|
### Generate Self-Signed Certificates
|
|
|
|
For development and testing:
|
|
|
|
```bash
|
|
cd certs
|
|
|
|
# Generate private key
|
|
openssl genrsa -out server.key 2048
|
|
|
|
# Generate certificate (valid for 365 days)
|
|
openssl req -new -x509 -key server.key -out server.crt -days 365 \
|
|
-subj "/C=US/ST=State/L=City/O=SCAR/CN=localhost"
|
|
|
|
cd ..
|
|
```
|
|
|
|
**Note:** For production, use certificates signed by a trusted Certificate Authority (CA).
|
|
|
|
### Ignoring Self-Signed Certificates
|
|
|
|
The Qt client is configured to ignore self-signed certificate errors during development:
|
|
```cpp
|
|
socket->ignoreSslErrors();
|
|
```
|
|
|
|
For production, implement proper certificate validation.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
scar-chat/
|
|
├── CMakeLists.txt # Top-level CMake configuration
|
|
├── README.md # This file
|
|
├── certs/ # SSL certificates directory
|
|
│ └── generate_certs.sh # Certificate generation script
|
|
├── src/
|
|
│ ├── server/
|
|
│ │ └── server.cpp # TLS server (OpenSSL)
|
|
│ ├── qt_client/
|
|
│ │ └── main.cpp # Qt GUI client
|
|
│ └── windows_client/
|
|
│ └── main_win.cpp # Win32 GUI client
|
|
└── build/ # Build output directory (created after cmake)
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### "Connection refused" error
|
|
- Ensure server is running on the same host/port
|
|
- Check firewall settings on port 42317
|
|
|
|
### SSL/TLS errors
|
|
- Verify certificates exist in `certs/` directory
|
|
- Regenerate certificates if expired or corrupted
|
|
- Ensure certificate and key files are readable
|
|
|
|
### Qt not found during CMake
|
|
```bash
|
|
# Set Qt path explicitly
|
|
cmake -DQt5_DIR=/path/to/Qt5/lib/cmake/Qt5 ..
|
|
```
|
|
|
|
### OpenSSL not found during CMake
|
|
```bash
|
|
# Set OpenSSL path explicitly (macOS example)
|
|
cmake -DOPENSSL_DIR=/usr/local/opt/openssl ..
|
|
```
|
|
|
|
## Development Notes
|
|
|
|
- **C++17** standard is required
|
|
- **Qt5/6** for cross-platform GUI
|
|
- **OpenSSL 1.1+** for TLS/SSL
|
|
- Threading used for non-blocking socket operations
|
|
- Message protocol: simple newline-delimited UTF-8 text
|
|
|
|
## Security Considerations
|
|
|
|
- ✅ Uses TLS 1.2+ for encrypted communication
|
|
- ⚠️ Development mode: ignores self-signed certificate errors
|
|
- ⚠️ No user authentication implemented
|
|
- ⚠️ No message encryption at application level (relies on TLS)
|
|
|
|
For production use, implement:
|
|
- Proper certificate validation
|
|
- User authentication and authorization
|
|
- Message signing/verification
|
|
- Rate limiting and DoS protection
|
|
|
|
## License
|
|
|
|
This project is provided as-is for educational and development purposes.
|