117 lines
2.1 KiB
Markdown
117 lines
2.1 KiB
Markdown
# Database Quick Reference
|
|
|
|
## Build
|
|
|
|
```bash
|
|
cd build
|
|
cmake ..
|
|
make
|
|
```
|
|
|
|
Creates:
|
|
- `chat_server` - Chat server with database support
|
|
- `dbmanager` - User management tool
|
|
|
|
## Quick Start
|
|
|
|
### 1. Create Admin User
|
|
|
|
```bash
|
|
./dbmanager register admin AdminPassword123 admin@example.com admin
|
|
```
|
|
|
|
### 2. Create Regular Users
|
|
|
|
```bash
|
|
./dbmanager register user1 UserPassword456 user1@example.com user
|
|
./dbmanager register user2 UserPassword789 user2@example.com user
|
|
```
|
|
|
|
### 3. Verify Users
|
|
|
|
```bash
|
|
./dbmanager list
|
|
```
|
|
|
|
### 4. Test Authentication
|
|
|
|
```bash
|
|
./dbmanager authenticate user1 UserPassword456
|
|
```
|
|
|
|
## Common Tasks
|
|
|
|
| Task | Command |
|
|
|------|---------|
|
|
| Register user | `dbmanager register <user> <pass> [email] [role]` |
|
|
| List all | `dbmanager list` |
|
|
| List by role | `dbmanager list-role admin` |
|
|
| Change role | `dbmanager setrole <user> admin` |
|
|
| Disable user | `dbmanager deactivate <user>` |
|
|
| Enable user | `dbmanager activate <user>` |
|
|
| Test login | `dbmanager authenticate <user> <pass>` |
|
|
|
|
## Database Location
|
|
|
|
```bash
|
|
./scar_chat.db # Created in current working directory
|
|
```
|
|
|
|
## Roles
|
|
|
|
- `user` - Regular chat user
|
|
- `admin` - Full administrative access
|
|
- `moderator` - Moderation capabilities
|
|
|
|
## Password Requirements
|
|
|
|
- Minimum 8 characters
|
|
- No special format required
|
|
- Unique per user
|
|
|
|
## Security
|
|
|
|
- SHA256 hashing with per-user salt
|
|
- Passwords never stored in plain text
|
|
- Database file should have restricted permissions
|
|
|
|
```bash
|
|
chmod 600 scar_chat.db
|
|
```
|
|
|
|
## C++ Integration
|
|
|
|
```cpp
|
|
#include "database.h"
|
|
|
|
Database db("scar_chat.db");
|
|
db.initialize();
|
|
|
|
// Register
|
|
db.register_user("alice", "secret123", "alice@example.com", "user");
|
|
|
|
// Authenticate
|
|
if (db.authenticate_user("alice", "secret123")) {
|
|
// Success
|
|
}
|
|
|
|
// Get user
|
|
User user = db.get_user("alice");
|
|
std::cout << "Role: " << user.role << std::endl;
|
|
```
|
|
|
|
## Database Schema
|
|
|
|
```
|
|
Users Table:
|
|
- id (INTEGER PRIMARY KEY)
|
|
- username (TEXT UNIQUE)
|
|
- password_hash (TEXT)
|
|
- salt (TEXT)
|
|
- email (TEXT)
|
|
- role (TEXT) - 'user', 'admin', 'moderator'
|
|
- is_active (BOOLEAN)
|
|
- created_at (TIMESTAMP)
|
|
- updated_at (TIMESTAMP)
|
|
```
|